Макрокоманды

Если данная последовательность команд часто встречается в программах (а также в некоторых других не очень очевидных случаях), оказывается удобным обозначить ее симвлическим именем. Такое средство ассемблера, которое позволяет подставить вместо символического имени соответствующую последовательность команд, называется макросредством, а сама поименованная . совокупность команд — макрокомандой. Ассемблер автоматически заменяет каждую ссылку на макрокоманду последовательностью команд, взятой из макроопределения.

Простейшая макрокоманда состоит из одной машинной команды. Например, на ЭВМ, где нет специальной команды ЛОГИЧЕСКИЙ СДВИГ ВЛЕВО, эта операция может быть заменена сложением содержимого аккумулятора с самим собой по команде ADD А. Если составить макроопределение, то можно присвоить команде сдвига свой собственный мнемонический код:

SLL MACRO

ADD А

ENDM

Имя SLL, указанное в поле метки псевдооперации MACRO, есть лмя макрокоманды. Как только эта макрокоманда определена, мнемоническое имя SLL можно использовать так же, кск и код любой ма щинной команды: каждое вхождение имени SLL ассемблер заменит двоиччым кодом команды ADD А.

Макрокоманда может иметь параметры. Например, для логической операции NAND (И—НЕ) можно задать следующее макроопределение:

NAND MACRO ADDR AND ADDR

ИНВЕРТИРОВАТЬ АККУМУЛЯТОР

ENDM

Сцмбол NAND есть ймя макрокоманды, а символ ADDR, указанный в поле аДреса, — параметр макрокоманды. При использовании мак-рбкоманды NAND следует задавать значение адреса. Ассемблер переработает это значение адреса в ту совокупность команд, которая определяет макрокоманду. Например, вместо макфовызова NAND 100 ассемблер вставит команды

AND 100

ИНВЕРТИРОВАТЬ АККУМУЛЯТОР

Разумеется, макрокоманды могут быть гораздо сложнее, чем в рассмотренных примерах. У макрокоманды может быть несколько параметров и она может состоять из многих команд. Пример* Сумма элементов массива.

SUM MACRO TOTAL, ELEM,NUM LOAD # 0

ЗАГРУЗИТЬ В ИНДЕКСНЫЙ РЕГИСТР NUM LOOP ,ADD . ELEM,X

ДЕКРЕМЕНТИРОВАТЬ ИНДЕКСНЫЙ РЕГИСТР ПЕРЕЙТИ. К LOOP, ЕСЛИ НЕ НУЛЬ ЗАПОМНИТЬ РЕЗУЛЬТАТ В TOTAL ENDM

Макрокоманда SUM имеет три параметра: адрес TOTAL, куда помещается сумма, начальный адрес массива ELEM и адрес SUM, в котором находится длина массива. Программист может воспользоваться макрокомандой, задав в своей программе оператор вида

SUM ТОТ1, А1, N1

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

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



Djessi это магазин японской бытовой химии www.babysmile.ru.