Дон ГТУ
Лабораторная работа № 4
Программирование циклических и типовых программ на Ассемблере для микропроцессора КР580ИК80
Цель лабораторной работы - изучить программирование циклических и типовых программ на Ассемблере для микропроцессора КР580Ик80.
1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
1. Команды, необходимые для организации разветвлений и циклических структур в программах
1.1 Логические команды над аккумулятором и регистром (табл.1.1)
Имеем в виду, что главным назначением команд этой группы является выработка признаков. Результат логической операции записывается в аккумулятор, заменяя первый операнд.
Таблица 1.1 – Логические команды
Команды |
Признаки |
Выполняемые функции |
Команды |
Признаки |
Выполняемые функции |
Z |
N |
C |
H |
P |
Z |
N |
C |
H |
P |
ANAR |
+ |
+ |
0 |
+ |
+ |
(A)^(R)→A |
ANAM |
+ |
+ |
0 |
+ |
+ |
(A)^(M)→A |
ANI Im |
+ |
+ |
0 |
0 |
+ |
(A)^Im→A |
XRAR |
+ |
+ |
0 |
0 |
+ |
(A)(R)→A |
XRI Im |
+ |
+ |
0 |
0 |
+ |
(A)Im→A |
XRAM |
+ |
+ |
0 |
0 |
+ |
(A)(M)→A |
ORAR |
+ |
+ |
0 |
0 |
+ |
(A)(R)→A |
ORI Im |
+ |
+ |
0 |
0 |
+ |
(A)Im→A |
ORAM |
+ |
+ |
0 |
0 |
+ |
(A)(M)→A |
CMPR |
+ |
+ |
+ |
+ |
+ |
(A)~(R) |
CPI Im |
+ |
+ |
+ |
+ |
+ |
(A)~Im |
CMPM |
+ |
+ |
+ |
+ |
+ |
(A)~(M) |
Условные обозначения: R – общее обозначение одного из регистров общего назначения(РОН) – A, B, C, D, E, H, L; M – адрес ячейки памяти, хранящийся в двух смежных РОН H и L; SP – стек; YSP – указатель стека; CzK – счетчик команд; Im – непосредственный операнд; Ag – адрес ячейки памяти, с которой работает данная команда. Запись (R) означает содержимое регистра, нуль в графике «признаки» - установку в нуль при выполнении команды, а плюс – установку признака в соответствии с правилом установки флага.
Помните, что логические операции работают с каждыми из восьми битов независимо.
ANA «и» XRA «искл. или» ORA «или»
0 ^ 0→0 00→0 00→0
0 ^ 1→0 01→1 01→1
1 ^ 0→0 10→1 10→1
1 ^ 0→0 11→0 11→1 1 ^ 1→0
Команда CMP вычитает из содержимого аккумулятора второй операнд (не изменяя оба), формирует признаки по правилам команд вычитания.
1.2 Команды инкрементирования и декрементирования (табл.1.2)
Примите к сведению, что команда INR (инкрементирование) увеличивает на единицу содержимое регистра или байта памяти, а команда DCR (декрементирование) уменьшает на единицу это содержимое. Эти команды не используют и не изменяют значение бита переноса, а остальные биты признаков вырабатывают по общим правилам.
Таблица 1.2 – Инкрементирование и декрементирование
Команды |
Признаки |
Выполняемые функции |
Z |
N |
C |
H |
P |
INR R |
+ |
+ |
- |
+ |
+ |
(R)+1→R |
INR M |
+ |
+ |
- |
+ |
+ |
(M)+1→R |
DCR R |
+ |
+ |
- |
+ |
+ |
(R)-1→R |
DCR M |
+ |
+ |
- |
+ |
+ |
(M)-1→R |
1.3 Команды изменения содержимого аккумулятора (табл. 1.3)
Команды этой группы работают только с содержанием аккумулятора, поэтому адресной команды не имеют.
Таблица 1.3 – Изменение содержания аккумулятора
Команды |
Признаки |
Выполняемые функции |
Z |
N |
C |
H |
P |
RLC |
- |
- |
+ |
- |
- |
Am→Am+1, A7→Ao, A7→C |
RRC |
- |
- |
+ |
- |
- |
Am+1→Am, Ao→A7, Ao→C |
RAL |
- |
- |
+ |
- |
- |
Am→Am+1, C→Ao, A7→C |
RAR |
- |
- |
+ |
- |
- |
Am+1→Am, Ao→C1, C→A7 |
CMA |
- |
- |
+ |
- |
- |
, инвертирование |
Обратите внимание, что команда RLC устанавливает бит переноса в состояние, равное значению старшего разряда сумматора. Содержимое сумматора циклически сдвигается влево на одну позицию с переносом значения самого старшего разряда в самый младший разряд сумматора.
1.4 Команды изменения признака (флага) переноса
Примите к сведению, что для изменения флага переноса используются две команды: STS – установка в один; CMC – установка в 0.
1.5 Команды условных переходов
Команды условных переходов используют раннее выработанные значения признаков, сами их не изменяют.
Имейте в виду, что если заданное в операции условие выполняется, адрес из второго и третьего блока команды заносится в счетчик команд, т.е. выполнение программы начинается с команд расположенных по этому адресу, в противном случае выполняется следующая по порядку команда
Таблица 1.4 – Команды условных переходов
Команды |
Пояснение |
JMP Ag |
Ag→C2K(безусловный переход к команде Ag) |
JC Ag |
(C)=1, то Ag→C2K, иначе (С2К)+3→ С2К |
JNC Ag |
(C)=0, то Ag→C2K, иначе (С2К)+3→ С2К |
JZ Ag |
(Z)=1, то Ag→C2K, иначе (С2К)+3→ С2К |
JNZ Ag |
(Z)=0, то Ag→C2K, иначе (С2К)+3→ С2К |
JP Ag |
(N)=0, то Ag→C2K, иначе (С2К)+3→ С2К(переход по «+») |
JM Ag |
(N)=1, то Ag→C2K, иначе (С2К)+3→ С2К(переход по «-») |
JPE Ag |
(P)=1, то Ag→C2K, иначе (С2К)+3→ С2К(переход по четности) |
2 ЭКСПЕРИМЕНТАЛЬНЫЕ ИСЛЕДОВАНИЯ
Задание: Найти
Заносим в ячейку памяти, начиная с номера 8500, четыре числа I1=4, I2=8, I3=6, I4=3.
Используя полученные числа, составим программу, наберем программу на ЭВМ, и получим результат.
8500 04
8501 08
8502 06
8503 03
Таблица 2.1 – Программа на ассемблере.
Адрес |
Код
команды
|
Метка |
Мнемоника |
8200
8201
|
06
04
|
PRG 1: |
MVI B, 4 |
8202
8203
8204
|
21
00
85
|
LXI H, 8500 |
8205 |
7E |
M1: |
MOV A, M |
8206 |
05 |
M2: |
DCR B |
8207
8208
8209
|
CA
12
82
|
JZ M3 |
820А |
23 |
INR H |
820В |
BE |
CMP H |
820C
820D
820E
|
DA
05
82
|
JC M1 |
820F
8210
8211
|
C3
06
82
|
JMP M2 |
8212 |
7E |
M3: |
MOV A, M |
8213 |
5F |
MOV E, A |
8214
8215
|
16 |
MVI D, 03 |
03 |
8216 |
A7 |
ANA A |
8217
8218
8219
|
21
00
08
|
LXI H, 0008 |
821A
821B
|
DE
00
|
MVI C, 0 |
821C |
7B |
MOV A, E |
821D |
17 |
RAL |
821E |
5A |
MOV E, D |
821F |
79 |
MOV A, C |
8220 |
17 |
RAL |
8221 |
92 |
SUB D |
8222
8223
8224
|
D2
26
82
|
JNC M5 |
8225 |
82 |
ADD D |
8226 |
4F |
M5: |
MOV C, A |
8227 |
3F |
CMC |
8228 |
7E |
MOV A, M |
8229 |
17 |
RAL |
822A |
67 |
MOV H, A |
822B |
2D |
DCR L |
822C
822D
822E
|
C2
13
82
|
JNZ M4 |
822F |
RST |
|