литература / Пухальский Проектирование микропроцессорных систем 2001
.pdf70 |
Глава I. Микропроцессоры 8080 и 8085 |
|
|
Рис. 1.26. Схема формирования 8-разрядного кода Грея |
|
|||
; Табличное преобразование 8 -разрядного двоичного кода в код Грея |
|
|||||
Ram |
equ |
2000h |
Ram = 2000h — начальный адрес RAM |
Data Segment |
||
|
defseg |
Gray_seg, start = Ram, class = Data |
|
|||
|
seg |
Gray_seg |
|
|
|
|
Conv |
db |
4, 5, 6, 7, 2Ch, OEAh, 2Dh, OFB/z; Эти двоичные числа преобразовать в код Грея |
||||
ds |
8 |
Резервирование 8 байт для преобразований |
|
|||
Gray |
ds |
100/z |
Резервирование 256 байт для таблицы кода Грея |
|
||
|
defseg |
Main_seg, start = 100h, class = Code |
Code Segment |
|||
|
seg |
Main__seg |
|
|
|
|
; Копирование преобразуемых двоичных чисел |
|
|||||
|
LXI |
H, Ram |
HL |
|
2000h — начальный адрес двоичных чисел |
|
|
LXI |
D, Conv |
DE <— 2008h — начальный адрес области копирования |
|||
|
MVI |
B, 8 |
В <— 8 — количество преобразуемых чисел |
|
||
LMO: MOV |
A, M |
А |
M(HL) |
|
||
|
STAX |
D |
M(DE) <- А |
|
||
|
INX |
H |
|
|
|
|
|
INX |
D |
|
|
|
|
|
DCR |
В |
|
|
|
|
|
JNZ |
LMO |
|
|
|
|
; Генерация таблицы 8 -разрядных двоичных чисел |
|
|||||
|
LXI |
H, Gray |
HL |
|
2010h — начальный адрес таблицы двоичных чисел |
|
|
SUB |
A |
А < - 0 |
|
|
|
|
MOV |
B, A |
В |
0 |
|
|
LM1: MOV |
M, A |
A/(HL) |
А |
|
||
|
INX |
H |
|
|
|
|
|
INR |
A |
|
|
|
|
|
DCR |
В |
|
|
|
|
|
JNZ |
LM1 |
|
|
|
|
; Генерация таблицы 8 -разрядного кода Грея |
|
|||||
|
LXI |
H, Gray |
HL <— 2010h — начальный адрес таблицы кода Грея |
|
||
|
MVI |
B ,0 |
|
|
|
|
LM2: SUB |
A |
CY |
|
0 |
|
|
|
MOV |
A, M |
А <— A/(HL) — двоичное число из таблицы |
|
||
|
MOV |
C, A |
|
|
|
|
|
RAR |
|
А7А6А5А4А3А2А 1Ay i— 0А7А^А^А4A3АтА | |
|
||
|
XRA |
С |
А7АбА5 ... А0 <— (А7 © 0)(А6 © А7ХА5 © Аб)... (Ао © А|) |
|||
|
MOV |
M, A |
M(HL) |
А — запись кода Грея в таблицу |
|
|
|
INX |
H |
|
|
|
|
|
DCR |
В |
|
|
|
|
|
JNZ |
LM2 |
|
|
|
|
|
|
|
|
|
|
1.8. Директивы ассемблера |
|
|
|
|
71 |
||||
; Преобразование восьми двоичных чисел в код Грея |
|
|
|
|
|
|
|
||||||||
|
LXI |
D, Conv |
DE <—2008/г — начальный адрес преобразуемых чисел |
|
|||||||||||
|
MV1 |
B, 8 |
В |
8 — количество преобразуемых чисел |
|
|
|
|
|||||||
LM3: LXI |
H, Gray |
HL <—2010/? — начальный адрес таблицы кода Грея |
|
|
|||||||||||
|
LDAX D |
|
А <— М(DE) — преобразуемое двоичное число |
|
|
|
|||||||||
|
ADD |
L |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV |
L, A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MVI |
A, |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
ADC |
H |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOV |
H, A |
HL <— HL + M(DE) — адрес кода Грея в таблице |
|
|
|
|||||||||
|
MOV |
A, M |
А <— M(HL) — код Грея из таблицы |
|
|
|
|
|
|||||||
|
STAX |
D |
|
М(DE) <— А — преобразованное в код Грея двоичное число |
|
||||||||||
|
INX |
D |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DCR |
В |
|
|
|
|
Результат преобразования: |
|
|
|
|
||||
|
JNZ |
LM3 |
|
4 —» 6, 5 —> 7, 6 —> 5, 7 —» 4, |
|
|
|
|
|
||||||
|
end |
|
|
|
2Сh -> ЗА/г, ЕА/г -н> 9Fh, 2Dh |
ЗВ/г, FB h -> 86/г |
|
|
|||||||
Таблица 1.14. Взаимное преобразование 8-разрядных двоичных чисел и кода Грея |
|||||||||||||||
В |
Код Грея |
в |
|
Код Грея |
в |
|
Код Грея |
в |
|
Код Грея |
|||||
00 |
00 |
0000 0000 |
40 |
60 |
0110 0000 |
80 |
СО |
1100 0000 |
со |
АО |
1010 0000 |
||||
01 |
01 |
0000 0001 |
41 |
61 |
0110 0001 |
81 |
С1 |
1100 0001 |
С1 |
Al |
1010 0001 |
||||
02 |
03 |
0000 0011 |
42 |
63 |
01100011 |
82 |
СЗ |
1100 ООП |
С2 |
АЗ |
1010 0011 |
||||
03 |
02 |
0000 0010 |
43 |
62 |
01100010 |
83 |
С2 |
1100 0010 |
сз |
А2 |
1010 0010 |
||||
04 |
06 |
0000 0110 |
44 |
66 |
01100110 |
84 |
С6 |
11000110 |
С4 |
А6 |
10100110 |
||||
05 |
07 |
0000 0111 |
45 |
67 |
0110 0111 |
85 |
С7 |
1100 0111 |
С5 |
A l |
10100111 |
||||
06 |
05 |
0000 0101 |
46 |
65 |
01100101 |
86 |
С5 |
1100 0101 |
С6 |
А5 |
1010 0101 |
||||
07 |
04 |
0000 0100 |
47 |
64 |
01100100 |
87 |
С4 |
1100 0100 |
С7 |
А4 |
1010 0100 |
||||
08 |
ОС |
0000 1100 |
48 |
6С |
0110 1100 |
88 |
с с |
1100 1100 |
С8 |
AC |
1010 1100 |
||||
09 |
0D |
0000 1101 |
49 |
6D |
01101101 |
89 |
CD |
1100 1101 |
С9 |
AD |
1010 1101 |
||||
0А |
0F |
0000 1111 |
4А |
6F |
0110 1111 |
8А |
CF |
1100 1111 |
СА |
AF |
1010 1111 |
||||
ОВ |
0Е |
0000 1110 |
4В |
6Е |
0110 1110 |
8В |
СЕ |
1100 1110 |
СВ |
AE |
1010 1110 |
||||
-ос |
0А |
0000 1010 |
4С |
6А |
0110 1010 |
8С |
СА |
1100 1010 |
с с |
AA |
1010 1010 |
||||
0D |
ОВ |
0000 1011 |
4D |
6В |
0110 1011 |
8D |
СВ |
1100 1011 |
CD |
AB |
1010 1011 |
||||
0Е |
09 |
0000 1001 |
4Е |
69 |
0110 1001 |
8Е |
С9 |
1100 1001 |
СЕ |
A9 |
1010 1001 |
||||
0F |
08 |
0000 1000 |
4F |
68 |
ОНО 1000 |
8F |
С8 |
1100 1000 |
CF |
A8 |
1010 1000 |
||||
10 |
18 |
0001 |
1000 |
50 |
78 |
0111 |
1000 |
90 |
D8 |
1101 |
1000 |
D0 |
B8 |
1011 |
1000 |
11 |
19 |
0001 |
1001 |
51 |
79 |
0111 |
1001 |
91 |
D9 |
1101 1001 |
D l |
B9 |
1011 1001 |
||
12 |
1В |
0001 1011 |
52 |
7В |
0111 1011 |
92 |
DB |
1101 1011 |
D2 |
BB |
1011 1011 |
||||
13 |
1А |
0001 1010 |
53 |
1 А |
0111 1010 |
93 |
DA |
1101 1010 |
D3 |
BA |
1011 1010 |
||||
14 |
1Е |
0001 1110 |
54 |
7Е |
0111 |
1110 |
94 |
DE |
1101 1110 |
D4 |
BE |
1011 1110 |
|||
15 |
1F |
0001 1111 |
55 |
7F |
0111 1111 |
95 |
DF |
1101 1111 |
D5 |
BF |
1011 1111 |
||||
16 |
1D |
0001 1101 |
56 |
7D |
0111 1101 |
96 |
DD |
1101 1101 |
D6 |
BD |
1011 1101 |
||||
17 |
1C |
0001 1100 |
57 |
7С |
0111 1100 |
97 |
DC |
1101 1100 |
D7 |
BC |
1011 1100 |
||||
18 |
14 |
0001 0100 |
58 |
74 |
0111 0100 |
98 |
D4 |
1101 0100 |
D8 |
B4 |
1011 0100 |
||||
19 |
15 |
0001 0101 |
59 |
75 |
0111 0101 |
99 |
D5 |
1101 0101 |
D9 |
B5 |
1011 0101 |
||||
1А |
17 |
0001 0111 |
5А |
77 |
0111 0111 |
9А |
D7 |
1101 0111 |
DA |
B7 |
1011 0111 |
||||
1В |
16 |
0001 0110 |
5В |
76 |
0111 0110 |
9В |
D6 |
1101 0110 |
DB |
B6 |
1011 0110 |
||||
1C |
12 |
0001 0010 |
5С |
72 |
0111 0010 |
9С |
D2 |
1101 0010 |
DC |
B2 |
1011 0010 |
||||
72 |
|
|
|
Глава 1. Микропроцессоры 8080 и 8085 |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
Продолжение табл. 1.14 |
||
В |
|
Код Грея |
В |
|
Код Грея |
В |
|
Код Грея |
В |
|
Код Грея |
|
1D |
13 |
0001 0011 |
5D |
73 |
0111 0011 |
9D |
D3 |
1101 0011 |
DD |
ВЗ |
1011 0011 |
|
1Е |
11 |
0001 0001 |
5Е |
71 |
0111 0001 |
9Е |
D1 |
1101 0001 |
DE |
B l |
1011 0001 |
|
1F |
10 |
0001 0000 |
5F |
70 |
0111 |
0000 |
9F |
D0 |
1101 0000 |
DF |
во |
1011 0000 |
20 |
30 |
0011 0000 |
60 |
50 |
0101 оооо |
АО |
F0 |
1111 0000 |
EO |
90 |
1001 0000 |
|
21 |
31 |
ООН 0001 |
61 |
51 |
0101 |
0001 |
А1 |
F1 |
1111 0001 |
E l |
91 |
1001 0001 |
22 |
33 |
0011 0011 |
62 |
53 |
0101 0011 |
А2 |
F3 |
1111 0011 |
E2 |
93 |
1001 0011 |
|
23 |
32 |
0011 0010 |
63 |
52 |
0101 |
0010 |
АЗ |
F2 |
1111 0010 |
E3 |
92 |
1001 0010 |
24 |
36 |
ООП 0110 |
64 |
56 |
0101 оно |
А4 |
F6 |
1111 0110 |
E4 |
96 |
1001 оно |
|
25 |
37 |
0011 0111 |
65 |
57 |
0101 0111 |
А5 |
F7 |
1111 0111 |
E5 |
97 |
1001 0111 |
|
26 |
35 |
ООП 0101 |
66 |
55 |
0101 0101 |
А6 |
F5 |
1111 0101 |
E6 |
95 |
1001 0101 |
|
27 |
34 |
0011 0100 |
67 |
54 |
0101 0100 |
А7 |
F4 |
1111 0100 |
E7 |
94 |
1001 0100 |
|
28 |
ЗС |
0011 1100 |
68 |
5С |
0101 1100 |
А8 |
FC |
1111 1100 |
E8 |
9C |
1001 1100 |
|
29 |
3D |
0011 1101 |
69 |
5D |
0101 |
1101 |
А9 |
FD |
1111 1101 |
E9 |
9D |
1001 1101 |
2А |
3F |
0011 1111 |
6А |
5F |
0101 |
1111 |
АА |
FF |
11111111 |
EA |
9F |
1001 1111 |
2В |
ЗЕ |
0011 1110 |
6В |
5Е |
0101 |
1110 |
АВ |
FE |
1111 1110 |
EB |
9E |
1001 1110 |
1C |
ЗА |
0011 1010 |
6С |
5А |
0101 |
1010 |
АС |
FA |
1111 1010 |
EC |
9A |
1001 1010 |
2D |
ЗВ |
0011 1011 |
6D |
5В |
0101 |
1011 |
AD |
FB |
1111 1011 |
ED |
9B |
1001 1011 |
2Е |
39 |
0011 1001 |
6Е |
59 |
0101 |
1001 |
АЕ |
F9 |
1111 1001 |
EE |
99 |
1001 1001 |
2F |
38 |
0011 1000 |
6F |
58 |
0101 |
1000 |
AF |
F8 |
1111 1000 |
EF |
98 |
1001 1000 |
30 |
28 |
0010 1000 |
70 |
48 |
0100 1000 |
ВО |
E8 |
1110 1000 |
FO |
88 |
1000 1000 |
|
31 |
29 |
0010 1001 |
71 |
49 |
0100 1001 |
В1 |
E9 |
1110 1001 |
FI |
89 |
1000 1001 |
|
32 |
2В |
0010 1011 |
72 |
4В |
0100 ю н |
В2 |
EB |
1110 1011 |
F2 |
8B |
1000 1011 |
|
33 |
2А |
0010 1010 |
73 |
4А |
0100 1010 |
ВЗ |
EA |
1110 1010 |
F3 |
8А |
1000 1010 |
|
34 |
2Е |
0010 1110 |
74 |
4Е |
0100 1110 |
В4 |
EE |
1110 1110 |
F4 |
8Е |
1000 1110 |
|
35 |
2F |
0010 1111 |
75 |
4F |
0100 1111 |
В5 |
EF |
1110 1111 |
F5 |
8F |
1000 1111 |
|
36 |
2D |
0010 1101 |
76 |
4D |
0100 1101 |
В6 |
ED |
1110 1101 |
F6 |
8D |
1000 1101 |
|
37 |
2С |
0010 1100 |
77 |
4С |
0100 1100 |
В7 |
EC |
1110 1100 |
F7 |
8С |
1000 1100 |
|
38 |
24 |
0010 0100 |
78 |
44 |
0100 0Ю0 |
В8 |
E4 |
1110 0100 |
F8 |
84 |
1000 0100 |
|
39 |
25 |
0010 0101 |
79 |
45 |
01000Ю 1 |
В9 |
E5 |
11100101 |
F9 |
85 |
1000 0101 |
|
ЗА |
27 |
00100111 |
7А |
47 |
01000111 |
ВА |
E7 |
11100111 |
FA |
87 |
1000 0111 |
|
ЗВ |
26 |
0010 0110 |
7В |
46 |
0100 0110 |
ВВ |
E6 |
11100110 |
FB |
86 |
1000 0110 |
|
зс |
22 |
0010 0010 |
7С |
42 |
0100 оою |
ВС |
E2 |
1110 0010 |
FC |
82 |
1000 0010 |
|
3D |
23 |
0010 0011 |
7D |
43 |
0100 0011 |
BD |
E3 |
1110 0011 |
FD |
83 |
1000 0011 |
|
ЗЕ |
21 |
0010 0001 |
7Е |
41 |
0100 0001 |
BE |
El |
1110 0001 |
FE |
81 |
1000 0001 |
|
3F |
20 |
0010 0000 |
7F |
40 |
0100 оооо |
BF |
EO |
1110 0000 |
FF |
80 |
1000 оооо |
|
Двоичным числам В и В + 1 всегда соответствуют коды Грея (зеркальные, или рефлекс ные, коды), характеризующиеся изменением только одного разряда. Коды Грея находят приме нение в электронно-механических датчиках физических величин, например, в датчиках пере мещения стрелки весов, что позволяет исключить большие ошибки при одновременном пере ключении нескольких двоичных разрядов, которые возникают в датчиках с двоичной шкалой
и з м е р е н и я .
Задача 5 (файл l#08_05.asm). Вычислить произведение двух 4-разрядных десятичных чи сел, переведенных в двоичный код, с использованием алгоритма
Operl х O perl = Operl х (В#-28 + BL) = Operl х Вн-18 + Operl х BL,
|
|
|
1.8. Директивы ассемблера |
75 |
|
|
ds |
Ssz!2 |
; Ssz/2 = 16 байт |
|
|
|
defseg |
Main_seg, start = ЮО/i, class = Code |
Code Segment |
||
|
seg |
Main_seg |
|
|
|
|
LXI |
SP, Ram + Rsz |
; SP |
1000/г — инициализация стека |
|
; Копирование сортируемых чисел |
|
|
|||
|
LXI |
H, Ram |
; HL <— 0800/г — начальный адрес сортируемых чисел |
||
|
LXI |
D, Sort |
; DE <— 080Сh — начальный адрес области копирования |
||
|
MVI |
B, 12 |
; В <— ОСЬ — количество сортируемых чисел |
|
|
LM: |
MOV |
A, M |
; А <- М{HL) |
|
|
|
STAX |
D |
; M(DE) <- А |
|
|
|
INX |
H |
|
|
|
|
INX |
D |
|
|
|
|
DCR |
В |
|
|
|
|
JNZ |
LM |
|
|
|
; Программа сортировки |
|
|
|
||
|
LXI |
H, Sort |
; HL |
Sort = 080Сh |
|
|
LXI |
B, Sort - Ram |
; ВС <— Sort - Ram = АА — размер массива |
|
|
LO: |
PUSH |
В |
|
|
|
|
PUSH |
H |
|
|
|
|
MVI |
E, 0 ; Сброс флага перестановок чисел: Е = 0 — не было перестановок чисел |
|||
; при сравнении всех соседних пар чисел х и у массива АД, Е = 1 — были перестановки чисел
LI: |
MOV |
А, М |
; А <— х |
|
INX |
Н |
|
|
СМР |
м |
; Сравнение двух соседних чисел в памяти х и у |
|
JC |
L2 |
|
|
JZ |
L2 |
|
|
MOV |
D, M |
;D < - y |
|
MOV |
М, А |
; Перестановка двух соседних чисел |
|
DCX |
Н |
|
|
MOV |
М, D |
; Установка значения флага Е = 1 |
|
MVI |
Е, 1 |
|
|
INX |
Н |
|
L2: |
DCX |
В |
|
|
MOV |
А, С |
|
|
ORA |
В |
|
|
JNZ |
L1 |
|
|
POP |
Н |
|
|
POP |
В |
|
|
ORA |
Е |
|
|
JNZ |
L0 |
|
|
end |
|
|
Вычисление объема массива чисел АЛ, подлежащих сортировке, можно сделать и в про грамме, чтобы не использовать команды PUSH и POP:
LO: LXI |
Н, Ram |
LX1 |
В, Sort |
MOV |
А, С |
SUB |
L |
;Начало вычисления объема массива чисел АА, подлежащих
;сортировке, в предположении, что объем массива может
;потребовать и двухбайтового представления
76 |
|
Глава 1. Микропроцессоры 8080 и 8085 |
MOV |
С, А |
|
MOV |
А, В |
|
SBB |
н |
; ВС <— АЛ = Sort - Ram (вычисление закончено) |
MOV |
В, А |
Д ирективы макрокоманд. Эти директивы позволяют повторяющимся блокам програм мы, различающимися только некоторыми параметрами, присвоить имя с перечнем формальных параметров (dummy or form al parameter), а затем любое число раз использовать только имя с указанием фактических параметров (actual parameter) вместо повторения текста всего блока в разных местах программы. Транслятор же вместо имен блоков подставит все команды МП, входящие в этот блок, и введет фактические параметры — транслятор по имени блока создаст его макрорасширения (Macro Expansion). Определенные директивами макрокоманд блоки про граммы называются макрокомандами (Macro Command, Macro Instruction), или макросами
{Macros). Оформление программ, содержащих макрокоманды, имеет вид:
Name_M %MACRO Pari, Раг2, РагЪ, Раг4, ... ; Директива %MACRO (Macro Definition) %LOCAL NameX, Name2, Name3, ... ; Директива %LOCAL (Definition Local Name)
ф; © — операторы ассемблера (инструкции и директивы)
[%ЕХГГМ] |
; Директива прекращения макрогенерации (Exit Macro Generation) |
|
;.© |
; © — операторы ассемблера (инструкции и директивы) |
|
%ENDM |
; Директива конца макроопределения (End Macro Definition) |
|
|
; Основная программа |
Ш 'р iiqi, |
Name_M |
^ к |
|
M g \\, M g\2, M g\3, ... ; Макрорасширение 1 |
{Macro Generation) |
|
|
; Основная программа |
|
Name_M |
Mg2X, Mg22, Mg23, ... ; Макрорасширение 2 {Macro Expansion 2) |
|
|
; Основная программа |
|
Директива %MACRO связывает с именем макрокоманды Name_M некоторое число фор мальных параметров Раг\, Раг2, РагЗ, .... Вызов макрокоманды производится строкой, содер жащей имя макрокоманды Name_M и такое же число фактических параметров (допустимое число параметров ограничено только длиной строки операторов ассемблера, равной 120 сим волам). Транслятор имеет генератор макрорасширений, который формальные параметры Par# (# = 1, 2, ...) заменяет фактическими параметрами Mg 1# для макрорасширения 1 и Mg2# для макрорасширения 2. Соответствие формальных и фактических параметров определяется по следовательностью их задания в макроопределении и макрорасширении.
Директива %LOCAL объявляет перечисленные в ней имена переменных и констант дей ствительными только внутри макроопределения, а генератор макрорасширений заменяет их уникальными именами ??хххх, где хххх = 0000 9999 — 4-разрядные десятичные числа. Это исключает появление в программе одинаковых имен, имеющих разные численные значения.
Директива %ЕХГГМ (необязательная) прекращает генерацию транслятором макрорасши рения, если требуется получить только его часть. При этом в первой части макрокоманды не должно быть ссылок на имена, определенные во второй ее части. Эта директива обычно ис пользуется совместно с условными директивами.
Директива %ENDM указывает транслятору конец макрокоманды и конец действия ло кальных имен.
Предупреждение'.
1.Символические имена меток, переменных и констант должны быть расположены с пер вой позиции строки (перед именем не должно быть пробела).
2.Перед именем, вызывающим макрорасширение, должен быть хотя бы один пробел.
Пример 10:
|
|
|
1.8. Директивы ассемблера |
77 |
Alpha |
equ |
39h |
Alpha = 39h |
|
Beta |
db |
2Ch, ‘IBM PC’ |
M(Beta) = 2Ch, M(Beta+3) - |
4Dh — ASCII-кол букЕ |
Add3 |
|
|
Основная программа |
|
%macro Par 1, Par2, РагЗ |
Macro Definition Add.3 |
|
||
|
%local |
LJ1, LJ2, Beta |
Definition Local Name LJ1, LJ2, Beta |
|
; Register Pair BC = [Par1 - Par2 - |
Beta + М(РагЗ)]я — дополнительный код результата |
|||
|
MVI |
В ,0 |
В <— 0 |
|
|
MVI |
A, Pari |
A <—Pari |
|
|
SUI |
Par2 + Beta |
A <r- Pari - P ari - Beta |
|
|
JNC |
LJ1 |
|
|
LJ1: |
DCR |
В |
В <e—В - 1, ifC Y = 1 |
|
LXI |
Н, РагЗ |
|
|
|
|
ADD |
М |
A <— Pari - Par2 - Beta + M(Par3) |
|
|
JNC |
LJ2 |
|
|
LJ2: |
INR |
В |
B < - B + 1, if СY = 1 |
|
MOV |
С, А |
С <— Pari - P ari - Beta + M(Par3) |
||
Beta |
equ |
5 |
Beta = 5 |
|
Gamma |
%endm |
|
End Macros |
|
equ |
9Еh |
Gamma = 9Eh |
|
|
; Macro Expansion 1 (Macros Add3): Pari = Alpha + Ah, Par2 = Gamma, РагЗ = Beta |
||||
|
Add.3 |
Alpha + Ah, Gamma, Beta |
|
|
;Основная программа
;Macro Expansion 2 (Macros Add3): Pari = 55h, Par2 = Alpha, РагЗ = Beta +3
Add3 |
55h, Alpha, Beta + 3 |
|
; Основная программа |
end |
; End Program |
Имя Beta используется в программе два раза: в основной программе оно определено как адрес числа 2Сh, а в макрокоманде — как байт-константа, но конфликта между ними не возни кает, так как имя Beta в макрокоманде объявлено локальным — ее действие не выходит за пре делы макрокоманды.
После трансляции листинг с исключенными столбцами адресов и машинных кодов будет иметь вид:
Alpha |
equ |
39/i |
|
|
|
Beta |
db |
2Ch, ‘IBM PC’ |
; Основная программа |
|
|
|
|
|
|
||
Add3 |
%macro Par 1, Par2, РагЗ |
; Macro Definition Add.3 |
|
||
|
%local |
LJ1,LJ2, Beta |
; Definition Local Name LJ 1, LJ2, Beta |
||
Register Pair BC = Two's Complement [Pari - Par2 + M(Par3)\ |
|||||
|
MVI |
B ,0 |
; В |
0 |
|
|
MVI |
A, Pari |
I A |
Pari |
|
|
SUI |
Par2 + Beta |
; A <— Pari ■Par2 - Beta |
|
|
|
JNC |
LJ1 |
|
|
.(< |
|
DCR |
В |
В |
В - 1, if СY = |
|
|
|
||||
; LJ1: |
LXI |
H, РагЗ |
|
|
|
|
ADD |
M |
; A <— Pari - P ari - Beta + M(Par3) |
||
|
JNC |
LJ2 |
|
|
|
|
INR |
В |
;B <—В + 1, ifC Y = 1 |
|
|
78 |
|
|
Глава 1. Микропроцессоры 8080 и 8085 |
|
; LJ2: |
MOV |
C, A |
|
; С <r- Pari - Pari - Beta + M(Par3) |
; Beta |
equ |
5 |
|
; End Macros |
|
%endm |
|
|
|
Gamma |
equ |
9Е/г |
|
; Gamma = 9Eh |
; Macro Expansion 1 (Macros Add3): Pari = Alpha + 0Ah, Pari = Gamma, Par3 - Beta |
||||
|
; Add3 |
Alpha + Ah, Gamma, Beta |
||
; Register Pair BC - Two’s Complement [Pari - Pari —Beta + M(Par3)] |
||||
|
MVI |
B ,0 |
|
; B e 0 |
|
MVI |
A, Alpha + 0Ah |
; A <— Pari |
|
|
SUI |
Gamma + ??0002 |
; A <— Pari - Pari - Beta |
|
|
JNC |
??0000 |
|
|
|
DCR |
В |
|
; В <— В - 1, г/ СY = 1 |
?70000: |
LXI |
H, Beta |
|
|
|
ADD |
M |
|
; А Pari - P ari - Beta + M(Par3) |
|
JNC |
??0001 |
|
|
|
INR |
В |
; В <— В + 1, if C Y - 1 |
|
?70001: |
MOV |
С, A |
; С Pari - P ari - Beta + M(Par3) = 43h - 9Eh - 5 + ICh = FFCC/г |
|
?70002 |
equ |
5 |
; End Macros (строка не выводится, если не задан параметр SC) |
|
; |
%endm |
|
||
|
|
|
; Основная программа |
|
; Macro Expansion 2 (Macros Add3): Pari = 55h, Pari = Alpha, РагЪ = Beta +3
;Add3 55h, Alpha, Beta + 3
;Register Pair BC = Two's Complement [Pari - P ari - Beta + M(Par3)]
MVI |
B, 0 |
; В <— 0 |
MVI |
A, 55h |
; А <г—Pari |
|
Alpha + ?70005 |
; А <— Pari - P ari - Beta |
??0003:
??0004:
??0005:
’
??0003 |
|
В |
; В <—В - 1, г/ СY = 1 |
H, Beta + 3 |
|
M |
; А <— Pari - P ari - Beta + М(РагЗ) |
??0004 |
|
В |
; В <— В + 1, if C Y = 1 |
С, A |
; С <— Pari - P ari - Beta + M(Par3) = 55h - 39h - 5 + 4Dh = 0064/г |
5 |
; End Macros (строка не выводится, если не задан параметр SC) |
|
|
|
; Основная программа |
avwac85f.exe] пате[.asm] [.xr] SM [SC]
(параметр SC можно не задавать). Параметры SM (ShowMacs) и SC (ShowComments) управляют выводом в листинг макрорасширений, причем параметр SC управляет выводом в каждом мак рорасширении только одной строки, содержащей закомментированную директиву %ENDM, идентифицирующую конец макрорасширения.
Исходный текст макрокоманды выводится в листинг в виде комментария — начинается с точки с запятой. Если параметр SM транслятору не задан, то текст макрорасширений 1 и 2
