Микропроцессоры. Управляющие сигналы и принцип работы микропроцессоров, страница 13

Метка

Код

Операнд

Комментарий

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