Формат команд языка ассемблера
Каждая команда языка ассемблера в исходной программе может иметь до четырехполей следующего вида:
[метка:] мнемокод команды [операнд1,операнд2] [;комментарий]
Поля, указанные в квадратных скобках не обязательны. Поле операндов заполняется только в тех командах, которым требуется операнды. Поля должны быть разделены хотя бы одним знаком пробела. Пример типичной команды:
METKA1: MOV AX,BX; Двухоперандная команда пересылки данных из
регистра ВХ в регистр АХ. После выполнения
команды содержимое обоих регистров будет
одинаково.
Поле метки служит для присваивания имени команде. На это имя могут затем ссылаться другие команды программы. Поле может содержать до 31 символа и должно заканчиваться двоеточием (:).
Поле мнемокода содержит мнемоническое изображение команды или инструкции, которое определяет действия процессора.
Поле операндов содержит сведения о местонахождении данных подлежащих обработке. Данные могут находиться в регистрах, памяти или непосредственно в команде. Если операндов больше одного, то они разделяются запятой. Пробел не обязателен. Большинство команд двухоперандные и имеют формат вида:
КОМАНДА приемник, источник
Так выглядят все команды пересылки, когда пересылается второй операнд в первый, команды сложения и вычитания, когда процессор читает содержимое источника, выполняет некоторую операцию с привлечением первого операнда и сохраняет результат в первом операнде. Ассемблер оперирует также безоперандными командами; в этом случае операнд подразумевается кодом самой команды.
Поле комментариев - это необязательное поле, в котором можно описывать команды программы и их роль в программе. Это поле не транслируется, и должно отделятся от поля операнда точкой с запятой (;).
Команды МП 8086 могут занимать в памяти от 1 до 6 байт, формат команд показан на рисунке 2.24.
7 1 0 7 6 5 3 2 0
COP | D | W | MOD | REG | R/M | DISP 8/16 | DATA 8/16 |
Рисунок 2.24 - Формат команды МП 8086
В первом байте содержится код операции (в некоторых случаях он может размещаться и во втором байте).
Одноразрядное поле W служит указателем разрядности (при W = 0 операнды 8-разрядные, а при W=1 операнды 16-разрядные).
Поле D указывает, в какой из двух регистров заносится результат операции. Если D=0, то результат в регистре приемнике, если D=1, то результат в регистре источнике.
Двоичный код поля REG указывает регистр, в котором находится операнд.
Поля MOD и R/M второго байта команды определяют один из 24 режимов формирования относительного адреса операнда в сегменте данных или стека. Одно, или двухбайтовое смещение в команде определяют соответственно поля DISP8 и DISP16.
Поле R/M при коде MOD, равном 11, и поле REG определяют содержимое РОН.
В полях DATA8 или DATA 16 находятся одно или двухбайтовые непосредственные данные.
Дата добавления: 2016-02-24; просмотров: 1053;