Общее представление команд
Для кодирования команд в системе команд микропроцессора 8080 использованы практически все возможные варианты 8-разрядного кода команд, то есть команд чуть меньше 256.
По функциональному назначению их можно разделить на 6 основных групп.
· Команды пересылок – обеспечивают операции перемещения однобайтных или двухбайтных операндов между регистрами процессора, памятью данных или памятью программ;
· Команды передач управления – обеспечивают безусловные и условные ветвления в программе.
· Команды организации подпрограмм – обеспечивают условные и безусловные вызовы подпрограмм и возвраты из подпрограмм.
· Команды арифметических, логических и сдвиговых операций среди которых арифметические сложение и вычитание, а также логические “И”, “ИЛИ”, “НЕ”, “Исключающее ИЛИ”, сдвига вправо и влево, сравнения.
· Команды управления стеком – обеспечивают установку указателя стека, а также операции чтения и записи стека.
· Команды ввода, вывода и управления состоянием процессора – обеспечивают операции обмена байтами процессора с регистрами интерфейсов внешних устройств, а также управление триггером разрешения прерываний процессора, перевод процессора в состояние останова и отсутствие операций.
Полный список команд с выделением групп представлен в табл. 1.6, а перечень использованных для описания команд сокращений представлен в табл. 1.7. Буквы в заголовке табл. 1.6 обозначают: Ф – формат команды, выраженный количеством байтов команды; Т – количество машинных тактов в команде; Ц – количество машинных циклов в команде.
Таблица 1.6
Список команд микропроцессора 8080
Мнемокод | Действия | F | Название | Код | Ф | Т | Ц |
Команды пересылок | |||||||
MOV r1,r2 | (r1)(r2) | – | MOVe Register to Regist | 01DDDSSS | |||
MOV M,r | M(HL)(r) | – | MOVe Register to Memory | 01110SSS | |||
MOV r,M | (r)M(HL) | – | MOVe Memory to Register | 01DDD110 | |||
MVI r,d8 | (r)d8 | – | MOVe Immediate Register | 00DDD110 | |||
MVI M,d8 | M(HL)d8 | – | MOVe Immediate Memory | ||||
STA adr | M(adr)(A) | – | STore A direct | ||||
LDA adr | (A)M(adr) | – | LoaD A direct | ||||
STAX B | M(BC)(A) | – | STore A indirect | ||||
STAX D | M(DE)(A) | – | STore A indirect | ||||
LDAX B | (A)M(BC) | – | LoaD A indirect | ||||
LDAX D | (A)M(DE) | – | LoaD A indirect | ||||
LXI B,d16 | (BC)d16 | – | Load Immediate Register pair B&C | ||||
LXI D,d16 | (DE)d16 | – | Load Immediate register pair D&E | ||||
LXI H,d16 | (HL)d16 | – | Load Immediate register pair H&L | ||||
LXI SP,d16 | (SP)d16 | – | Load Immediate stack pointer | ||||
SHLD adr | M(adr)(L) M(adr+1)(H) | – | Store H&L Direct | ||||
LHLD adr | (L)M(adr) (H)M(adr+1) | – | Load H&L Direct | ||||
XCHG | (HL)«(DE) | – | eXCHanGe H&L, D&E | ||||
Команды передачи управления | |||||||
PCHL | (PC)(HL) | – | H&L to Programm Counter | ||||
JMP adr | (PC)adr | – | JuMP unconditional | ||||
JNZ adr | JMP if Z=0 | – | Jump on No Zero | ||||
JZ adr | JMP if Z=1 | – | Jump on Zero | ||||
JNC adr | JMP if CY=0 | – | Jump on No Carry | ||||
JC adr | JMP if CY=1 | – | Jump on Carry | ||||
JPO adr | JMP if P=0 | – | Jump on Parity Odd | ||||
JPE adr | JMP if P=1 | – | Jump on Parity Even | ||||
JP adr | JMP if S=0 | – | Jump on Positive | ||||
JM adr | JMP if S=1 | – | Jump on Minus | ||||
Команды организации подпрограмм | |||||||
CALL adr | stack(PC) (PC)adr | – | CALL unconditional | ||||
CNZ adr | CALL if Z=0 | – | Call on No Zero | ||||
CZ adr | CALL if Z=1 | – | Call on Zero | ||||
CNC adr | CALL if CY=0 | – | Call on No Carry | ||||
CC adr | CALL if CY=1 | – | Call on Carry | ||||
CPO adr | CALL if P=0 | – | Call on Parity Odd | ||||
CPE adr | CALL if P=1 | – | Call on Parity Even | ||||
CP adr | CALL if S=0 | – | Call on Positive | ||||
CM adr | CALL if S=1 | – | Call on Minus | ||||
RST N | stack(PC) (PC)N*8 | – | ReSTart | 11nnn111 | |||
RET | (PC)stack | – | RETurn | ||||
RNZ | RET if Z=0 | – | Return on No Zero | ||||
RZ | RET if Z=1 | – | Return on Zero | ||||
RNC | RET if CY=0 | – | Return on No Carry | ||||
RC | RET if CY=1 | – | Return on Carry | ||||
RPO | RET if P=0 | – | Return on Parity Odd | ||||
RPE | RET if P=1 | – | Return on Parity Even | ||||
RP | RET if S=0 | – | Return on Positive | ||||
RM | RET if S=1 | – | Return on Minus | ||||
Команды арифметических, логических и сдвиговых операций | |||||||
ADD r | (A)(A)+(r) | + | ADD Register to A | 10000SSS | |||
ADD M | (A)(A)+M(HL) | + | ADD Memory to A | ||||
ADI d8 | (A)(A)+d8 | + | ADd Immediate to A | ||||
ADC r | (A)(A)+(r)+ (CY) | + | ADd Register to A with Carry | 10001SSS | |||
ADC M | A)(A)+M(HL)+(CY) | + | ADd Memory to A with Carry | ||||
ACI d8 | (A)(A)+d8+ (CY) | + | Add Immediate to A with Carry | ||||
INR r | (r)(r)+1 | –CY | INcRement Register | 00DDD100 | |||
INR M | M(HL) M(HL)+1 | –CY | INcRement Memory | ||||
INX B | (BC)(BC)+1 | – | INcrement register pair B&C | ||||
INX D | (DE)(DE)+1 | – | INcrement register pair D&E | ||||
INX H | (HL)(HL)+1 | – | INcrement register pair H&L | ||||
DAD B | (HL)(HL)+ (BC) | CY | Double register ADd. Add B&C to H&L | ||||
DAD D | (HL)(HL)+ (DE) | CY | Double register ADd. Add D&E to H&L | ||||
DAD H | (HL)(HL)+ (HL) | CY | Double register ADd. Add H&L to H&L | ||||
DAD SP | (HL)(HL)+ (SP) | CY | Double register ADd. Add SP to H&L | ||||
SUB r | (A)(A)–(r) | + | SUBtract Register from A | 10010SSS | |||
SUB M | (A)(A)–M(HL) | + | SUBtract Memory from A | ||||
SUI d8 | (A)(A)–d8 | + | SUbtract Immediate from A | ||||
SBB r | (A)(A)–(r)–(CY) | + | SUbtract Register from A with borrow | 10011SSS | |||
SBB M | (A)(A)–M(HL)– (CY) | + | Subtract Memory from A with borrow | ||||
SBI d8 | (A)(A)–d8–(CY) | + | Subtract Immediate from A with Borrow | ||||
DCR r | (r)(r)–1 | –CY | DeCrement Register | 00DDD101 | |||
DCR M | M(HL) M(HL)–1 | –CY | DeCrement Memory | ||||
DCX B | (BC)(BC)–1 | – | DeCrement register pair B&C | ||||
DCX D | (DE)(DE)–1 | – | DeCrement register pair D&E | ||||
DCX H | (HL)(HL)–1 | – | DeCrement register pair H&L | ||||
ANA r | (A)(A)&(r) | + | ANd Register with A | 10100SSS | |||
ANA M | (A) (A)&M(HL) | + | ANd Memory with A | ||||
ANI d8 | (A)(A)&d8 | + | ANd Immediate with A | ||||
ORA r | (A)(A)Ú(r) | + | OR Register with A | 10110SSS | |||
ORA M | (A) (A)ÚM(HL) | + | OR Memory with A | ||||
ORI d8 | (A)(A)Úd8 | + | OR Immediate with A | ||||
XRA r | (A)(A)Å(r) | + | eXclusive or Register with A | 10101SSS | |||
XRA M | (A)(A)ÅM(HL) | + | eXclusive or Memory with A | ||||
XRI d8 | (A)(A)Åd8 | + | eXclusive or Immediate with A | ||||
CMP r | (F)(A–(r) | + | CoMPare Register with A | 00DDD101 | |||
CMP M | (F)(A)–M | + | CoMPare Memory with A | ||||
CPI d8 | (F)(A)–d8 | + | ComPare Immediate with A | ||||
RAR | CY | Rotate A Right through carry | |||||
RAL | CY | Rotate A Left through carry | |||||
RRC | CY | Rotate A Right into the Carry | |||||
RLC | CY | Rotate A Left into the Carry | |||||
DAA | Десятичная коррекция | + | Decimal Adjust A | ||||
CMA | (A)( ) | – | CoMplement A | ||||
STC | (CY)1 | CY | SeT Carry | ||||
CMC | (CY)( ) | CY | CoMplement Carry | ||||
Команды управления стеком | |||||||
SPHL | (SP)(HL) | – | H&L to Stack Pointer | ||||
PUSH B | stack(BC) | – | PUSH register pair B&C on stack | ||||
PUSH D | stack(DE) | – | PUSH register pair D&E on stack | ||||
PUSH H | stack(HL) | – | PUSH register pair H&L on stack | ||||
PUSH PSW | stack(A)&(F) | – | PUSH A&F on stack | ||||
POP B | (BC)stack | – | POP register pair B&C off stack | ||||
POP D | (DE)stack | – | POP register pair D&E off stack | ||||
POP H | (HL)stack | – | POP register pair H&L off stack | ||||
POP PSW | (A)&(F)stack | – | POP A&F off stack | ||||
XTHL | (HL)«stack | – | eXchange H&L, Top of stack | ||||
Команды ввода, вывода и управления состоянием процессора | |||||||
IN port | ABport (A)DB | – | INput | ||||
OUT port | ABport DB(A) | – | OUTput | ||||
DI | Запрет прерываний | – | Disable Interrupts | ||||
EI | Разрешение прерываний | – | Enable Interrupts | ||||
HLT | Останов | – | HaLT | ||||
NOP | Нет операции | – | No-OPeration |
Таблица 1.7
Обозначения принятые при описании команд