Специальные символы ассемблера. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Специальные символы ассемблера.



Знаком “$NAME” обозначается в описании ассемблерной мнемоники инструкции значение аргумента с именем NAME. Если NAME – это список регистров или список аргументов, то в ассемблере ожидается подстановка ассемблерного имени регистра или элемента списка. Если NAME- целочисленная константа, то ожидается подстановка числа или ассемблерной метки.  Последовательность “$$” распознается в ассемблере как символ $. Подробнее см главу «Описание инструкций».

 

 

Директива препроцессора #define

Директива #define служит для замены часто использующихся констант, ключевых слов, операторов или выражений некоторыми идентификаторами. Идентификаторы, заменяющие текстовые или числовые константы, называют именованными константами. Идентификаторы, заменяющие фрагменты программ, называют макроопределениями,

причем макроопределения могут иметь аргументы.

 

Директива #define имеет следующую синтаксическую форму:

#define идентификатор (список параметров) текст

Эта директива заменяет все последующие вхождения идентификатора на текст. Текст может представлять собой любой фрагмент программы на ppdl, а также может и отсутствовать. В последнем случае все экземпляры идентификатора удаляются из программы.

Список параметров директивы может быть пуст. В этом случае директива имеет следующую форму:

#define идентификатор() текст

или

#define идентификатор текст

 

В языке PPDL  допустимо использование многострочных макросов. Для создания многострочных макросов в конце каждой строки необходимо ставить символ “\” пример:

#define ADD_SHIFT(arg1,arg2)\

       res = arg1 + arg2;\

       val = res>>8;

 

Директива препроцессора #include

Директива препроцессора #include дает указание компилятору читать еще один исходный файл — в дополнение к тому файлу, в котором находится сама эта директива. Имя исходного файла должно быть заключено в двойные кавычки. Например, конструкция:

#include “function.hdl”

 включает в процесс компиляции содержимое файла function.hdl

Директива препроцессора #ifdef

Директивы #ifdef… #else … #endif – это директивы условной компиляции, которые дают возможность выборочной компиляции тех или иных частей кода.

Директива #if выглядит таким образом:

#ifdef SYMBOL

последовательность операторов

#endif

 

Если ранее в коде был определен символ SYMBOL, то код между #ifdef и #endif будет компилироваться, в противном случае этот код будет пропущен компилятором.

Определить символ SYMBOL можно только посредством директивы #define, например:

#define SYMBOL 1

 

Второй вариант: использовать #ifdef совместно с конструкцией #else следующим образом:

#ifdef SYMBOL

последовательность операторов 1

#else

последовательность операторов 2

#endif

 

Если ранее в коде был определен символ SYMBOL, то будет компилироваться последовательность операторов 1, то есть код между #ifdef и #else. В противном случае будет компилироваться последовательность операторов 2, то есть код между #else и #endif

 

Описание элементов процессора на языке PPDL

Декларация архитекуры процессора

Формат

DEVICE ProcessorName

{

processor description

}

 

Аргументы

ProcessorName – название процессора. Генератор симулятора в случае успешной компиляции, производит C++ класс с именем ProcessorName.

processor description – тело описания процессора. Все элементы процессора должны быть описаны в теле процессора.

Примечание

В настоящее время поддерживается возможность описания только одного процессора в файле.

 

 

Описание регистров

Формат

       Reg Name [Array_size], bit_size, “ Assembly_name ” [mutable];

или

       Reg type Name [Array_size], “ Assembly_name ” [mutable];

 

Аргументы

 

Name – имя регистра.

 

Array_size – размер массива регистров. Если декларируется только один регистр, параметр Array_size можно опустить.

 

Bit_size – размер регистра в битах

Type – тип регистра, допустимо задавать типы double, float. intN, где N – целой в диапазоне от 1 до 64 включительно (например int1, int4, int64). Type является аналогом bit_size, в декларации можно задавать либо type и перед именем регистра, либо Bit _ size и после имени регистра через запятую.

 

Assembly_name – ассемблерное имя регистра. Если регистр внутренний, то данный параметр можно опустить. Для массива регистров в ассемблерном имени должен присутствовать символ $ для обозначения индекса регистра в массиве.

 

Например, если регистр описан следующим образом, Reg r[15],32,"r[$]" ассемблерное имя регистра будет, например, r[0],r[1],r[2] и т.д.

 

mutable – опциональное ключевое слово, говорящее компилятору о том, что у регистра или у каждого элемента регистрового массива появляется бит блокировки доступа. С помощью данного бита имеется возможность останавливать работу конвейера в случае, если регистр заблокирован. Для блокировки регистра предусмотрены операторы lock или llink (см. главу «»). Для разблокировки предусмотрен оператор unlock.    

 

 

Примеры

Reg r[16],32,"r[$]"; // массив из шестнадцати 32-х битных регистров

Reg gr[16],32,"gr$" mutable; // массив из шестнадцати 32-х битных регистров, доступ к каждому регистру может быть заблокирован

Reg FR,16,"FR";   // 16-и битный регистр флагов

Reg IR[3],32;         // внутренний массив из трех 32-х битных регистров

Reg T1,32;        // внутренний 32-х битный регистр

Описание блоков FIFO

Формат

       RegFifo Name [fifo_size], bit_size, “ Assembly_name ”;

       RegFifo type Name [fifo_size], “ Assembly_name ”;

 

Аргументы

 

Name – имя регистра.

 

fifo_size – количество элементов блока FIFO.

bit_size – размер элемента блока FIFO

type – тип элемента блока FIFO, допустимо задавать типы double, float. intN, где N – целой в диапазоне от 1 до 64 включительно (например int1, int4, int64). Type является аналогом bit_size, в декларации можно задавать либо type и перед именем регистра, либо Bit _ size и после имени регистра через запятую.

 

Assembly_name – ассемблерное имя FIFO. Если FIFO внутренний, то данный параметр можно опустить.

Примеры

 

Описание флагов

Флагом в PPDL является именованный бит регистра процессора.

Формат:

       Flag Name, Reg[bit_of_reg];

 

Аргументы:

 

Name – имя флага в симуляторе

 

Reg – имя регистра флагов

 

bit_of_reg – номер бита в регистре флагов

Примеры

 

Flag O,FR[0];    // Overflow

Flag N,FR[1];    // Negative

Flag Z,FR[2];    // Zero flag

Flag C,FR[3];       // carry from 15 to 16 bits

 

Описание шины памяти

Операции обращения к памяти процессора осуществляются через шины памяти. При описании модели в целом шины могу быть соединены с блоками памяти или мультиплексорами, разделяющими запросы к памяти по разным блокам.

Формат

       MemSpace Name, AddrSize, DataSize;

 

Аргументы

       Name – имя шины

       AddrSize – размер шины адреса

       DataSize – размер шины данных

Пример

MemSpace data,32,32; // data memory space

 



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 119; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.121.131 (0.013 с.)