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