
2. Команды вычитания 8-разрядных чисел
Задание:
Запишите в память, начиная с адреса 0800 коды программы, реализующей:
A=A-B-M-3:
a)A:=4А
B:=1В
M:(0900)=33
Адрес ЯП |
Мнемоника команды |
Код |
Комментарий | |
0800 0801 |
MVI A, DATA8 |
3E 4А |
Загрузка регистра A A= 4А | |
0802 0803 |
MVI B, DATA8 |
06 1В |
Загрузка регистра B B=1В | |
0804 |
SUB B |
90 |
A=A-B | |
0805 0806 0807 |
*LXI H, 0900 |
21 00 09 |
Загрузка регистра H H=0900, адрес M |
А=2F F=02 |
0808 |
SUB M |
96 |
A=A-M | |
0809 080A |
*SUI 03 |
D6 03 |
A=A-3 |
A=FC F=97 |
080B |
*NOP |
00 |
|
A=F9 F=96 |
Проверка:
А=4А-1В=2F
A=4A-1B-M(33)=FC
A=4A-1B-M(33)-3=F9
F=02(16)=0000 0010(2)
S = 0 – положительный результат операции
Z = 0 – не нулевой результат операции
0 = 0 – всегда ноль
AC = 0 – нет переноса из младшего полу-байта в старший
0 = 0 – всегда ноль
P = 0 – не чётное число единиц в коде числа( 2F(16) = 0010 1111(2))
1 = 1 – всегда 1
C = 0 – нет переноса из старшего разряда и нет заёма в старший разряд
F=97(16)=1001 0111(2)
S = 1 – отрицательный результат операции (т.к. в двоичном коде это число начинается с 1)
Z = 0 – не нулевой результат операции
0 = 0 – всегда ноль
AC = 1 –переноса из младшего полу-байта в старший (при сложении 2F+CD)
0 = 0 – всегда ноль
P = 1 – чётное число единиц в коде числа( FC(16) = 1111 1100(2))
1 = 1 – всегда 1
C = 1 –переноса из старшего разряда
F=96(16)=1001 0111(2)
S = 1 – отрицательный результат операции (т.к. в двоичном коде это число начинается с 1)
Z = 0 – не нулевой результат операции
0 = 0 – всегда ноль
AC = 1 –переноса из младшего полу-байта в старший (при сложении 2F+CD)
0 = 0 – всегда ноль
P = 1 – чётное число единиц в коде числа( FC(16) = 1111 1100(2))
1 = 1 – всегда 1
C = 0 – нет переноса из старшего разряда и нет заёма в старший разряд
Команды двойного сложения
Задание:
Запишите в память, начиная с адреса 0800 коды программы, реализующей:
HL=BC+DE:
a)BC:=8137
DE:=72D9
Адрес ЯП |
Мнемоника команды |
Код |
Комментарий | |
0800 0801 0802 |
LXI BC, 8137 |
01 37 81 |
Загрузка пары регистров BC BC=8137
| |
0803 0804 0805 |
LXI DE, 72D9 |
11 D9 72 |
Загрузка пары регистров DE DE=72D9
| |
0806 |
MOV H,B |
60 |
Пересылка из В в Н | |
0807 |
MOV L,C |
69 |
Пересылка из С в L | |
0808 |
DAD D |
19 |
HL=HL+DE | |
0809 |
NOP |
00 |
|
F=D6 H=F4 L=10 |
Проверка:
HL=BC+DE=8137+72D9=F410
F=D6(16)=1101 0111(2)
S = 1 – отрицательный результат операции (т.к. в двоичном коде это число начинается с 1)
Z = 1 – не нулевой результат операции
0 = 0 – всегда ноль
AC = 1 –переноса из младшего полу-байта в старший
0 = 0 – всегда ноль
P = 1 – чётное число единиц в коде числа( F410(16) = 1111 0100 0001 0000(2))
1 = 1 – всегда 1
C = 0 – нет переноса из старшего разряда и нет заёма в старший разряд(важно только это)