Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Набор регистров.docx
Скачиваний:
0
Добавлен:
31.08.2019
Размер:
31.29 Кб
Скачать

Синтаксис команд Ассемблера.

Программа на языке ассемблера представляет собой последовательность операторов, описывающих выполняемые операции. Оператором (строкой) исходной программы может быть или команда, или псевдооператор (директива) Ассемблера. Команды выполняются в процессе решения задачи на компьютере, а директивы - в процессе ассемблирования (трансляции) программы. Следовательно, в отличие от команд псевдооператоры или директивы сообщают Ассемблеру (транслятору), что ему делать с командами и данными, которые вводятся в программе.

Команда может включать до 4-х полей следующего вида:

[метка:] мнемокод [операнд] [; комментарий]

Поскольку в [ ] указываются необязательные поля, то, следовательно, команда должна содержать мнемокод выполняемого действия. Поля могут набираться в любом месте строки, но отделяйте поля друг от друга хотя бы одним пробелом и, если хотите разобраться в своей программе по истечению времени, позаботьтесь о читабельности, что чаще всего обеспечивается за счет позиционирования полей. Пример команды со всеми полями:

GETCOUNT: MOV CX.DX ;инициализация счетчика, поместить содержимое регистра DX в регистр СХ

Пример команды с полем мнемокода:

PUSHF

Эта команда сохраняет в стеке содержимое регистра флагов.

Следует отметить, что Ассемблер не различает прописные и строчные буквы.

В качестве операнда в команде может фигурировать константа, которая может быть введена в следующих формах:

- двоичной, как последовательность цифр 0 и 1 , заканчивающихся буквой В, например, 10111010В;

- десятичной (в привычной десятичной системе счисления с необязательной буквой D на конце), например, 129D или просто 129;

- шестнадцатеричной, как последовательность цифр от 0 до 9 и букв от А до F, заканчивающаяся буквой Н. Первым символом может быть только цифра от 0 до 9, например, ОЕ23Н (в данном случае первая цифра информирует ассемблер о том, что Е23 число, а не идентификатор или

переменная);

- литералом, строка букв, цифр и других символов, заключенная в

кавычки или апострофы.

Мнемокоды могут иметь от 2 до 6 букв, при трансляции мнемокод преобразуется в числовое значение по таблице перекодировки (внутри транслятора). Мнемокоды имеют жесткий формат, предусматривающий 1,2 или отсутствие операндов. Если операндов 2, они отделяются друг от друга запятой.

Операнды команды могут задаваться по-разному:

1) неявно на микропроцессорном уровне. Такие команды работают либо с регистрами, либо с флагами и в конкретной команде объект определяется кодом команды, например:

PUSHF - команда пересылки флагов в стек. Источник (откуда берутся

данные) и приемник (куда пересылаются) определяются кодом

команды;

или CLD - обнуление флага направления DF;

2) явно в самой команде (непосредственный операнд), например:

MOV АХ,0;

3) одним из регистров общего назначения (РОН) или сегментным регистром;

4) идентификатором переменной (меткой переменной, описанной в сегменте данных). В этом случае операнд располагается в ОЗУ. При косвенной адресации адрес-смещение переменной в ОЗУ помещается в РОН или индексный регистр и в команде используется ссылка на этот регистр;

5) номером порта ввода-вывода. В этом случае номер задается шестнадцатеричной константой;

6) регистром стека, когда используются команды работы со стеком и в этом случае операнд либо заносится в вершину стека, либо считывается из вершины стека.

Меткой является последовательность букв и цифр, после которой ставится двоеточие. Нельзя использовать в качестве меток имена регистров и мнемокоды, кроме того метка должна начинаться с буквы, но может содержать цифры и спец символы: ?, @, /, _,$ и точку, однако точка может быть только первым символом метки.

Важной особенностью машинных команд является то, что они не могут манипулировать одновременно 2-мя операндами, находящимися в ОЗУ. Это означает, что в команде только 1 операнд может указывать на ячейку ОЗУ, 2-ой д.б. либо регистром, либо непосредственно указывать значение. По этой причине возможны следующие сочетания операндов в команде:

регистр - регистр;

регистр - память;

память - регистр;

регистр - непосредственный операнд;

память - непосредственный операнд.

Для команд характерно, что если в них присутствуют 2 операнда, то 1-ый является приемником, а 2-ой -источником, иначе говоря результат операции сохраняется по 1-ому адресу, вот почему 1-ый операнд никогда не может быть непосредственным операндом или иначе говоря, константой.