- •Задание для выполнения лабораторной работы №4
- •Программа обмена данными между регистрами блока рон и ячейкой памяти
- •Программа перемещения массива данных из памяти в регистры блока рон
- •Программа создания массива данных из содержимого регистров блока рон в памяти
- •Составить программу обмена данными между двумя ячейками памяти 0830 (7816) и 0831 (е316). Предварительно записать числа в память.
- •Программа обмена данными между двумя ячейками памяти
- •Программа обмена данными между ячейкой памяти и регистром
- •Программа организации стековой памяти
- •Число 7f16 из регистра в переписать в ячейку памяти 0800
- •Определение модуля числа
- •Состав отчета по лабораторной работе
Число 7f16 из регистра в переписать в ячейку памяти 0800
Рисунок
41 – Блок-схема алгоритма программы для
задания 3.1
Адрес |
Машинный код |
Мнемоника команды |
Операнд |
Комментарий |
0800 |
3E 7F |
MVI A |
7F |
(A) ←7F |
0802 |
47 |
MOV B, A |
|
(B) ←(A) |
0803 |
21 00 08 |
LXI H |
0800 |
(HL) ←0800 |
0806 |
70 |
MOV M, B |
|
M(0800) ←(B) |
0807 |
4F |
MOV C, A |
|
(C) ←(A) |
0808 |
23 |
INX H |
|
HL+1 |
0809 |
71 |
MOV M, C |
|
M(0801) ←(C) |
080A |
3A 00 08 |
LDA |
0800 |
(A) ←M(0800) |
080B |
67 |
MOV H, A |
|
(H) ←(A) |
080E |
3A 01 08 |
LDA |
0801 |
(A) ←M(0801) |
0811 |
6F |
MOV L, A |
|
(L) ←(A) |
0812 |
F9 |
SPHL |
|
(SP) ← (HL) |
0813 |
FF |
RST |
|
Прервать выполнение программы |
Исследование команд управления
Для исследования команд JMP ADDR, CALL ADDR, RZ ADDR, NOP и HLT записать и пошагово выполнить подпрограмму, которая представляет собой подпрограмму умножения двух 8-разрядных двоичных чисел без знака.
Таблица 49
Программа умножения двух однобайтных чисел без знака
-
Адрес
Машинный
код
Метка
Мнемоника
команды
Операнд
Комментарий
0850
31 C0 0B
START
LXI SP,
0BC0
(SP) ← 0BC0
0853
00
NOP
0854
CD 60 08
CALL
0860
M(SP – 1) ← (PC)
M(SP – 2) ← (PC)
(SP) ← (SP) – 2 (PC) ← 0860
0857
00
NOP
0858
76
HLT
Останов
0860
21 00 00
MULT
LXI H,
0000
(HL) ← 0000
0863
4A
MOV C,D
(C) ← (D)
0864
06 00
MVI B,
00
(B) ← 00
0866
7B
CYCLE
MOV A,E
(A) ← (E)
0867
A7
ANA A
(𝑨) ← (𝑨) 𝖠 (𝑨)
0868
C8
RZ
если Z = 1 (PC) ← M(SP)
(PC) ← M(SP + 1)
(SP) ← (SP) + 2
0869
09
DAD B
(HL) ← (HL) + (BC)
086A
1D
DCR E
(E) ← (E) – 1
086B
C3 66 08
JMP
0866
(PC) ← 0866
В данной программе подпрограмма умножения MULT представляется в виде подпрограммы, вызываемой командой CALL ADDR, при обращении к которой множимое должно находиться в регистре D, а множитель – в регистре Е микропроцессора КР580ВМ80А. Результат умножения, который может быть уже 16-разрядным числом, получается в регистровой паре HL. Поэтому для выполнения данной программы предварительно в регистры D и Е нужно занести множимое и множитель в виде двоичных (шестнадцатеричных) чисел.
Исследовать команды управления PCHL и JZ ADDR. Для этого предыдущую программу умножения изменить с использованием данных команд, выполнить ее и проверить корректность полученных результатов.
Таблица 50
Программа умножения двух однобайтных чисел без знака
-
Адрес
Машинный
код
Метка
Мнемоника
команды
Операнд
Комментарий
0850
21 5A 08
START
LXI H,
085A
(HL) ← 085A
0853
00
NOP
0854
00
NOP
0855
E9
PCHL
(PC) ← (HL)
0856
00
NOP
0857
00
NOP
0858
00
NOP
0859
76
HLT
Останов
085A
21 00 00
MULT
LXI H,
0000
(HL) ← 0000
085D
4A
MOV C,D
(C) ← (D)
085E
06 00
MVI B,
00
(B) ← 00
0860
7B
CYCLE
MOV A,E
(A) ← (E)
0861
A7
ANA A
(𝑨) ← (𝑨) 𝖠 (𝑨)
0862
CA 56 08
JZ
0856
если Z = 1 (PC) ← 0856
0865
09
DAD B
(HL) ← (HL) + (BC)
0866
1D
DCR E
(E) ← (E) – 1
0867
C3 60 08
JMP
0860
(PC) ← 0860
Исследование команд работы со стеком
Исследовать команды работы со стеком PUSH H, POP H, XTHL, SPHL. Для этого предыдущую программу умножения изменить с использованием данных команд, выполнить ее и проверить корректность полученных результатов.
Таблица 51
Программа умножения двух однобайтных чисел без знака
-
Адрес
Машинный
код
Метка
Мнемоника
команды
Операнд
Комментарий
0850
21 57 08
START
LXI H,
0857
(HL) ← 0857
0853
E9
PCHL
(PC) ← (HL)
0854
00
NOP
0855
00
NOP
0856
76
HLT
Останов
0857
21 90 08
MULT
LXI H,
0890
(HL) ← 0890
085A
F9
SPHL
(SP) ← (HL)
085B
00
NOP
085C
4A
MOV C,D
(C) ← (D)
085D
06 00
MVI B,
00
(B) ← 00
085F
21 00 00
LXI H,
0000
(HL) ← 0000
0862
E3
XTHL
(L) ↔ M(SP)
(H) ↔ M(SP + 1)
0863
21 00 00
LXI H,
0000
(HL) ← 0000
0866
E1
CYCLE
POP H
(L) ← M(SP)
(H) ← M(SP + 1) (SP) ← (SP) + 2
0867
7B
MOV A,E
(A) ← (E)
0868
A7
ANA A
(𝑨) ← (𝑨) 𝖠 (𝑨)
0869
CA 54 08
JZ
0854
если Z = 1
(PC) ← 0854
086C
09
DAD B
(HL) ← (HL) + (BC)
086D
1D
DCR E
(E) ← (E) – 1
086E
E5
PUSH H
M(SP – 1) ← (H)
M(SP – 2) ← (L)
(SP) ← (SP) – 2
086F
C3 60 08
JMP
0860
(PC) ← 0860
Разработать программу деления двух однобайтных чисел с раздельной записью целого и остатка деления, взяв за основу одну из рассмотренных программ умножения.
Разработать программу, включающую в себя три отдельные подпрограммы – изменение знака числа, определение модуля числа, поиск максимального числа в массиве. В основной программе предусмотреть загрузку всех регистров блока РОН, A и регистра флагов F данными, их сохранение в стеке и последующее извлечение данных из стека в соответствующие регистры после выполнения указанных подпрограмм. После выполнения разработанной программы проверить корректность полученных результатов, а также сравнить содержимое всех регистров блока РОН, A и регистра флагов F до и после выполнения программы.
Изменение знака числа
Программная реализация этой операции следует из представления чисел для МП КР580ВМ80А в дополнительном коде и осуществляется при помощи двух команд: СМА – инверсия содержимого аккумулятора и INR A – инкремент содержимого аккумулятора. Она может быть использована при замене операции вычитания операцией сложения в дополнительном коде.
Для изменения знака двухбайтового числа приходится выполнять инверсию каждого байта, последовательно пересылая его в аккумулятор и используя затем команду INX. Например, для изменения знака числа, находящегося в регистровой паре ВС, необходима следующая последовательность команд:
МОV A,B СMА MOV В,А MOV А,С СМА MOV C,A INX В.
