Zilog Z80/Система команд: различия между версиями

Материал из Emuverse
(Заготовка)
 
(команды без префиксов)
Строка 1: Строка 1:
{{Emuverse}}
{{Emuverse}}
== Команды без префикса ==
{| class=fixed
! colspan=2 | Код
! Данные
! Команда
! Действие
! Флаги
! Такты
! Байты
! Примечание
|-
! 2
! 16
!
!
!
! SZ5H3VNC
!
!
!
|-
! colspan=9 | Без префикса
|-
! colspan=9 | Группа 00
|-
| nowrap | 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<br>Если 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
| nowrap | Цикл. сдвиг 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
|-
! colspan=9 | Группа 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
|-
! colspan=9 | Группа 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
|-
! colspan=9 | Группа 11
|-
| 11 CCC 000
|
|
| RET CCC
| Если CCC то<br>&nbsp;&nbsp;&nbsp;&nbsp;PCL <- [SP]<br>&nbsp;&nbsp;&nbsp;&nbsp;PCH <- [SP+1]<br>&nbsp;&nbsp;&nbsp;&nbsp;SP <- SP+2
| --------
| 11/5
| 1
|
|-
| 11 RP0 001
|
|
| POP RP
| RPH <- [SP]<br>RPL <- [SP+1]<br>SP <- SP+2
| --------<br>********
| 10
| 1
| Если RP=3, то подразумевается PSW, а не SP
|-
| 11 001 001
| C9
|
| RET
| PCL <- [SP]<br>PCH <- [SP+1]<br>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], <br>а не 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
| nowrap | CALL ССС, [nn]
| Если ССС то<br>&nbsp;&nbsp;&nbsp;&nbsp;SP <- SP-2<br>&nbsp;&nbsp;&nbsp;&nbsp;[SP] <- (PC+3)L<br>&nbsp;&nbsp;&nbsp;&nbsp;[SP+1] <- (PC+3)H<br>&nbsp;&nbsp;&nbsp;&nbsp;PC <- nn
| --------
| 17/10
| 3
|
|-
| 11 RP0 101
|
|
| PUSH RP
| SP <- SP-2<br>[SP] <- RPL<br>[SP+1] <- RPH
| --------
| 11
| 1
| Если RP=3, то подразумевается PSW, а не SP
|-
| 11 001 101
| CD
| nn
| CALL [nn]
| SP <- SP-2<br>[SP] <- PCL<br>[SP+1] <- PCH<br>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<br>[SP-2] <- PCL<br>SP <- SP-2<br>PCH <- 0<br>PCL <- NNN*8
| --------
| 11
| 1
|
|}


Матрица команд, на которые влияют префиксы DD и FD<ref>[http://homepage.ntlworld.com/cyborgsystems/CS_Main/Z80/z80.c Z80.c module Copyright (c) 2006, BlueChip of Cyborg Systems]</ref>
Матрица команд, на которые влияют префиксы DD и FD<ref>[http://homepage.ntlworld.com/cyborgsystems/CS_Main/Z80/z80.c Z80.c module Copyright (c) 2006, BlueChip of Cyborg Systems]</ref>

Версия от 18:36, 14 февраля 2008

Этот документ создан для 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

Матрица команд, на которые влияют префиксы 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                            |
+-------------------------------------------------+

Примечания

Ссылки