описание системы команд микропроцессора кр580

advertisement
ОПИСАНИЕ СИСТЕМЫ КОМАНД
МИКРОПРОЦЕССОРА КР580
При описании системы команд используются следующие сокращения:
o () – означают содержимое регистра или ячейки памяти;
o [] – содержимое регистровой пары или двух смежных ячеек памяти,
используемых для указания адреса размещения операнда;
o R, RI – регистры A, B, C, D, E, H, L, M (виртуальный регистр);
o YZ – регистровые пары BC, DE, HL или указатель стека SP;
o YZ* – регистровые пары BC, DE, HL;
o M – ячейка памяти, адрес которой хранится в регистровой паре HL;
o F (Flags register) – регистр флагов;
o PC (program counter) – регистр счетчика команд;
o SP (stack pointer) – регистр указателя стека;
o PSW (program state word) – слово состояния программы (содержимое
регистров A и F).
o N – номер порта ввода-вывода;
o D16 – двухбайтовый операнд данных;
o D8 – однобайтовый операнд данных;
o A16 – двухбайтовый операнд адреса.
Для фиксирования определенных ситуаций, возникающих в процессе
выполнения машинных команд, применяется содержимое регистра флагов F.
Формат регистра флагов для процессора КР580ВМ80А приведен в таблице П1.
Таблица П1
Номер
бита
Обозначение
7
Формат регистра флагов F
6
5
4
3
2
1
0
S
Z
P
1
C
0
AC
0
S (Sign) – признак знака, устанавливается в 1, если результат выполнения
команды отрицателен. Единица в старшем разряде соответствует
отрицательному числу в дополнительном коде.
Z (Zero) – признак нуля, устанавливается в 1, если результат выполнения
операции нулевой.
AC (Auxiliary Carry) – признак вспомогательного переноса, устанавливается в 1,
если происходит перенос из младшей тетрады в старшую.
P (Parity) – признак четности, устанавливается в 1, если число единиц в
двоичном коде четное.
C (Carry) – признак переноса, устанавливается в 1, если в результате
выполнения операции с двумя 8-разрядными двоичными числами результат не
помещается в разрядной сетке.
Влияние выполнения машинных команд на состояние регистра флагов
отображено в таблице П2.
Таблица П2
Влияние выполнения машинных команд на состояние
регистра флагов КР580
Команда
Регистр флагов
Команда
Регистр флагов
S Z AC P C
S Z AC P C
ACI D8
ADC D8
ADD R
ADI R
ANA R
+
+
+
+
+
+
+
+
+
+
+
+
+
+
U
+
+
+
+
+
+
+
+
+
+
MVI R, D8
NOP
ORA R
ORI D8
OUT N
+
+
-
+
+
-
0
0
-
+
+
-
0
0
-
ANI D8
+
*
C_CON A16 -
+
-
U
-
+ +
- -
PCHL
POP PSW
+
+
+
+
+
CALL A16
CMA
-
-
-
-
-
PUSH PSW
PUSH YZ*
-
-
-
-
-
CMC
CMP R
CPI D8
DAA
DAD YZ
DCR R
DCX YZ
DI
EI
HLT
IN N
INR R
INX YZ
J_CON A16
JMP A16
LDA A16
LDAX R
LHLD A16
LXI YZ, D16
MOV R, RI
+
+
+
+
+
-
+
+
+
+
+
-
+
+
+
+
+
-
+
+
+
+
+
-
+
+
+
+
+
+
-
R_CON
RAL
RAR
RET
RLC
RRC
RST NUM
SBB R
SBI D8
SHLD A16
SPHL
STA A16
STAX R
STC
SUB R
SUI D8
XCHG
XRA R
XRI D8
XTHL
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
0
0
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
1
+
+
0
0
-
В таблице П2 знак «+» означает, что выполнение данной команды
оказывает влияние на состояние соответствующего флага, знак «-» – состояние
флага остается неизменным, «1» – данный флаг устанавливается в единицу, «0»
– данный флаг сбрасывается в «0», «U» – состояние данного флага не
определено. Мнемоники машинных команд (их условное обозначение) и
описание выполняемых ими действий приведены в таблице П3.
Таблица П3
Функциональное описание системы команд микропроцессора
№ группы
Назначение
Мнемоника
Описание
команд
1
Команды
MOV RI, R
(RI)(R)
однобайтовых
MVI R, D8
(R)D8
пересылок
(A)[YZ]
LDAX YZ
[YZ](A)
STAX YZ
A16(A)
STA A16
(A)A16
LDA A16
2
Команды ввода-вывода
IN N
(A)(N)
OUT N
(N)(A)
3
Команды
CMC
C+
арифметических и
STC
C1
логических операций с
CMA
(A)(A)
одним операндом
DAA
десятичная
коррекция
INR R
(R)(R)+1
DCR R
(R)(R)-1
INX YZ
(YZ)(YZ)+1
DCX YZ
(YZ)(YZ)-1
(HL)(DE)
4
Команды обмена
XCHG
(H)[SP+1]
байтами
XTHL
(L)[SP]
Циклический сдвиг
5
Команды сдвига
RLC
влево
содержимого
аккумулятора
RAL
Циклический сдвиг
влево через флаг C
RRC
RAR
Циклический сдвиг
вправо
Циклический сдвиг
вправо
через флаг C
№ группы
команд
6
Назначение
Команды
двухбайтовых
пересылок данных
Продолжение табл. П3
Мнемоника
Описание
LXI YZ, D16
SHLD A16
(YZ)D16
A16+1(L)
A16(H)
LHLD A16
(L)A16+1
(H)A16
PUSH YZ
POP YZ
PUSH PSW
7
Команды
арифметических и
логических
операций с двумя
операндами
[SP-1](Y)
[SP-2](Z)
(SP)(SP)-2
(Y)[SP]
(Z)[SP+1]
(SP)(SP+2)
[SP-1](A)
[SP-2](F)
(SP)(SP)-2
POP PSW
(F)[SP]
(A)[SP+1]
(SP)(SP)-2
SPHL
(SP)(HL)
ADD R
ADC R
SUB R
SBB R
ANA R
ORA R
XRA R
ADI D8
ACI D8
SUI D8
SBI D8
ANI D8
XRI D8
ORI D8
CPI D8
CMP R
(A)(A)+(R)
(A)(A)+(R)+C
(A)(A)-(R)
(A)(A)-(R)-C
(A)(A)(R)
(A)(A)(R)
(A)(A)(R)
(A)(A)+D8
(A)(A)+D8+C
(A)(A)-D8
(A)(A)-D8-C
(A)(A)D8
(A)(A)D8
(A)(A)D8
Установка флагов
в F по результатам
сравнения (A) с
D8 или (R)
(HL)(HL)+(YZ)
DAD YZ
№ группы
команд
8
9
Назначение
Специальные
команды
Команды
вызова и возврата
из подпрограмм и
прерываний
Продолжение табл. П3
Мнемоника
Описание
EI
Разрешение
прерываний
DI
Запрет прерываний
HLT
NOP
CALL A16
RET
Останов
Холостая операция
[SP-1][SP-2](PC)
(SP)(SP)-2
(PC)A16
(PC)[SP][SP+1]
(SP)(SP+2)
C_CON A16
При CON=1
[SP-1][SP-2](PC)
(SP)(SP)-2
(PC)A16,
иначе
(PC)(PC)+3
R_CON
При CON=1
(PC)[SP][SP+1]
(SP)(SP)+2,
иначе
(PC)(PC)+3
[SP-1][SP-2](PC)
(SP)(SP)-2
(PC)A16,
где
А16=0h,8h,10h,18h,
20h,28h,30h, 38h
RST
Продолжение табл. П3
№ группы
команд
10
Назначение
Команды
передачи
управления
Мнемоника
PCHL
JMP A16
J_CON A16
Описание
(PC)(HL)
(PC)A16
при CON=1
(PC)A16,
иначе
(PC)(PC)+1(2)(3),
в зависимости от
длины машинной
команды
В таблице П1.3 _CON означает часть мнемоники команды, определяющая
условие передачи управления вызова и возврата из подпрограммы. _CON в
мнемониках команд заменяется на:
o nz – если условный переход, вызов или возврат из подпрограммы
осуществляется при z=0;
o z – если условный переход, вызов или возврат из подпрограммы
осуществляется при z=1;
o nc – если условный переход, вызов или возврат из подпрограммы
осуществляется при c=0;
o c – если условный переход, вызов или возврат из подпрограммы
осуществляется при c=1;
o po – если условный переход, вызов или возврат из подпрограммы
осуществляется при p=1;
o pe – если условный переход, вызов или возврат из подпрограммы
осуществляется при p=0;
o p – если условный переход, вызов или возврат из подпрограммы
осуществляется при s=0;
o m – если условный переход, вызов или возврат из подпрограммы
осуществляется при s=1.
Далее приводится пример программы, демонстрирующей использование
наиболее часто встречающихся команд. При составлении собственных
программ рекомендуется придерживаться такой же формы записи.
Адрес Мнемоника
8000
MVI A, 1A
8001
8002
8003
8004
8005
Код Комментарий
3E (A)1A; 3E – код команды MVI A, D8
1A 1A – конкретный операнд,
подставляемый вместо D8
MOV C, A
4F (C)(A); 4F – код команды MOV C,A,
операндов у ней нет, поэтому занимает
1 байт. Сейчас (A)=1A и (С)=1A
LXI D, 8200 11 (DE)8200;11 – код команды LXI D, D16
00 8200 – конкретный операнд,
82 подставляемый вместо D16, т.к.
младший байт расположен по младшему адресу,
8006
8007
8008
STA 8201
8009 MVI A, C1
800A
800B LDA 8201
800C
800D
800E MVI A, 90
800F
8010 STAX D
8011 LXI D, 8201
8012
8013
8014 LDAX D
8015 INR C
8016 DCR A
8017 INX D
8018
8019
801A
801B
801С
801D
801E
801F
8020
INX D
DCX D
STAX D
LXI H, 0100
XCHG
DCX H
SPHL
8021 XTHL
32
01
82
3E
C1
3A
01
82
3E
90
12
то порядок следования в программе 00 82
(8201)(A); 32 – код команды STA A16
8201 – конкретный операнд,
подставляемый вместо А16. По этой
команде в ячейку памяти с адресом
8201 записалось содержимое аккумулятора,
т.е. (8201)=1А
(A)C1
(A)(8201); 3A – код команды LDA A16
8201 – конкретный операнд,
подставляемый вместо A16, (A)=1A
(A)90
[DE](A); в ячейку памяти с адресом,
хранящимся в регистровой паре DE,
записывается содержимое
аккумулятора, т.е. (8200)=90
11 (DE)8201
01
82
1A (A)[DE]; в аккумулятор из ячейки
памяти, адрес которой хранится в
регистровой паре, записывается
содержимое, т.е. (A)=1A
0C (C)(C)+1, увеличение содержимого
регистра С на единицу, т.е. (С)=1B
3D (A)(A)-1, уменьшение содержимого
регистра A на единицу, т.е. (A)=19
13 (DE)(DE)+1, увеличение
содержимого регистровой пары (DE)
на единицу, т.е. (DE)=8202
13 (DE)(DE)+1, (DE)=8203
1B (DE)(DE)-1, (DE)=8202
12 [DE](A), (8202)=19
21 (HL)0100
00
01
EB (DE)(HL), (DE)=0100, (HL)=8202
2B (HL)=8201
F9
(SP)(HL), пересылка содержимого
регистровой пары HL в регистр
указателя стека (SP)=8201
E3
(H)[SP+1], (L)[SP], обмен
информацией между вершиной
стека и регистровой парой (HL),
т. е. (H)=19, (L)=1A, (8202)=82,
(8201)=01
(A)(A)+(H), (A)=32
команда сравнения содержимого аккумулятора
со вторым байтом, т.е. (A) сравнивается с 32;
сравнение производится посредством
вычитания, но результат в А не помещается
эта команда условного перехода передала бы
управление на адрес 8000, если бы флаг Z=0,
т.к. предыдущая команда установила Z=1, то
будет выполнена следующая за ней команда с
адресом 8028
(A)(A)-32; (A)=0, флаг Z в
регистре флагов установился в 1
передаст управление на команду с
адресом 8028, если Z=1
8022 ADD H
8023 CPI 32
8024
84
FE
32
8025 JNZ 8000
8026
8027
C2
00
80
8028
8029
802A
802B
802C
802D
802E
802F
D6
32
CA
28
80
3C (A)(A)+1; (A)=1
87
(A)(A)+(A);(A)=2
B9 сравнение содержимого аккумулятора с
содержимым регистра С; сравнение
производится посредством вычитания,
результат в аккумулятор не записывается
F2
передала бы управление по адресу 8010, если
10
флаг S=0; т.к. (A)=2 и (С)=1B, то (А)-(С)=Е7,
80
т.е. флаг S=1
C3 безусловная передача управления на
00 команду с адресом 8300
83
SUI 32
JZ 8028
INR A
ADD A
CMP C
8030 JP 8010
8031
8032
8033 jmp 8300
8034
8035
В приведенной программе все числа записаны в шестнадцатеричной
системе счисления. Мнемоники команд микропроцессора КР580ВМ80А и
соответствующие им коды приведены в таблице П4. В крайних столбцах этой
таблицы приведены значения старших 4 бит байта (старшей тетрады), в
верхней и нижней строке значения младших четырех бит байта (младшей
тетрады).
MOV
M, C
7 MOV
M, B
1
MOV
H, C
6 MOV
H, B
0
MOV
D, C
-
3
LXI H,
D16
5 MOV
D, B
-
2
LXI
D,D16
4 MOV
B, B
-
1
LXI
B,D16
1
LXI
SP,
D16
MOV
B, C
NOP
0
0
2
MOV
M, D
MOV
H, D
MOV
D, D
MOV
B, D
STA
A16
SHLD
A16
STAX
D
STAX
B
2
3
MOV
M, E
MOV
H, E
MOV
D, E
MOV
B, E
INX
SP
INX
H
INX
D
INX
B
3
4
MOV
M, H
MOV
H, H
MOV
D, H
MOV
B, H
INR
M
INR
H
INR
D
INR
B
4
5
MOV
M, L
MOV
H, L
MOV
D, L
MOV
B, L
DCR
M
DCR
H
DCR
D
DCR
B
5
6
HLT
MOV
H, M
MOV
D, M
7
MOV
M, A
MOV
H, A
MOV
D, A
MOV
B, A
STC
MVI
M, D8
MOV
B, M
DAA
RAL
RLC
7
MVI
H, D8
MVI
D, D8
MVI
B, D8
6
8
MOV
A, B
MOV
L, B
MOV
E, B
MOV
C, B
-
-
-
-
8
9
MOV
A, C
MOV
L, C
MOV
E, C
MOV
C, C
DAD
SP
DAD
H
DAD
D
DAD
B
9
A
MOV
A, D
MOV
L, D
MOV
E, D
MOV
C, D
LDA
A16
LHLD
A16
LDAX
D
LDAX
B
A
Система команд микропроцессора КР580
B
MOV
A, E
MOV
L, E
MOV
E, E
MOV
C, E
DCX
SP
DCX
H
DCX
D
DCX
B
B
C
MOV
A, H
MOV
L, H
MOV
E, H
MOV
C, H
INR
A
INR
L
INR
E
INR
C
C
D
MOV
A, L
MOV
L, L
MOV
E, L
MOV
C, L
DCR
A
DCR
L
DCR
E
DCR
C
D
E
MOV
A, M
MOV
L, M
MOV
E, M
MOV
C, M
MVI
A, D8
MVI
L, D8
MVI
E, D8
MVI
C, D8
E
F
MOV
A, A
MOV
L, A
MOV
E, A
MOV
C, A
CMC
CMA
RAR
RRC
F
Таблица П4
7
6
5
4
3
2
1
0
ANA
C
ORA
C
POP
B
POP
D
POP
H
POP
PSW
1
A ANA
B ORA
C RNZ
D RNC
E RPO
RP
0
F
SUB
C
9 SUB
B
B
B
B
ADD
C
1
8 ADD
0
2
JP
A16
JPO
A16
JNC
A16
JNZ
A16
ORA
D
ANA
D
SUB
D
ADD
D
2
3
DI
XTH
L
OUT
N
JMP
A16
ORA
E
ANA
E
SUB
E
ADD
E
3
4
CP
A16
CPO
A16
CNC
A16
CNZ
A16
ORA
H
ANA
H
SUB
H
ADD
H
4
5
PUSH
PSW
PUSH
H
PUSH
D
PUSH
B
ORA
L
ANA
L
SUB
L
ADD
L
5
6
ORI
D8
ANI
D8
SUI
D8
ADI
D8
ORA
M
ANA
M
SUB
M
ADD
M
6
7
RST6
RST4
RST2
RST0
ORA
A
ANA
A
SUB
A
ADD
A
7
8
RM
RPE
RC
RZ
CMP
B
XRA
B
SBB
B
ADC
B
8
9
SPHL
PCHL
-
RET
CMP
C
XRA
C
SBB
C
ADC
C
9
A
JM
A16
JPE
A16
JC
A16
JZ
A16
CMP
D
XRA
D
SBB
D
ADC
D
A
B
EI
XCH
G
IN N
-
CMP
E
XRA
E
SBB
E
ADC
E
B
C
CM
A16
CPE
A16
CC
A16
CZ
A16
CMP
H
XRA
H
SBB
H
ADC
H
C
D
-
-
-
CAL
L A16
CMP
L
XRA
L
SBB
L
ADC
L
D
E
CPI
D8
XRI
D8
SBI
D8
ACI
D8
CMP
M
XRA
M
SBB
M
ADC
M
E
F
RST7
RST5
RST3
RST1
CMP
A
XRA
A
SBB
A
ADC
A
F
F
E
D
C
B
A
9
8
Продолжение табл. П4
Download