Язык ассемблера микропроцессора 8088. Константы с фиксированной запятой. Определение данных и распределение памяти, страница 8


MOV             SS,CS       б) Сегментный регистр DS используется при сложении.

в)  Непосредственный операнд переда ется в регистр ES

г)   Оба операнда являются сегментными регистрами

Ниже приведена правильная запись предыдущего примера

ADD     AX,DX

PUSH    ВХ

MOV     СХ,100

ADD     DX,CX

MOV     CX, 200

MOV     ES,CX

MOV     CX,CS

MOV     SS,CX

Выход из диапазона адресов

Все команды условного перехода используют режим относительной адресации с 8-битовым смещением. Если относительный адрес символа, используемого в качестве операнда-адреса перехода, выходит за диапазон + 127 байт —128 байт от конца команды условного перехода, выдается сообщение об ошибке

AND      AL,7FH               Неверные записи

JE           NEXT_PROC

END_PROC:   RET                                      Более 127 байт между

DATA                DW         300 DUP(?)      символическим адресом

NEXT_PROC:                                                NEXT_PROC и

END_PROC

CLC

Ниже приведена правильная запись предыдущего примера

AND      AL,7FH

JNE       END_PROC

JMP       NEXT_PROG END_PROC:    RET DATA                 DW        300 DUP(?)

NEXT_PROC:

CLC

Использование операндов

В языке ассемблера для микропроцессора МП 8083 первый операнд всегда используется в качестве приемника. Операнд может быть записан в регистре

125


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

CMP 3,AL Неправильная запись CMPAL,3 Правильная запись

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

В большой программе на языке ассемблера существуют определенные последовательности команд, которые часто повторяются с небольшими отклонениями друг от друга. Основные части этих последовательностей определяются как макрокоманды; упомянутые небольшие отличия последовательностей могут быть заданы соответствующими параметрами. Во время трансляции ассемблерной программы макрокоманды преобразуются в последовательности действительных команд языка ассемблера. Таким образом, макрокоманды являются удобным средством для генерации последовательности утверждений языка ассемблера в различных местах программы, даже если в каждый момент, когда вызывается последовательность, используются различные параметры. В макрокоманду обычно входят следующие элементы:

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

•  список параметров, который включает специальные данные, необходимые при вызове макрокоманды. Спи сок может состоять из одного и более параметров, включаемых в последовательность утверждений, ко торая расширяется макрокомандой в процессе транс ляции программы;

•  тело макрокоманды, определяющее основную после довательность утверждений языка ассемблера, кото рую генерирует макрокоманда;

•  конечное утверждение, которое ограничивает мак рокоманду

126


Следующий пример является типичным макроопределением:

SAMPLE    MACRO   P1,P2,P3

MOV        AX,PI

ADD        AX,P2

MOV        P3,AX ENDM

Входное имя в этом макроопределении — SAMPLE, Список параметров состоит из трех аргументов: Р1, Р2, РЗ. Тело макрокоманды включает три утверждения языка ассемблера. Конечным утверждением явля-: ется ENDM (End Macro — конец макрокоманды),; Программа, написанная на языке ассемблера, вызывает макрокоманду с помощью следующего утверждения: SAMPLE CASE1,TEST_LOCATION,FLAG

Макроассемблер генерирует следующую последовательность утверждений макрорасширения SAMPLE:

MOV                      AX,CASEl

ADD                       AX,TEST_LOCATION

MOV                      FLAG,AX