Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Специальные символы ассемблера.
Знаком “$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; просмотров: 124; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.72.91 (0.018 с.) |