Метка |
Код |
Операнд |
Комментарий |
ADDR: |
DW |
0FF00H |
;(ADDR)=00H, (ADDR+1)=FFH |
… |
… |
… |
… |
DATA: |
DW |
100H,200H |
;Инициализируются 4 ячейки |
8. Директива DS. Директива DS (определить память) имеет следующий формат:
Метка |
Код |
Операнд |
Комментарий |
[необязательная метка:] |
DS |
<выражение> |
Вычисленное значение выражения из поля операнда определяет число ячеек (байт) памяти, резервируемых для запоминания данных. Никакие значения в этих ячейках не запоминаются, в частности нельзя считать, что эти ячейки содержат нули. Адрес следующего оператора равен сумме адреса оператора, находящегося перед директивой DS и значения выражения директивы DS. Примеры использования директивы DS:
Метка |
Код |
Операнд |
Комментарий |
ARRAY: |
DS |
32 |
;Резервируются 32 ячейки |
TABLE: |
DS |
64 |
;Резервируются 64 ячейки |
5.3. Макрокоманды
При программировании возникают ситуации, когда одно и тоже действие, возможно, с небольшими модификациями, описываемое группой команд, необходимо выполнять в программе несколько раз. Для сокращения длины программы и ускорения программирования такую группу команд допускается определить 1 раз как большую команду — макрокоманду — с мнемоникой, не входящей в систему команд микропроцессора. После определения макрокоманды ее мнемонику можно использовать сколько угодно раз. Всякий раз ассемблирующая программа заменяет эту мнемонику той последовательностью команд, которая фигурирует в определении макрокоманды.
1. Определение макрокоманды. Определение макрокоманды имеет следующий формат:
Метка |
Код |
Операнд |
Комментарий |
<имя> |
MACRO |
<список параметров> |
|
… |
… |
… |
… |
Тело макрокоманды |
|||
… |
… |
… |
… |
ENDM |
Символическое наименование метки в поле метки не содержит заключительного двоеточия. Параметры в поле операнда разделяются запятыми и в общем случае могут быть выражениями. Группа операторов между директивами MACRO и ENDM, называемая телом макрокоманды, может содержать любые команды и директивы (кроме MACRO и ENDM), комментарии и обращения к другим подпрограммам. Параметры должны быть определены при каждом обращении к макрокоманде. Поле операнда может оставаться пустым. Оно используется в тех случаях, если при обращении к макрокоманде может потребоваться вносить изменения. В этом случае при определении макрокоманды не указывать некоторые данные, регистры и т. д. Они задаются при каждом обращении к макрокоманде.
Пример 1. Макрокоманда SHV, которая сдвигает содержимое аккумулятора вправо с записью в освобождающиеся биты нулей, считая, что число сдвигов находится в регистре D:
Метка |
Код |
Операнд |
Комментарий |
SHV |
MACRO |
;Макрокоманда SHV простого сдвига ;аккумулятора вправо |
|
LOOP: |
RRC |
||
ANI |
7FH |
||
DCR |
D |
;Константа сдвига в регистре D |
|
JNZ |
LOOP |
||
ENDM |
Пример 2. Возможности этой макрокоманды можно расширить, если не указывать регистр-счетчик и число сдвигов, а задавать их при каждом обращении к макрокоманде. Это достигается путем введения макрокоманды с формальными параметрами. Макрокоманда SHV с двумя параметрами (регистр-счетчик REG, число сдвигов VOL):
Метка |
Код |
Операнд |
Комментарий |
SHV |
MACRO |
REG,VOL |
;Макрокоманда SHV простого сдвига ;аккумулятора вправо с двумя параметрами |
LOOP: |
RRC |
||
ANI |
7FH |
||
DCR |
REG |
||
JNZ |
LOOP |
||
ENDM |
При обращении к макрокоманде SHV в любой части программы можно использовать в качестве счетчика любой свободный РОН и задавать переменное число сдвигов.
2. Обращение к макрокоманде. Обращение к определенной ранее в программе макрокоманде имеет следующий формат:
Метка |
Код |
Операнд |
Комментарий |
[необязательная метка:] |
<имя> |
<список параметров> |
В поле мнемоники содержится имя макрокоманды, которое фигурировало в поле метки директивы MACRO, а в поле операнда — список фактических параметров. Значения параметров подставляются в тело макрокоманды слева направо в соответствии с полем операнда директивы MACRO. Если в обращении имеется меньше параметров, чем в определении макрокоманды, то остальные параметры считаются пустыми. Если в обращении больше параметров, чем в определении, лишние параметры игнорируются.
3. Расширение макрокоманды. При подстановке фактических параметров в тело макрокоманды образуются операторы языка ассемблера. Эта процедура носит название расширение макрокоманды. Расширение должно содержать только допустимые операторы. Пример:
Метка |
Код |
Операнд |
Комментарий |
STACK |
MACRO |
R1 |
|
PUSH |
R1 |
;Загрузка в стек содержимого регистра R1 |
|
ENDM |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.