Дон ГТУ
Лабораторная работа № 4
Программирование циклических и типовых программ на Ассемблере для микропроцессора КР580ИК80
Цель лабораторной работы - изучить программирование циклических и типовых программ на Ассемблере для микропроцессора КР580Ик80.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Команды, необходимые для организации разветвлений и циклических структур в программах
1.1 Логические команды над аккумулятором и регистром (табл.1.1)
Имеем в виду, что главным назначением команд этой группы является выработка признаков. Результат логической операции записывается в аккумулятор, заменяя первый операнд.
Таблица 1.1 – Логические команды
Команды | Признаки | Выполняемые функции | Команды | Признаки | Выполняемые функции | ||||||||
Z | N | C | H | P | Z | N | C | H | P | ||||
ANAR | + | + | + | + | (A)^(R)→A | ||||||||
ANAM | + | + | + | + | (A)^(M)→A | ANI Im | + | + | + | (A)^Im→A | |||
XRAR | + | + | + | (A) (R)→A | XRI Im | + | + | + | (A) Im→A | ||||
XRAM | + | + | + | (A) (M)→A | |||||||||
ORAR | + | + | + | (A) (R)→A | ORI Im | + | + | + | (A) Im→A | ||||
ORAM | + | + | + | (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 0 0→0 0 0→0
0 ^ 1→0 0 1→1 0 1→1
1 ^ 0→0 1 0→1 1 0→1
1 ^ 0→0 1 1→0 1 1→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 устанавливает бит переноса в состояние, равное значению старшего разряда сумматора. Содержимое сумматора циклически сдвигается влево на одну позицию с переносом значения самого старшего разряда в самый младший разряд сумматора.
Команды изменения признака (флага) переноса
Примите к сведению, что для изменения флага переноса используются две команды: STS – установка в один; CMC – установка в 0.
Команды условных переходов
Команды условных переходов используют раннее выработанные значения признаков, сами их не изменяют.
Имейте в виду, что если заданное в операции условие выполняется, адрес из второго и третьего блока команды заносится в счетчик команд, т.е. выполнение программы начинается с команд расположенных по этому адресу, в противном случае выполняется следующая по порядку команда
Таблица 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К(переход по четности) |