Zilog Z80/Система команд: различия между версиями
Panther (обсуждение | вклад) (команды без префиксов) |
Panther (обсуждение | вклад) (+ префикс CB) |
||
Строка 710: | Строка 710: | ||
| 11 | | 11 | ||
| 1 | | 1 | ||
| | |||
|} | |||
== Префикс CB == | |||
{| class=fixed | |||
! colspan=2 | Код | |||
! Данные | |||
! Команда | |||
! Действие | |||
! Флаги | |||
! Такты | |||
! Байты | |||
! Примечание | |||
|- | |||
! 2 | |||
! 16 | |||
! | |||
! | |||
! | |||
! SZ5H3VNC | |||
! | |||
! | |||
! | |||
|- | |||
| nowrap | 11 001 011<br>00 rot SSS | |||
| CB<br>xx | |||
| | |||
| rot SSS<br>*SLL SSS | |||
| Битовый сдвиг | |||
| SZ503P0C | |||
| 8/15* | |||
| 2 | |||
| rot=110 (SLL) - недок. | |||
|- | |||
| 11 001 011<br>01 bit SSS | |||
| CB<br>xx | |||
| | |||
| nowrap | BIT bit, SSS | |||
| SSS AND 2^bit | |||
| *Z513*0- | |||
| 8/12* | |||
| 2 | |||
| Z=1 если проверяемый бит =0. <br>S=1 если bit=7 и проверяемый бит =1.<br>F5=1 если bit=5 и проверяемый бит =1.<br>F3=1 если bit=4 и проверяемый бит =1.<br>P/V=Z.<br>Для BIT bit, [HL] F5 и F3 устанавливаются особым образом, см. [[/BIT]] | |||
|- | |||
| 11 001 011<br>10 bit SSS | |||
| CB<br>xx | |||
| | |||
| RES bit, SSS | |||
| nowrap | SSS <- SSS AND NOT(2^bit) | |||
| -------- | |||
| 8/15* | |||
| 2 | |||
| | |||
|- | |||
| 11 001 011<br>11 bit SSS | |||
| CB<br>xx | |||
| | |||
| SET bit, SSS | |||
| SSS <- SSS OR 2^bit | |||
| -------- | |||
| 8/15* | |||
| 2 | |||
| | | | ||
|} | |} |
Версия от 18:46, 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 |
Префикс 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 | +-------------------------------------------------+
Примечания
Ссылки
- Декодирование кодов команд (англ.)
- Таблица команд со временем исполнения (англ.)
- Алфавитный список команд с пояснениями (англ.)
- Действие команд на флаги (англ.)