Использование меток.
Приведем чуть более продвинутый вариант мини-ассемблера. Добавлены команды:
NOP
JMP 0x9
MOV DX AX
INC DX
DEC DX
И, самое главное, для условных переходов (JE и др.) и для короткого JMP (с однобайтным адресом) введены метки.
Метка задается в исходном тексте так:
LABEL L1
А используется так:
JMP L1
JE L1
Добавлен еще один проход текста программы на ассемблере (напомню, что в предыдущей главе уже было два прохода). При последнем проходе вычисляется, куда переходить по меткам.
Вот исходный текст (тоже в файле Pr1.txt, как и в предыдущей главе, схема работы такая же – получаем промежуточный файл pr.txt, далее с помощью программы из 1-й главы получаем файл формата com).
MOV AX 0x0 0x0
MOV DX AX
CMP AX DX
JE L1
LABEL L2
MOV AH 0x09
MOV DX OFFSET MES1
INT 0x21
MOV AX 0x0 0x0
MOV DX AX
CMP AX DX
JE L3
LABEL L1
NOP
MOV AX 0x0 0x0
MOV DX AX
CMP AX DX
JE L2
MOV AH 0x09
MOV DX OFFSET MES2
INT 0x21
LABEL L3
MOV AH 0x09
MOV DX OFFSET MES3
INT 0x21
MOV AX 0x4C 0x0
INT 0x21
VAR MES1 5 0x30 0x31 0xD 0xA 0x24
VAR MES2 7 0x30 0x31 0x31 0x31 0xD 0xA 0x24
VAR MES3 5 0x30 0x30 0xD 0xA 0x24