Программирование 16-разрядных микропроцессоров на Ассемблере
Допустимые символы языка ассемблера состоят из прописных и строчных букв (латинских), цифр, специальных знаков +, -, *, /, =, (), [], ’, ’’, ., ;, @, &, ?, <, >, % и символов: перевод строки ПС (ОАН), возврат каретки ВК (ОDН), табуляции (О9Н). Любой другой символ воспринимается как пробел. Наименьшей конструкцией модуля является идентификатор – последовательность букв и цифр (не более 31), начинающийся с буквы. К зарезервированным именам относятся имена регистров, операций, псевдокоманд. Модуль представляет собой последовательность операторов языка, записанных в одной строке и заканчивающихся возвратом каретки и переводом строки. Если в первой позиции оператора стоит символ &, то оператор является продолжением предыдущего.
Операторы разделяются на командные и директивы. Команды порождают одну машинную команду. Директивы (псевдокоманды) содержат управляющую информацию для ассемблера. Оператор команды имеет вид:
{метка:} {префикс} {мнемоника} {операнд(ы)}; { комментарий}.
Значения метки являются текущим значением счетчика в данном сегменте кода, то есть, представляет собой адрес команды. Префикс позволяет формировать байты блокировки LOOK или повторения REP. Мнемоника идентифицирует тип генерируемой команды. В зависимости от функции команды может быть один операнд, два или ни одного. Более двух операндов указывается в макрокоманде. Комментарии поясняют смысл команды.
Директивы ассемблера имеют несколько другой формат:
{имя} директива {операнд(ы)} {; комментарий}
Имя директивы имеет другой смысл по сравнению с меткой и не заканчивается двоеточием. В ряде директив имя отсутствует.
Директивы используются для распределения памяти, связей между модулями, манипуляции с символами и т.д. В отдельных директивах допускаются списки операндов. Операнды могут быть ключевыми словами в директивах PROG, SEGMENT. Для определения макрокоманд используется оператор вида:
MACROCODE имя {операнд(ы)}; {комментарии}
Переменная – это единица данных, имеющая имя. Она имеет три атрибута: сегмент, смещениеитип. Сегмент SEG определяет сегмент, содержащий переменную. СмещениеOFFSET, расстояние от начала сегмента до переменной, тип – число байтов переменной (1,2 или 4).
Метка, представляющая имя ячейки памяти, имеет атрибутами сегмент, смещение, расстояние. Константа отличается от переменной и метки тем, что она определяет только число. Символьные цепочки заключаются в апострофы и обычно имеют длину до 255 знаков.
Для определения и инициализации данных предназначены директивы:
DB - определить байт (Define Byte)
DW - определить слово (Define Word)
DD - определить двойное слово (Define Double Word).
Формат директивы:
имя DX <начальное значение>, [< начальное значение>]
Пример определения переменных:
Z1 DB 0ABH ; один байт, равный AB
Z2 DW 1000H ; одно слово, равное 1000
Z3 DD 1235H; 1000H ; младшее слово 1000, старшее 1235.
Для указания произвольного значения ячеек памяти используется символ ? (значение переменной не оговаривается, резервирование ячейки). Для распределения и инициализации нескольких ячеек памяти используется конструкция DUP:
DB 100 DUP(0) ; сто нулевых байтов (Dublicate)
DW 20 DUP(?) ; 20 слов без значения
Дата добавления: 2016-02-09; просмотров: 1150;