Вычисления во время транслирования. Сдвиг выражения влево (с заполнением нулями) на число позиций, заданных выражением

Страницы работы

Фрагмент текста работы

Данная команда JMP будет использовать +20H в качестве значения смещения. Это эквивалентно следующей команде:

JMP       20H

где следующей выполняемой командой всегда будет команда, отстоящая на +20H от данной команды JMP.

Описание Макросов.

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

В макроопределениях формальные аргументы не могут содержать пробелы. Однако, в реальных вызовах макросов аргументы могут иметь любой тип; прямые, косвенные, символьные строки или регистры. Пробелы в аргументах недопустимы за исключением строк в кодах ASCII; в этом случае строка должна быть заключена в апострофы. Если сама строка содержит апостроф, то он должен быть представлен двумя расположенными подряд апострофами. Если имена формальных аргументов идентичны, то аргументы будут передаваться к любым вложенным макросам. Вложение макросов ограничивается только объемом доступного пространства памяти.

Для определения макроса используется директива .MACRO. После макроопределения должна располагаться директива .MACEND или директива .ENDM. Имя макроса находится в поле метки.

Разделители аргументов.

В строке вызова макроса аргументы должны разделяться запятыми. Однако, начальные  символы пробела и табуляции игнорируются. Если аргументы отсутствуют, то в качестве метаобозначения используется единственная запятая.

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

, + - * / ** \ & ^ = ( ) [ ] |

.NOT. .AND. .OR. .XOR. .EQ. .GT.

.LT. .UGT. .ULT. .SHR. .SHL.

Метки в макросах.

В макроопределениях допустимо использование меток. Метки могут быть заданы двумя способами: явным и неявным. Явно заданные метки в макроопределениях не будут изменяться ассемблером. За неявно заданными метками следует знак #. Ассемблер будет вместо знака # подставлять состоящий из 3 цифр номер макрорасширения. В этом случае метка и номер макрорасширения не должны превышать 32 символа. Для задания метки может использоваться аргумент.

Объединение строк.

Символ разорванной линии (| - код 7C шестнадцатеричный) используется в качестве оператора конкатенации строк. Конкатенация может выполняться только внутри макроса.

Объединение числовых величин.

Конкатенация строки и значения выражения может достигаться путем использования символа разорванной линии (| - код 7C шестнадцатеричный), за которым следуют левая угловая скобка, выражение и правая угловая скобка. Между символом разорванной линии и левой угловой скобкой недопустимо использование пробелов. Далее приводится пример такого оператора:

CONCAT             .MACRO     ARG

VALUE:             .VAR       VALUE+1

ARG|<VALUE*2>      .EQU       31

.ENDM

VALUE              .VAR

CONCAT     LABEL

При вызове CONCAT LABEL будет создано:

LABEL2             .EQU       31

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

Старшинство мнемонических описаний.

Поиск в ассемблерных таблицах осуществляется в следующем порядке:

1        Таблица мнемонических обозначений

2        Таблица макроопределений

3        Таблица директив ассемблера

4        Таблица имен секций

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

Примеры макросов.

Макрос может использоваться для осуществления сравнения строк

Похожие материалы

Информация о работе