Zilog Z80/Система команд

Материал из Emuverse
Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0.

Команды без префикса

Код Данные Команда Действие Флаги Такты Байты Примечание
2 16 SZ5H3VNC
Без префикса
Группа 00
00 000 000 00 NOP -------- 4 1
00 001 000 08 EX AF, AF' AF <-> AF' ******** 4 1
00 010 000 10 d DJNZ d B <- B-1
Если B<>0 то PC <- PC+d
-------- 13/8 2 PC равен адресу следующей за DJNZ команды
00 011 000 18 d JR d PC <- PC+d -------- 12 2 PC равен адресу следующей команды
00 1СС 000 d JR СС, d Если СС то PC <- PC+d -------- 12/7 2 PC равен адресу следующей команды
00 RP0 001 nn LD RP, nn RP <- nn -------- 10 3
00 RP1 001 ADD HL, RP HL <- HL + RP --***-0C 11 1 F5,H,F3 берутся по результатам сложения старших байтов
00 0R0 010 LD [R], A [R] <- A -------- 7 1
00 0R1 010 LD A, [R] A <- [R] -------- 7 1
00 100 010 22 nn LD [nn], HL [nn] <- HL -------- 16 3
00 101 010 2A nn LD HL, [nn] HL <- [nn] -------- 16 3
00 110 010 32 nn LD [nn], A [nn] <- A -------- 13 3
00 111 010 3A nn LD A, [nn] A <- [nn] -------- 13 3
00 RP0 011 INC RP RP <- RP+1 -------- 6 1
00 RP1 011 DEC RP RP <- RP-1 -------- 6 1
00 SSS 100 INC SSS SSS <- SSS+1 SZ5H3V0- 4 1 V=1, если SSS=7F до операции
00 SSS 101 DEC SSS SSS <- SSS-1 SZ5H3V1- 4 1 V=1, если SSS=80 до операции
00 DDD 110 d LD DDD, d DDD <- d -------- 7 2
00 000 111 07 RLCA Цикл. сдвиг A влево, CY<-A7 --503-0C 4 1
00 001 111 0F RRCA Цикл. сдвиг A вправо, CY<-A0 --503-0C 4 1
00 010 111 17 RLA Цикл. сдвиг A+CY влево --503-0C 4 1
00 011 111 1F RRA Цикл. сдвиг A+CY вправо --503-0C 4 1
00 100 111 27 DAA Десятичная коррекция SZ5*3P-* 4 1 См. /DAA
00 101 111 2F CPL A <- NOT A --*1*-1- 4 1 F3 и F5 из A
00 110 111 37 SCF CY = 1 --*0*-01 4 1 F3 и F5 из A
00 111 111 3F CCF CY <- NOT CY --***-0C 4 1 H <- старый C, F3 и F5 из A
Группа 01
01 110 110 76 HALT -------- 4 1 Повторяет циклы NOP до прерывания или сброса
01 DDD 110 LD DDD, [HL] DDD <- [HL] -------- 7/15* 1
01 110 SSS LD [HL], SSS [HL] <- SSS -------- 7/15* 1
01 DDD SSS LD DDD, SSS DDD <- SSS -------- 4 1 DDD и SSS не равны 110
Группа 10
10 000 SSS ADD A, SSS A <- A+SSS SZ5H3V0C 4/7/15* 1
10 001 SSS ADC A, SSS A <- A+SSS+CY SZ5H3V0C 4/7/15* 1
10 010 SSS SUB A, SSS A <- A-SSS SZ5H3V1C 4/7/15* 1
10 011 SSS SBC A, SSS A <- A-SSS-CY SZ5H3V1C 4/7/15* 1
10 100 SSS AND A, SSS A <- A AND SSS SZ513P00 4/7/15* 1
10 101 SSS XOR A, SSS A <- A XOR SSS SZ503P00 4/7/15* 1
10 110 SSS OR A, SSS A <- A OR SSS SZ503P00 4/7/15* 1
10 111 SSS CP SSS A-SSS SZ*H*V1C 4/7/15* 1 F5 и F3 - копия SSS
Группа 11
11 CCC 000 RET CCC Если CCC то
    PCL <- [SP]
    PCH <- [SP+1]
    SP <- SP+2
-------- 11/5 1
11 RP0 001 POP RP RPH <- [SP]
RPL <- [SP+1]
SP <- SP+2
--------
********
10 1 Если RP=3, то подразумевается PSW, а не SP
11 001 001 C9 RET PCL <- [SP]
PCH <- [SP+1]
SP <- SP+2
-------- 10 1
11 011 001 D9 EXX BC,DE,HL <-> BC',DE',HL' -------- 4 1
11 101 001 E9 JP [HL] PC <- HL -------- 4 1 С префиксами становится JP [IX],
а не JP [IX+d]
11 111 001 F9 LD SP,HL SP <- HL -------- 6 1
11 CCC 010 nn JP CCC, [nn] Если CCC то PC <- nn -------- 10 3
11 000 011 C3 nn JP nn PC <- nn -------- 10 3
11 001 011 CB Префикс
11 010 011 D3 d OUT (d),A [Ad] <- A -------- 11 2 Номер порта в реальности 16-разрядный
11 011 011 DB d IN A, (d) A <- [Ad] -------- 11 2 Номер порта в реальности 16-разрядный
11 100 011 E3 EX (SP),HL [SP] <-> HL -------- 19 1
11 101 011 EB EX DE,HL DE <-> HL -------- 4 1 Префиксы игнорируются
11 110 011 F3 DI IFF1 <- 0 IFF2 <- 0 -------- 4 1 Запрет прерывания
11 111 011 FB EI IFF1 <- 1 IFF2 <- 1 -------- 4 1 Разрешение прерывания. До завершения следующей команды проверка на INT блокируется (как после NONI)
11 ССС 100 nn CALL ССС, [nn] Если ССС то
    SP <- SP-2
    [SP] <- (PC+3)L
    [SP+1] <- (PC+3)H
    PC <- nn
-------- 17/10 3
11 RP0 101 PUSH RP SP <- SP-2
[SP] <- RPL
[SP+1] <- RPH
-------- 11 1 Если RP=3, то подразумевается PSW, а не SP
11 001 101 CD nn CALL [nn] SP <- SP-2
[SP] <- PCL
[SP+1] <- PCH
PC <- nn
-------- 17 3
11 011 101 DD Префикс
11 101 101 ED Префикс
11 111 101 FD Префикс
11 000 110 C6 d ADD A, d A <- A+d+CY SZ5H3V0C 7 2
11 001 110 CE d ADC A, d A <- A+d+CY SZ5H3V0C 7 2
11 010 110 D6 d SUB A, d A <- A-d SZ5H3V1C 7 2
11 011 110 DE d SBC A, d A <- A-d-CY SZ5H3V1C 7 2
11 100 110 E6 d AND A, d A <- A AND d SZ513P00 7 2
11 101 110 EE d XOR A, d A <- A XOR d SZ503P00 7 2
11 110 110 F6 d OR A, d A <- A OR d SZ503P00 7 2
11 111 110 FE d CP A, d A-d SZ*H*V1C 7 2 F5 и F3 - копия d
11 NNN 111 RST NNN [SP-1] <- PCH
[SP-2] <- PCL
SP <- SP-2
PCH <- 0
PCL <- NNN*8
-------- 11 1


Префикс CB

Код Данные Команда Действие Флаги Такты Байты Примечание
2 16 SZ5H3VNC
11 001 011
00 rot SSS
CB
xx
rot SSS
*SLL SSS
Битовый сдвиг SZ503P0C 8/15* 2 rot=110 (SLL) - недок.
11 001 011
01 bit SSS
CB
xx
BIT bit, SSS SSS AND 2^bit *Z513*0- 8/12* 2 Z=1 если проверяемый бит =0.
S=1 если bit=7 и проверяемый бит =1.
F5=1 если bit=5 и проверяемый бит =1.
F3=1 если bit=4 и проверяемый бит =1.
P/V=Z.
Для BIT bit, [HL] F5 и F3 устанавливаются особым образом, см. /BIT
11 001 011
10 bit SSS
CB
xx
RES bit, SSS SSS <- SSS AND NOT(2^bit) -------- 8/15* 2
11 001 011
11 bit SSS
CB
xx
SET bit, SSS SSS <- SSS OR 2^bit -------- 8/15* 2

Обработка префиксов

Матрица команд, на которые влияют префиксы DD и FD[1]

+-------------------------------------------------+
|                   60 70                         |
|       21          61 71                   E1    |
|       22          62 72                         |
|       23          63 73                   E3    |
|       24 34 44 54 64 74 84 94 A4 B4             |
|       25 35 45 55 65 75 85 95 A5 B5       E5    |
|       26 36 46 56 66    86 96 A6 B6             |
|                   67 77                         |
|                   68                            |
| 09 19 29 39       69                      E9 F9 |
|       2A          6A                            |
|       2B          6B                CB          |
|       2C    4C 5C 6C 7C 8C 9C AC BC             |
|       2D    4D 5D 6D 7D 8D 9D AD BD             |
|       2E    4E 5E 6E 7E 8E 9E AE BE             |
|                   6F                            |
+-------------------------------------------------+

Команды сдвига

RLC
RRC

Примечания

Ссылки