
- •Основы микропроцессорной техники
- •Введение
- •1. Система команд микропроцессора 8080 Представление команд в числовой форме
- •Мнемоническое представление команд Ассемблер
- •Директивы Ассемблера процессора 8080
- •Методы адресации операндов команд
- •Биты признаков
- •Общее представление команд
- •Команды пересылок
- •Однобайтные пересылки
- •Двухбайтные пересылки
- •Команды передачи управления
- •Команды безусловных переходов
- •Команды условных переходов
- •Команды организации подпрограмм
- •Команды безусловных вызовов и возврата
- •Команды условных вызовов и возврата
- •Команды арифметических, логических и сдвиговых операций
- •Команды сложения
- •Команды вычитания
- •Команды логических операций
- •Команды сравнения
- •Команды сдвига
- •Специальные арифметическо-логические команды
- •Команды управления стеком
- •Команды ввода, вывода и управления состоянием процессора Команды ввода и вывода
- •Команды управления прерываниями
- •Команда перевода процессора в состояние останова
- •Учебная микро-эвм умк-80
- •Управление микро-эвм средствами Монитора
- •Чтение и модификация содержимого памяти хххх
- •Чтение и модификация содержимого регистров
- •Запуск программы пользователя
- •Отражение типа машинного цикла через слово состояния
- •Пошаговые режимы
- •Порядок выполнения работы Заполнение памяти средствами Монитора
- •Определение исходного положения области стека
- •Ввод программы средствами Монитора
- •Лабораторная работа № 1.2 Учебная микро-эвм умпк-80
- •Краткие сведения из теории Назначение умпк-80
- •Структура умпк-80 и распределения адресного пространства
- •Управление микро-эвм средствами Монитора
- •Тестирование микро-эвм и начальная установка
- •Порядок выполнения работы Исследование порядка включения умпк-80
- •Исследование содержимого памяти
- •Запись числа в память умпк-80
- •Запись числа в программно-доступные регистры
- •Запуск программы
- •Контроль выполнения команд программы
- •Содержание отчёта
- •Контрольные вопросы
- •Лабораторная работа № 2 Отдельные команды, простые программы
- •Краткие сведения из теории Типы команд
- •Форматы команд
- •Способы адресации операндов
- •Признаки результатов операций
- •Представление программы
- •Порядок выполнения работы Исследование отдельных команд арифметических и логических операций
- •Исследование команд пересылок и способов адресации операндов
- •Исследование команд арифметического сложения
- •Исследование операций сравнения однобайтных чисел
- •Содержание отчёта
- •Контрольные вопросы
- •Библиографический список
Общее представление команд
Для кодирования команд в системе команд микропроцессора 8080 использованы практически все возможные варианты 8-разрядного кода команд, то есть команд чуть меньше 256.
По функциональному назначению их можно разделить на 6 основных групп.
Команды пересылок – обеспечивают операции перемещения однобайтных или двухбайтных операндов между регистрами процессора, памятью данных или памятью программ;
Команды передач управления – обеспечивают безусловные и условные ветвления в программе.
Команды организации подпрограмм – обеспечивают условные и безусловные вызовы подпрограмм и возвраты из подпрограмм.
Команды арифметических, логических и сдвиговых операций среди которых арифметические сложение и вычитание, а также логические “И”, “ИЛИ”, “НЕ”, “Исключающее ИЛИ”, сдвига вправо и влево, сравнения.
Команды управления стеком – обеспечивают установку указателя стека, а также операции чтения и записи стека.
Команды ввода, вывода и управления состоянием процессора – обеспечивают операции обмена байтами процессора с регистрами интерфейсов внешних устройств, а также управление триггером разрешения прерываний процессора, перевод процессора в состояние останова и отсутствие операций.
Полный список команд с выделением групп представлен в табл. 1.6, а перечень использованных для описания команд сокращений представлен в табл. 1.7. Буквы в заголовке табл. 1.6 обозначают: Ф – формат команды, выраженный количеством байтов команды; Т – количество машинных тактов в команде; Ц – количество машинных циклов в команде.
Таблица 1.6
Список команд микропроцессора 8080
Мнемокод |
Действия |
F |
Название |
Код |
Ф |
Т |
Ц |
Команды пересылок |
|||||||
MOV r1,r2 |
(r1)(r2) |
– |
MOVe Register to Regist |
01DDDSSS |
1 |
5 |
1 |
MOV M,r |
M(HL)(r) |
– |
MOVe Register to Memory |
01110SSS |
1 |
5 |
2 |
MOV r,M |
(r)M(HL) |
– |
MOVe Memory to Register |
01DDD110 |
1 |
7 |
2 |
MVI r,d8 |
(r)d8 |
– |
MOVe Immediate Register |
00DDD110 |
2 |
7 |
2 |
MVI M,d8 |
M(HL)d8 |
– |
MOVe Immediate Memory |
00110110 |
2 |
10 |
3 |
STA adr |
M(adr)(A) |
– |
STore A direct |
00110010 |
3 |
13 |
4 |
LDA adr |
(A)M(adr) |
– |
LoaD A direct |
00111010 |
3 |
13 |
4 |
STAX B |
M(BC)(A) |
– |
STore A indirect |
00000010 |
1 |
7 |
2 |
STAX D |
M(DE)(A) |
– |
STore A indirect |
00010010 |
1 |
7 |
2 |
LDAX B |
(A)M(BC) |
– |
LoaD A indirect |
00001010 |
1 |
7 |
2 |
LDAX D |
(A)M(DE) |
– |
LoaD A indirect |
00011010 |
1 |
7 |
2 |
LXI B,d16 |
(BC)d16 |
– |
Load Immediate Register pair B&C |
00000001
|
3 |
10 |
3 |
LXI D,d16 |
(DE)d16 |
– |
Load Immediate register pair D&E |
00010001
|
3 |
10 |
3 |
LXI H,d16 |
(HL)d16 |
– |
Load Immediate register pair H&L |
00100001 |
3 |
10 |
3 |
LXI SP,d16 |
(SP)d16 |
– |
Load Immediate stack pointer |
00110001 |
3 |
10 |
3 |
SHLD adr |
M(adr)(L) M(adr+1)(H) |
– |
Store H&L Direct |
00100010 |
3 |
16 |
5 |
LHLD adr |
(L)M(adr) (H)M(adr+1) |
– |
Load H&L Direct |
00101010
|
3 |
16 |
5 |
XCHG |
(HL)(DE) |
– |
eXCHanGe H&L, D&E |
11101011 |
1 |
4 |
1 |
Команды передачи управления |
|||||||
PCHL |
(PC)(HL) |
– |
H&L to Programm Counter |
11101001 |
1 |
5 |
1 |
JMP adr |
(PC)adr |
– |
JuMP unconditional |
11000011 |
3 |
10 |
3 |
JNZ adr |
JMP if Z=0 |
– |
Jump on No Zero |
11000010 |
3 |
10 |
3 |
JZ adr |
JMP if Z=1 |
– |
Jump on Zero |
11001010 |
3 |
10 |
3 |
JNC adr |
JMP if CY=0 |
– |
Jump on No Carry |
11010010 |
3 |
10 |
3 |
JC adr |
JMP if CY=1 |
– |
Jump on Carry |
11011010 |
3 |
10 |
3 |
JPO adr |
JMP if P=0 |
– |
Jump on Parity Odd |
11100010 |
3 |
10 |
3 |
JPE adr |
JMP if P=1 |
– |
Jump on Parity Even |
11101010 |
3 |
10 |
3 |
JP adr |
JMP if S=0 |
– |
Jump on Positive |
11110010 |
3 |
10 |
3 |
JM adr |
JMP if S=1 |
– |
Jump on Minus |
11111010 |
3 |
10 |
3 |
Команды организации подпрограмм |
|||||||
CALL adr |
stack(PC) (PC)adr |
– |
CALL unconditional |
11001101 |
3 |
17 |
5 |
CNZ adr |
CALL if Z=0 |
– |
Call on No Zero |
11000100 |
3 |
17 |
5 |
CZ adr |
CALL if Z=1 |
– |
Call on Zero |
11001100 |
3 |
17 |
5 |
CNC adr |
CALL if CY=0 |
– |
Call on No Carry |
11010100 |
3 |
17 |
5 |
CC adr |
CALL if CY=1 |
– |
Call on Carry |
11011100 |
3 |
17 |
5 |
CPO adr |
CALL if P=0 |
– |
Call on Parity Odd |
11100100 |
3 |
17 |
5 |
CPE adr |
CALL if P=1 |
– |
Call on Parity Even |
11101100 |
3 |
17 |
5 |
CP adr |
CALL if S=0 |
– |
Call on Positive |
11110100 |
3 |
17 |
5 |
CM adr |
CALL if S=1 |
– |
Call on Minus |
11111100 |
3 |
17 |
5 |
RST N |
stack(PC) (PC)N*8 |
– |
ReSTart |
11nnn111 |
1 |
11 |
3 |
RET |
(PC)stack |
– |
RETurn |
11001001 |
1 |
10 |
3 |
RNZ |
RET if Z=0 |
– |
Return on No Zero |
11000000 |
1 |
11 |
3 |
RZ |
RET if Z=1 |
– |
Return on Zero |
11001000 |
1 |
11 |
3 |
RNC |
RET if CY=0 |
– |
Return on No Carry |
11010000 |
1 |
11 |
3 |
RC |
RET if CY=1 |
– |
Return on Carry |
11011000 |
1 |
11 |
3 |
RPO |
RET if P=0 |
– |
Return on Parity Odd |
11100000 |
1 |
11 |
3 |
RPE |
RET if P=1 |
– |
Return on Parity Even |
11101000 |
1 |
11 |
3 |
RP |
RET if S=0 |
– |
Return on Positive |
11110000 |
1 |
11 |
3 |
RM |
RET if S=1 |
– |
Return on Minus |
11111000 |
1 |
11 |
3 |
Команды арифметических, логических и сдвиговых операций |
|||||||
ADD r |
(A)(A)+(r) |
+ |
ADD Register to A |
10000SSS |
1 |
4 |
1 |
ADD M |
(A)(A)+M(HL) |
+ |
ADD Memory to A |
10000110 |
1 |
7 |
2 |
ADI d8 |
(A)(A)+d8 |
+ |
ADd Immediate to A |
11000110 |
2 |
7 |
2 |
ADC r |
(A)(A)+(r)+ (CY) |
+ |
ADd Register to A with Carry |
10001SSS |
1 |
4 |
1 |
ADC M |
A)(A)+M(HL)+(CY) |
+ |
ADd Memory to A with Carry |
10001110 |
1 |
7 |
2 |
ACI d8 |
(A)(A)+d8+ (CY) |
+ |
Add Immediate to A with Carry |
11001110
|
2 |
7 |
2 |
INR r |
(r)(r)+1 |
–CY |
INcRement Register |
00DDD100 |
1 |
5 |
1 |
INR M |
M(HL) M(HL)+1 |
–CY |
INcRement Memory |
00110100 |
1 |
10 |
3 |
INX B |
(BC)(BC)+1 |
– |
INcrement register pair B&C |
00000011 |
1 |
5 |
1 |
INX D |
(DE)(DE)+1 |
– |
INcrement register pair D&E |
00010011 |
1 |
5 |
1 |
INX H |
(HL)(HL)+1 |
– |
INcrement register pair H&L |
00100011 |
1 |
5 |
1 |
DAD B |
(HL)(HL)+ (BC) |
CY |
Double register ADd. Add B&C to H&L |
00001001 |
1 |
10 |
3 |
DAD D |
(HL)(HL)+ (DE) |
CY |
Double register ADd. Add D&E to H&L |
00011001 |
1 |
10 |
3 |
DAD H |
(HL)(HL)+ (HL) |
CY |
Double register ADd. Add H&L to H&L |
00101001 |
1 |
10 |
3 |
DAD SP |
(HL)(HL)+ (SP) |
CY |
Double register ADd. Add SP to H&L |
00111001 |
1 |
10 |
3 |
SUB r |
(A)(A)–(r) |
+ |
SUBtract Register from A |
10010SSS |
1 |
4 |
1 |
SUB M |
(A)(A)–M(HL) |
+ |
SUBtract Memory from A |
10010110 |
1 |
7 |
2 |
SUI d8 |
(A)(A)–d8 |
+ |
SUbtract Immediate from A |
11010110
|
2 |
7 |
2 |
SBB r |
(A)(A)–(r)–(CY) |
+ |
SUbtract Register from A with borrow |
10011SSS |
1 |
4 |
1 |
SBB M |
(A)(A)–M(HL)– (CY) |
+ |
Subtract Memory from A with borrow |
10011110 |
1 |
7 |
2 |
SBI d8 |
(A)(A)–d8–(CY) |
+ |
Subtract Immediate from A with Borrow |
11011110
|
2 |
7 |
2 |
DCR r |
(r)(r)–1 |
–CY |
DeCrement Register |
00DDD101 |
1 |
5 |
1 |
DCR M |
M(HL) M(HL)–1 |
–CY |
DeCrement Memory |
00110101 |
1 |
10 |
3 |
DCX B |
(BC)(BC)–1 |
– |
DeCrement register pair B&C |
00001101 |
1 |
5 |
1 |
DCX D |
(DE)(DE)–1 |
– |
DeCrement register pair D&E |
00011101 |
1 |
5 |
1 |
DCX H |
(HL)(HL)–1 |
– |
DeCrement register pair H&L |
00101101 |
1 |
5 |
1 |
ANA r |
(A)(A)(r) |
+ |
ANd Register with A |
10100SSS |
1 |
4 |
1 |
ANA M |
(A) (A)M(HL) |
+ |
ANd Memory with A |
10100110 |
1 |
7 |
2 |
ANI d8 |
(A)(A)d8 |
+ |
ANd Immediate with A |
11100110 |
2 |
7 |
2 |
ORA r |
(A)(A)(r) |
+ |
OR Register with A |
10110SSS |
1 |
4 |
1 |
ORA M |
(A) (A)M(HL) |
+ |
OR Memory with A |
10110110 |
1 |
7 |
2 |
ORI d8 |
(A)(A)d8 |
+ |
OR Immediate with A |
11110110 |
2 |
7 |
2 |
XRA r |
(A)(A)(r) |
+ |
eXclusive or Register with A |
10101SSS |
1 |
4 |
1 |
XRA M |
(A)(A)M(HL) |
+ |
eXclusive or Memory with A |
10101110 |
1 |
7 |
2 |
XRI d8 |
(A)(A)d8 |
+ |
eXclusive or Immediate with A |
11101110
|
2 |
7 |
2 |
CMP r |
(F)(A–(r) |
+ |
CoMPare Register with A |
00DDD101 |
1 |
5 |
1 |
CMP M |
(F)(A)–M |
+ |
CoMPare Memory with A |
10111110 |
1 |
7 |
2 |
CPI d8 |
(F)(A)–d8 |
+ |
ComPare Immediate with A |
11111110
|
2 |
7 |
2 |
RAR |
|
CY |
Rotate A Right through carry |
00011111 |
1 |
4 |
1 |
RAL |
|
CY |
Rotate A Left through carry |
00010111 |
1 |
4 |
1 |
RRC |
|
CY |
Rotate A Right into the Carry |
00001111 |
1 |
4 |
1 |
RLC |
|
CY |
Rotate A Left into the Carry |
00000111 |
1 |
4 |
1 |
DAA |
Десятичная коррекция |
+ |
Decimal Adjust A |
00100111 |
1 |
4 |
1 |
CMA |
(A)( |
– |
CoMplement A |
00101111 |
1 |
4 |
1 |
STC |
(CY)1 |
CY |
SeT Carry |
00110111 |
1 |
4 |
1 |
CMC |
(CY)( |
CY |
CoMplement Carry |
00111111 |
1 |
4 |
1 |
Команды управления стеком |
|||||||
SPHL |
(SP)(HL) |
– |
H&L to Stack Pointer |
11111001 |
1 |
5 |
1 |
PUSH B |
stack(BC) |
– |
PUSH register pair B&C on stack |
11000101 |
1 |
11 |
3 |
PUSH D |
stack(DE) |
– |
PUSH register pair D&E on stack |
11010101 |
1 |
11 |
3 |
PUSH H |
stack(HL) |
– |
PUSH register pair H&L on stack |
11100101 |
1 |
11 |
3 |
PUSH PSW |
stack(A)(F) |
– |
PUSH A&F on stack |
11110101 |
1 |
11 |
3 |
POP B |
(BC)stack |
– |
POP register pair B&C off stack |
11000001 |
1 |
10 |
3 |
POP D |
(DE)stack |
– |
POP register pair D&E off stack |
11010001 |
1 |
10 |
3 |
POP H |
(HL)stack |
– |
POP register pair H&L off stack |
11100001 |
1 |
10 |
3 |
POP PSW |
(A)(F)stack |
– |
POP A&F off stack |
11110001 |
1 |
10 |
3 |
XTHL |
(HL)stack |
– |
eXchange H&L, Top of stack |
11100011 |
1 |
18 |
5 |
Команды ввода, вывода и управления состоянием процессора |
|||||||
IN port |
ABport (A)DB |
– |
INput |
11011011 |
2 |
10 |
3 |
OUT port |
ABport DB(A) |
– |
OUTput |
11010011 |
2 |
10 |
3 |
DI |
Запрет прерываний |
– |
Disable Interrupts |
11110011 |
1 |
4 |
1 |
EI |
Разрешение прерываний |
– |
Enable Interrupts |
11111011 |
1 |
4 |
1 |
HLT |
Останов |
– |
HaLT |
01110110 |
1 |
7 |
1 |
NOP |
Нет операции |
– |
No-OPeration |
00000000 |
1 |
4 |
1 |
Таблица 1.7
Обозначения принятые при описании команд
Обозн. |
Пояснения |
r,r1,r2 |
один из 8 разрядных регистров общего назначения: A,B,C,D,E,H,L |
SSS |
адрес регистра источника информации (Табл.1) |
DDD |
адрес регистра приёмника информации (Табл.1); |
( ) |
содержимое. Например,(A) – содержимое регистра A. |
M( ) |
содержимое ячейки памяти, адрес которой задан косвенно. Например, M(HL) – содержимое ячейки памяти, адрес которой хранится в регистровой паре HL. |
d8,d16 |
соответсвенно 8- и 16-разрядный операнды, адресуемые непосредственно |
adr |
16-разрядный адрес памяти |
port |
8-разрядный адрес устройства ввода-вывода |
PC |
регистр-счётчик команд (Programm Counter) |
SP |
регистр-указатель стека (Stack Pointer) |
nnn |
двоичный код номера N |
AB |
шина адреса (Adress Bus) |
DB |
шина данных (Data Bus) |
F |
влияние команды на признаки |
+ |
команда влияет на все признаки |
– |
команда не влияет ни на какой признак |
+CY |
команда влияет только на признак CY |
–CY |
команда влияет на все признаки кроме признака CY |
Ф |
формат команды (количество байт) |
Т |
количество машинных тактов в команде |
Ц |
количество машинных циклов в команде |