русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Псевдооператоры или директивы


Дата добавления: 2015-01-16; просмотров: 1652; Нарушение авторских прав


Псевдооператор Формат и Функция
Определения данных DB [имя] DB выражение [,…….] определяет переменную или присваивает ячейке памяти начальное значение. Резервирует 1 или более байт (при наличии запятых)
DW [имя] DW выражение [,…….] аналогично предыдущему резервирует двухбайтовые слова
DD [имя] DD выражение [,…….] Резервирует 4-х байтовые двойные слова
   
Псевдооператор Формат и Функция
Определения сегмента или процедуры SEGMENT   Имя_cer SEGMENT [тип_выравнивания (подгонки)] [тип_связи] [‘класс’] . . . . Имя_cer ENDS Определяет границы сегмента программы. Обязательно содержит начало описания Имя_cer SEGMENT и окончание описания Имя_cer ENDS  
ASSUME ASSUME регистр_cer: Имя_cer [,…….] Или ASSUME регистр_cer: NOTHING Cообщает Ассемблеру, какой регистр сегмента связан с соответствующим сегментом программы. Оператор ASSUME регистр_cer: NOTHING отменяет действие всех предыдущих операторов ASSUME для данного регистра
PROC Имя PROC [NEAR] или Имя PROC FAR . . . . . . . . RET имя ENDP Присваивает имя последовательности операторов. Должно иметь начало PROC и окончание ENDP
Управление трансляцией END   END [метка точки входа] Отмечает конец исходной программы
Внешние ссылки PUBLIC PUBLIC идентификатор Делает определенный ранее идентификатордоступным другим модулям программы, которые впоследствии должны быть присоединены к данному модулю
EXTERN   EXTERN имя: тип [, ….] Указывает, что имя определено в другом модуле программы
INCLUDE   INCLUDE файл вставляет содержимое указанного файла в текущий файл исходной программы
Псевдооператор Формат и Функция
Определение идентификаторов EQU Имя EQU текст или Имя EQU числовое_выражение Постоянно присваивает идентификатору имя текст или числовое_выражение Имя = числовое_выражение Числовое_выражение присваивается идентификатору имя, но может быть переприсвоено

 



Директивы определения данных присутствуют только в сегменте данных (сегмент данных является аналогом раздела VAR в программах на языке Паскаль). Как и в других языках программирования, для операций с данными необходимо указать в команде имя этого элемента данных, и также имена данных должны быть уникальными и не совпадать с зарезервированными словами (мнемокодами команд или псевдооператорами).

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

В директиве SEGMENT тип_выравнивания указывает, на границе байта (BYTE) слова (WORD ), параграфа (PARA) или другой должен быть установлен адрес начала сегмента. Выравнивание на границу параграфа означает, что адрес начала сегмента д.б. кратен 16, слова - кратен 2.

Тип_связи (комбинирования сегментов) указывает, как нужно комбинировать сегменты различных модулей, имеющие одно и то же имя. По умолчанию предполагается PRIVATE, что означает, что сегмент не будет объединяться с сегментами с таким же именем вне данного модуля. PUBLIC заставляет компоновщик объединить все сегменты с одинаковым именем. Объединенный сегмент будет непрерывным, все адреса данных или команд будут определяется относительно начала этого сегмента. COMMON - все сегменты с одним именем располагаются по одному адресу (перекрываются).

'класс' заключенная в кавычки строка символов определяет назначение сегмента и помогает компоновщику определить порядок следования сегментов внутри программы. Формально этот порядок может быть любым, но лучше, если все сегменты кода (содержат команды обработки) объединяются в общую группу. Заключенное в кавычки слово класс может принимать следующие значения: code, stack, data, что означает соответственно сегмент кода (команд программы), сегмент стека и сегмент данных.

Все сегменты сами по себе равноправны, т.к. директива SEGMENT не содержит информации о функциональном назначении сегментов. Для того, чтобы Ассемблер использовал сегмент либо как сегмент кода, либо как сегмент данных, необходимо предварительно транслятору сообщить об этом в директиве ASSUME. Именно он сообщает транслятору, какой сегмент к какому сегментному регистру привязан.

Директивы определения данных по своим функциям и назначению аналогичны описаниям переменных в языках высокого уровня. Особенность в том, что слово DUP означает дубликат или иначе, повторение столько раз, сколько указано числом перед этим словом. Если после DUP в скобках указано значение, то оно будет занесено в память в начале работы программы. Если это значение?, то выделенный для переменной участок памяти инициализироваться не будет (останется таким, каким было при выполнении предыдущих действий).

Ниже приводится таблица примеров определения переменных в программе на ассемблере.

 

Таблица 5.2. Примеры определения переменных.

Имя Директива определения значения комментарий
DB – определение байтов
BYTE1 DB ? Без указания значения
BYTE2 DB Десятичная константа
BYTE3 DB 30Н Шестнадцатеричная константа
BYTE4 DB 01111010В Двоичная константа
BYTE5 DB 10 DUP(0) Десять нулевых значений
BYTE6 DB ‘Input simbol’ Строка символов
BYTE7 DB ‘12345’ Строка цифровых символов
BYTE8 DB 01, ‘Jan’, 02, ‘Feb’, 03, ‘mar’, 04, . . . . Таблица месяцев года, состоит из числовых значений номера месяца и его сокращенного названия
DW – определение слов (16 бит=2 байта)
WORD1 DW 0fff0h Шестнадцатеричная константа
WORD2 DW 01111010В Двоичная константа
WORD3 DW BYTE3 Константа адреса переменной
WORD4 DW 2,3,4,5,6 Таблица из 5 констант
WORD5 DW 8 DUP(0) Восемь нулевых значений
DD – определение двойных слов (32 бита = 4 байта)
DWORD1 DD ? Без значения
DWORD2 DD Десятичное значение
DWORD3 DD 48Н, 24Н, СА 3 шестнадцатеричные константы
DWORD4 DD WORD1 Адрес слова в виде сегмент:смещение
DWORD5 DD BYTE8-BYTE5 Разность между адресами переменных (количество байт)
         

 



<== предыдущая лекция | следующая лекция ==>
Способы задания операндов | Загрузка и выполнение программ на компьютере


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.203 сек.