[<>]
~~TOC wide~~
====== Приложение 1. Система команд микропроцессора Z80 ======
В приложении приводится полный список команд микропроцессора Z80 фирмы Zilog. Дана мнемоника команд Zilog и соответствующая мнемоника для микропроцессора Intel 8080 фирмы Intel, описано действие команд, время выполнения команд.
Принятые сокращения и обозначения
^ Сокращение ^ Описание ^
| A |регистр ''А''|
| I |регистр ''I'' контроля вектора прерываний|
| R | регистр памяти ''R''|
| r | регистр ''A'', ''B'', ''C'', ''D'', ''E'', ''H'' или ''L''|
| r1 |:::|
| HL |регистровая пара ''HL''|
| ● |состояние флага не изменяется|
| 0 |флаг сбрасывается в 0|
| 1 |флаг устанавливается в 1|
| X |флаг не определён|
| ? |состояние флага зависит от результата операции|
| V |если было переполнение — 1, нет — 0|
| P |если количество единичных битов результата чётно (или ноль) — 1, нечётно — 0|
| d |смещение|
| n |8–ми битная константа|
| nn |16–ти битная константа или адрес|
| IFF |триггер разрешения прерывания|
| dd | регистр ''BC'', ''DE'', ''HL'', ''SP''|
| qq | регистр ''BC'', ''DE'', ''HL'', ''AF''|
| pp | регистр ''BC'', ''DE'', ''IX'', ''SP''|
| rr | регистр ''BC'', ''DE'', ''IY'', ''SP''|
| b | бит номер 0, 1, 2, 3, 4, 5, 6 или 7|
| cc | условие ''NZ'', ''Z'', ''NC'', ''C'', ''PO'' ,''PE'' , ''P'' или ''M''|
| p |адрес рестарта 0, 8h, 10h, 18h, 20h, 28h, 30h или 38h|
| e |смещение при относительной адресации|
| s/b |указывает на бит b ячейки s|
| CY |триггер (флаг) переноса ''C''|
| () |косвенная адресация по содержимому операнда|
| ЧЦ |число циклов|
| ЧТ |число тактов|
| Дл |длина команды в байтах|
===== Группа команд 8-разрядной загрузки =====
Это наиболее многочисленная группа команд. С их помощью производится обмен данными между внутренними регистрами микропроцессора, а также между внутренними регистрами и ячейками памяти.
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''LD r,r1''|''r <= r1''| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 |''MOV R,R' ''|
|''LD A,I''|''A<=I,PV=IFF''| ● | ? | ? | ? | 0 | 0 | 2 | 2 | 9 | ─ |
|''LD A,R''|''A <= R''| ● | ● | ● | ● | ● | ● | 2 | 2 | 9 | ─ |
|''LD I,A''|''I <= A''| ● | ● | ● | ● | ● | ● | 2 | 2 | 9 | ─ |
|''LD R,A''|''R <= A''| ● | ● | ● | ● | ● | ● | 2 | 2 | 9 | ─ |
|''LD r,n''|''r <= n''| ● | ● | ● | ● | ● | ● | 2 | 2 | 7 | ''MVI R,N'' |
|''LD r,(HL)''|''r <= (HL)''| ● | ● | ● | ● | ● | ● | 1 | 2 | 7 | ''MOV R,M'' |
|''LD r,(IX+d)''|''r <= (IX+d)''| ● | ● | ● | ● | ● | ● | 3 | 5 | 19 | ─ |
|''LD r,(IY+d)''|''r <= (IY+d)''| ● | ● | ● | ● | ● | ● | 3 | 5 | 19 | ─ |
|''LD A,(BC)''|''A <= (BC)''| ● | ● | ● | ● | ● | ● | 1 | 2 | 7 | ''LDAX B'' |
|''LD A,(DE)''|''A <= (DE)''| ● | ● | ● | ● | ● | ● | 1 | 2 | 7 | ''LDAX D'' |
|''LD A,(nn)''|''A <= (nn)''| ● | ● | ● | ● | ● | ● | 3 | 4 | 13 | ''LDA NN'' |
|''LD (HL),r''|''(HL) <= r''| ● | ● | ● | ● | ● | ● | 1 | 2 | 7 | ''MOV M,R'' |
|''LD (IX+d),r''|''(IX+d) <= r''| ● | ● | ● | ● | ● | ● | 3 | 5 | 19 | ─ |
|''LD (IY+d),r''|''(IY+d) <= r''| ● | ● | ● | ● | ● | ● | 3 | 5 | 19 | ─ |
|''LD (BC),A''|''(BC) <= A''| ● | ● | ● | ● | ● | ● | 1 | 2 | 7 | ''STAX B'' |
|''LD (DE),A''|''(DE) <= A''| ● | ● | ● | ● | ● | ● | 1 | 2 | 7 | ''STAX D'' |
|''|LD (nn),A''|''(nn) <= A''| ● | ● | ● | ● | ● | ● | 3 | 4 | 13 | ''STA NN'' |
|''LD (HL),n''|''(HL) <= n''| ● | ● | ● | ● | ● | ● | 2 | 3 | 10 | ''MVI M,N'' |
|''LD (IX+d),n''|''(IX+d)<=n''| ● | ● | ● | ● | ● | ● | 4 | 5 | 19 | ─ |
|''LD (IY+d),n''|''(IY+d)<=n''| ● | ● | ● | ● | ● | ● | 4 | 5 | 9 | ─ |
===== Группа команд 16-разрядной загрузки =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''LD dd,nn''|''dd<=nn''| ● | ● | ● | ● | ● | ● | 3 | 3 | 10 | ''LXI DD,NN'' |
|''LD IX,nn''|''IX<=nn''| ● | ● | ● | ● | ● | ● | 4 | 4 | 14 | ─ |
|''LD IY,nn''|''IY<=nn''| ● | ● | ● | ● | ● | ● | 4 | 4 | 14 | ─ |
|''LD dd,(nn)''|''dd<=(nn)''| ● | ● | ● | ● | ● | ● | 4 | 6 | 20 | ─ |
|''LD HL,(nn)''|''HL<=(nn)''| ● | ● | ● | ● | ● | ● | 3 | 5 | 16 | ''LHLD NN'' |
|''LD IX,(nn)''|''IX<=(nn)''| ● | ● | ● | ● | ● | ● | 4 | 6 | 20 | ─ |
|''LD IY,(nn)''|''IY<=(nn)''| ● | ● | ● | ● | ● | ● | 4 | 6 | 20 | ─ |
|''LD (nn),HL''|''(nn)<=HL''| ● | ● | ● | ● | ● | ● | 3 | 5 | 16 | ''SHLD NN'' |
|''LD (nn),dd''|''(nn)<=dd''| ● | ● | ● | ● | ● | ● | 4 | 6 | 20 | ─ |
|''LD (nn),IX''|''(nn)<=IX''| ● | ● | ● | ● | ● | ● | 4 | 6 | 20 | ─ |
|''LD (nn),IY''|''(nn)<=IY''| ● | ● | ● | ● | ● | ● | 4 | 6 | 20 | ─ |
|''LD SP,HL''|''SP<=HL''| ● | ● | ● | ● | ● | ● | 1 | 1 | 6 | ''SPHL'' |
|''LD SP,IX''|''SP<=IX''| ● | ● | ● | ● | ● | ● | 2 | 2 | 10 | ─ |
|'' LD SP,IY''|''SP<=IY''| ● | ● | ● | ● | ● | ● | 2 | 2 | 10 | ─ |
|''PUSH qq''|''SP<= SP-2'' \\ ''(SP) <= qq''| ● | ● | ● | ● | ● | ● | 1 | 3 | 11 | ''PUSH PSW,'' \\ ''B,D,H'' |
|''PUSH IX''|''SP<= SP-2'' \\ ''(SP) <= IX''| ● | ● | ● | ● | ● | ● | 2 | 4 | 15 | ─ |
|''PUSH IY''|''SP<= SP-2'' \\ ''(SP) <= IY''| ● | ● | ● | ● | ● | ● | 2 | 4 | 15 | ─ |
|''POP qq''|''qq<=(SP)'' \\ ''SP <= SP+2''| ● \\ ? | ● \\ ? | ● \\ ? | ● \\ ? | ● \\ ? | ● \\ ? | 1 | 3 | 10 | ''POP PSW,'' |
|''POP IX''|''IX<=(SP)'' \\ ''SP <= SP+2''| ● | ● | ● | ● | ● | ● | 2 | 4 | 14 | ─ |
|''POP IY''|''IY<=(SP)'' \\ ''SP <= SP+2''| ● | ● | ● | ● | ● | ● | 2 | 4 | 14 | ─ |
Команда ''POP AF'' делает содержимое регистра признаков ''AF'' равным значению регистра ''F'' из стека.
===== Команды 8-разрядной арифметики =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''INC r''|''r <= r+1''| ● | ? | V | ? | 0 | ? | 1 | 1 | 4 | ''INR R'' |
|''INC (HL)''|''(HL)<=(HL)+1''| ● | ? | V | ? | 0 | ? | 1 | 3 | 11 | ''INR M'' |
|''INC (IX+d)''|''(IX+d) <= (IX+d)+1''| ● | ? | V | ? | 0 | ? | 3 | 6 | 23 | ─ |
|''INC (IY+d)''|''(IY+d) <= (IY+d)+1''| ● | ? | V | ? | 0 | ? | 3 | 6 | 23 | ─ |
|''DEC r''|''r <= r-1''| ● | ? | V | ? | 1 | ? | 1 | 1 | 4 | ''DEC R'' |
|''DEC (HL)''|''(HL)<=(HL)-1''| ● | ? | V | ? | 1 | ? | 1 | 3 | 11 | ''DEC M'' |
|''DEC (IX+d)''|''(IX+d) <= (IX+d)-1''| ● | ? | V | ? | 1 | ? | 3 | 6 | 23 | ─ |
|''DEC (IY+d)''|''(IY+d) <= (IY+d)-1''| ● | ? | V | ? | 1 | ? | 3 | 6 | 23 | ─ |
|''ADD A,r''|''A<=A+r''| ? | ? | V | ? | 0 | ? | 1 | 1 | 4 | ''ADD R'' |
|''ADD A,n''|''A<=A+n''| ? | ? | V | ? | 0 | ? | 2 | 2 | 7 | ''ADI N'' |
|''ADD A,(HL)''|''A<=A+(HL)''| ? | ? | V | ? | 0 | ? | 1 | 2 | 7 | ''ADD M'' |
|''ADD A,(IX+d)''|''A<=A+(IX+d)''| ? | ? | V | ? | 0 | ? | 3 | 5 | 19 | ─ |
|''ADD A,(IY+d)''|''A<=A+(IY+d)''| ? | ? | V | ? | 0 | ? | 3 | 5 | 19 | ─ |
|''ADC A,r''|''A<=A+r+CY''| ? | ? | V | ? | 0 | ? | 1 | 1 | 4 | ''ADC R'' |
|''ADC A,n''|''A<=A+n+CY''| ? | ? | V | ? | 0 | ? | 2 | 2 | 7 | ''ACI N'' |
|''ADC A,(HL)''|''A<=A+(HL)+CY''| ? | ? | V | ? | 0 | ? | 1 | 2 | 7 | ''ADC M'' |
|''ADC A,(IX+d)''|''A<=A+(IX+d)+CY''| ? | ? | V | ? | 0 | ? | 3 | 5 | 19 | ─ |
|''ADC A,(IY+d)''|''A<=A+(IY+d)+CY''| ? | ? | V | ? | 0 | ? | 3 | 5 | 19 | ─ |
|''SUB r''|''A<=A-r''| ? | ? | V | ? | 1 | ? | 1 | 1 | 4 | ''SUB R'' |
|''SUB n''|''A<=A-n''| ? | ? | V | ? | 1 | ? | 2 | 2 | 7 | ''SUI N'' |
|''SUB A,(HL)''|''A <= A-(HL)''| ? | ? | V | ? | 1 | ? | 1 | 2 | 7 | ''SUB M'' |
|''SUB A,(IX+d)''|''A <= A-(IX+d)''| ? | ? | V | ? | 1 | ? | 3 | 5 | 19 | ─ |
|''SUB A,(IY+d)''|''A <= A-(IY+d)''| ? | ? | V | ? | 1 | ? | 3 | 5 | 19 | ─ |
|''SBC A,r''|''A<=A-r-CY''| ? | ? | V | ? | 1 | ? | 1 | 1 | 4 | ''SBB R'' |
|''SBC A,n''|''A<=A-n-CY''| ? | ? | V | ? | 1 | ? | 2 | 2 | 7 | ''SBI N'' |
|''SBC A,(HL)''|''A<=A-(HL)-CY''| ? | ? | V | ? | 1 | ? | 1 | 2 | 7 | ''SBB M'' |
|''SBC A,(IX+d)''|''A<=A-(IX+d)-CY''| ? | ? | V | ? | 1 | ? | 3 | 5 | 19 | ─ |
|''SBC A,(IY+d)''|''A<=A-(IY+d)-CY''| ? | ? | V | ? | 1 | ? | 3 | 5 | 19 | ─ |
|''NEG''|''A=0-A''| ? | ? | V | ? | 1 | ? | 2 | 2 | 8 | ─ |
|''DAA''|Десятичная коррекция| ? | ? | P | ? | ● | ? | 1 | 1 | 4 | ''DAA'' |
===== Группа команд информационного обмена =====
Эта группа команд позволяет производить обмен данными между регистровыми парами, содержимым стека и регистровой парой; производить смену текущего набора регистров.
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''EX DE,HL''|''DE <=> HL''| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ''XCHG'' |
|''EX AF,AF' ''|''AF <=> AF' ''| ? | ? | ? | ? | ? | ? | 1 | 1 | 4 | ─ |
|''EXX''|''BC <=> BC' '' \\ ''DE <=> DE' '' \\ ''HL <=> HL' ''| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ─ |
|''EX (SP),HL''|''H <=> (SP+1)'' \\ L <=> (SP)| ● | ● | ● | ● | ● | ● | 1 | 5 | 19 | ''XTHL'' |
|''EX (SP),IY''|''IY <=> (SP)''| ● | ● | ● | ● | ● | ● | 2 | 6 | 23 | ─ |│
|''EX (SP),IX''|''IX <=> (SP)''| ● | ● | ● | ● | ● | ● | 2 | 6 | 23 | ─ |│
===== Команды 16-разрядной арифметики =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''INC dd''|''dd<=dd+1''| ● | ● | ● | ● | ● | ● | 1 | 1 | 6 | ''INX DD'' |
|''INC IX''|''IX<=IX+1''| ● | ● | ● | ● | ● | ● | 2 | 2 | 10 | ─ |
|''INC IY''|''IY<=IY+1''| ● | ● | ● | ● | ● | ● | 2 | 2 | 10 | ─ |
|''DEC dd''|''dd<=dd-1''| ● | ● | ● | ● | ● | ● | 1 | 1 | 6 | ''DCX DD'' |
|''DEC IX''|''IX<=IX-1''| ● | ● | ● | ● | ● | ● | 2 | 2 | 10 | ─ |
|''DEC IY''|''IY<=IY-1''| ● | ● | ● | ● | ● | ● | 2 | 2 | 10 | ─ |
|''ADD HL,dd''|''HL<=HL+dd''| ? | ● | ● | ● | 0 | X | 1 | 3 | 11 | ''DAD DD'' |
|''ADC HL,dd''|''HL<=HL+dd+CY''| ? | ? | V | ? | 0 | X | 2 | 4 | 15 | ─ |
|''SBC HL,dd''|''HL<=HL-dd-CY''| ? | ? | V | ? | 1 | X | 2 | 4 | 15 | ─ |
|''ADD IX,pp''|''IX<=IX+pp''| ? | ● | ● | ● | 0 | X | 2 | 4 | 15 | ─ |
|''ADD IY,rr''|''IY<=IY+rr''| ? | ● | ● | ● | 0 | X | 2 | 4 | 15 | ─ |
===== Логические команды =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''AND r''|''A <=A & r''| 0 | ? | P | ? | 0 | 1 | 1 | 1 | 4 | ''ANA R'' |
|''AND n''|''A <=A & n''| 0 | ? | P | ? | 0 | 1 | 2 | 2 | 7 | ''ANI N'' |
|''AND (HL)''|''A <=A & (HL)''| 0 | ? | P | ? | 0 | 1 | 1 | 2 | 7 | ''ANA M'' |
|''AND (IX+d)''|''A<=A &(IX+d)''| 0 | ? | P | ? | 0 | 1 | 3 | 5 | 19 | — |
|''AND (IY+d)''|''A<=A &(IY+d)''| 0 | ? | P | ? | 0 | 1 | 3 | 5 | 19 | — |
|''OR r''|''A <=A V r''| 0 | ? | P | ? | 0 | 0 | 1 | 1 | 4 | ''ORA R'' |
|''OR n''|''A <=A V r''| 0 | ? | P | ? | 0 | 0 | 2 | 2 | 7 | ''ORI N'' |
|''OR (HL)''|''A <=A V (HL)''| 0 | ? | P | ? | 0 | 0 | 1 | 2 | 7 | ''ORA M'' |
|''OR (IX+d)''|''A<=A V(IX+d)''| 0 | ? | P | ? | 0 | 0 | 3 | 5 | 19 | — |
|''OR (IY+d)''|''A<=A V(IY+d)''| 0 | ? | P | ? | 0 | 0 | 3 | 5 | 19 | — |
|''XOR r''|''A <= A × r''| 0 | ? | P | ? | 0 | 0 | 1 | 1 | 4 | ''XRA R'' |
|''XOR n''|''A <= A × n''| 0 | ? | P | ? | 0 | 0 | 2 | 2 | 7 | ''XRI N'' |
|''XOR (HL)''|''A <= A ×(HL)''| 0 | ? | P | ? | 0 | 0 | 1 | 2 | 7 | ''XRA M'' |
|''XOR (IX+d)''|''A<=A ×(IX+d)''| 0 | ? | P | ? | 0 | 0 | 3 | 5 | 19 | — |
|''XOR (IY+d)''|''A<=A ×(IY+d)''| 0 | ? | P | ? | 0 | 0 | 3 | 5 | 19 | — |
|''CP r''|''A ? r''| ? | ? | V | ? | 1 | ? | 1 | 1 | 4 | ''CPM R'' |
|''CP n''|''A ? n''| ? | ? | V | ? | 1 | ? | 2 | 2 | 7 | ''CPI N'' |
|''CP (HL)''|''A ? (HL)''| ? | ? | V | ? | 1 | ? | 1 | 2 | 7 | ''CPM M'' |
|''CP (IX+d)''|''A ? (IX+d)''| ? | ? | V | ? | 1 | ? | 3 | 5 | 19 | — |
|''CP (IY+d)''|''A ? (IY+d)''| ? | ? | V | ? | 1 | ? | 3 | 5 | 19 | — |
|''CPL''| Инверсия битов аккумулятора \\ ''0 <=> 1''| ● | ● | ● | ● | 1 | 1 | 1 | 1 | 4 | ''CMA'' |
|''CCF''|Инвертировать флаг ''C''| ? | ● | ● | ● | 0 | 0 | 1 | 1 | 4 | ''CMC'' |
|''SCF''|Установка ''C''| 1 | ● | ● | ● | 0 | 0 | 1 | 1 | 4 | ''STC'' |
===== Kоманды для работы с отдельными разрядами =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''BIT b,r''|''0=r/b ?''| ● | ? | X | X | 0 | 1 | 2 | 2 | 8 | ─ |
|''BIT b,(HL)''|''0=(HL)/b ?''| ● | ? | X | X | 0 | 1 | 2 | 3 | 12 | ─ |
|''BIT b,(IX+d)''|''0=(IX+d)/b?''| ● | ? | X | X | 0 | 1 | 4 | 5 | 20 | ─ |
|''BIT b,(IY+d)''|''0=(IY+d)/b?''| ● | ? | X | X | 0 | 1 | 4 | 5 | 20 | ─ |
|''SET b,r''|''r/b<=1''| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
|''SET b,(HL)''|''(HL)/b<=1''| ● | ● | ● | ● | ● | ● | 2 | 4 | 15 | ─ |
|''SET b,(IX+d)''|''(IX+d)/b<=1''| ● | ● | ● | ● | ● | ● | 4 | 6 | 23 | ─ |
|''SET b,(IY+d)''|''(IY+d)/b<=1''| ● | ● | ● | ● | ● | ● | 4 | 6 | 23 | ─ |
|''RES b,r''|''r/b<=0''| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
|''RES b,(HL)''|''(HL)/b<=0''| ● | ● | ● | ● | ● | ● | 2 | 4 | 15 | ─ |
|''RES b,(IX+d)''|''(IX+d)/b<=0''| ● | ● | ● | ● | ● | ● | 4 | 6 | 23 | ─ |
|''RES b,(IY+d)''|''(IY+d)/b<=0''| ● | ● | ● | ● | ● | ● | 4 | 6 | 23 | ─ |
===== Команды работы с портами ввода/вывода =====
Микропроцессор Intel 8080 имеет всего одну команду ввода и одну команду вывода. Это соответственно ''IN'' и ''OUT''. По команде ''OUT'' содержимое аккумулятора записывается в порт, номер которого указывается непосредственно в команде. Команда ''IN'' позволяет ввести байт из порта ввода/вывода и занести его в аккумулятор.
К системе команд микропроцессора Z80 добавлены команды ввода/вывода блока (как пошаговые, так и автоматические), и ввода/вывода в порт, косвенно адресуемый по содержимому регистра ''C'' содержимого любого из основных регистров микропроцессора.
Команды ''INI'' и ''IND'' устанавливают флаг ''Z'', если ''B=0''.
Команды ''IN ?,(C)'' и ''OUT (C),(HL)'' не имеют обрабатываемой ассемблером мнемоники, но их можно ввести по машинному коду ED 70 и ED 71 соответственно.
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''IN A,(n)''|''A <= порт(n)''| ● | ● | ● | ● | ● | ● | 2 | 3 | 11 | ''IN N'' |
|''IN r,(C)''|''r <= порт(C)''| ● | ? | P | ? | 0 | ? | 2 | 3 | 12 | ─ |
|''IN ?,(C)''|Установка флагов как у \\ ''IN r''| ● | ? | P | ? | 0 | ? | 2 | 3 | 12 | ─ |
|''INI''|''(HL)<=порт(C)'' \\ ''B=B-1'' \\ ''HL=HL+1''| X | 1 \\ ? | X | X | 1 | X | 2 | 4 | 16 | ─ |
|''INIR''|''(HL)<=порт(C)'' \\ ''B=B-1'' \\ ''HL=HL+1'' \\ Повторить пока ''B<>0''| X | 1 | X | X | 1 | X | 2 \\ 2 | 5 \\ 4 | 21 \\ 16 | ─ |
|''IND''|''(HL)<=порт(C)'' \\ ''B=B-1'' \\ ''HL=HL-1''| X | 1 \\ ? | X | X | 1 | X | 2 | 4 | 16 | ─ |
|''INDR''|''(HL)<=порт(C)'' \\ ''B=B-1'' \\ ''HL=HL-1'' \\ Повторить пока ''B<>0''| X | 1 | X | X | 1 | X | 2 \\ 2 | 5 \\ 4 | 21 \\ 16 | ─ |
|''OUT (n),A''|''порт(n)<= A''| ● | ● | ● | ● | ● | ● | 2 | 3 | 11 | ''OUT N'' |
|''OUT (C),r''|''порт(C)<= r''| ● | ● | ● | ● | ● | ● | 2 | 3 | 12 | ─ |
|''OUT (C),(HL)''|''Установить флаги''| ● | ● | ● | ● | ● | ● | 2 | 3 | 12 | ─ |
|''OUTI''|''порт(C)<=(HL)'' \\ ''B=B-1'' \\ ''HL=HL+1''| X | 0 \\ ? | X | X | 1 | X | 2 | 4 | 16 | ─ |
|''OTIR''|''порт(C)<=(HL)'' \\ ''B=B-1'' \\ ''HL=HL+1'' \\ Повторить пока ''B<>0''| X | 1 | X | X | 1 | X | 2 \\ 2 | 5 \\ 4 | 21 \\ 16 | ─ |
|''OUTD''|''порт(C)<=(HL)'' \\ ''B=B-1'' \\ ''HL=HL-1''| X | ? | X | X | 1 | X | 2 | 4 | 16 | ─ |
|''OTDR''|''порт(C)<=(HL)'' \\ ''B=B-1'' \\ ''HL=HL-1'' \\ Повторить пока ''B<>0''| X | 1 | X | X | 1 | X | 2 \\ 2 | 5 \\ 4 | 21 \\ 16 | ─ |
===== Команды перехода =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''JP nn''|''PC <=nn''| ● | ● | ● | ● | ● | ● | 3 | 3 | 10 | ''JMP NN'' |
|''JP cc,nn''|Если условие ''cc'' истинно ''PC=nn'', \\ иначе продолжить программу| ● | ● | ● | ● | ● | ● | 3 | 3 | 10 | ''JNZ, JZ,'' \\ ''JNC, JC,'' \\ ''JPO, JPE,'' \\ ''JP, JM NN'' |
|''JP (HL)''|''PC <=HL''| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ''PCHL'' |
|''JP (IX)''|''PC <=IX''| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
|''JP (IY)''|''PC <=IY''| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
|''JR e''|''PC<=PC+e''| ● | ● | ● | ● | ● | ● | 2 | 3 | 12 | ─ |
|''JR C,e''|Если ''C=0'', продолжить программу, \\ иначе ''PC<=PC+e''| ● | ● | ● | ● | ● | ● | 2 \\ 2 | 2 \\ 3 | 7 \\ 12 | ─ |
|''JR NC,e''|Если ''C=1'', продолжить программу, \\ иначе ''PC<=PC+e''| ● | ● | ● | ● | ● | ● | 2 \\ 2 | 2 \\ 3 | 7 \\ 12 | ─ |
|''JR Z,e''|Если ''Z=0'', продолжить программу, \\ иначе ''PC<=PC+e''| ● | ● | ● | ● | ● | ● | 2 \\ 2 | 2 \\ 3 | 7 \\ 12 | ─ |
|''JR NZ,e''|Если ''Z=1'', продолжить программу, \\ иначе ''PC<=PC+e''| ● | ● | ● | ● | ● | ● | 2 \\ 2 | 2 \\ 3 | 7 \\ 12 | ─ |
|''DJNZ e''|''B=B-1'' \\ Если ''B=0'' продолжить программу, \\ иначе ''PC<=PC+e''| ● | ● | ● | ● | ● | ● | 2 \\ 2 | 2 \\ 3 | 8 \\ 13 | ─ |
===== Группа команд сдвига и циклического сдвига =====
^ Мнемокод ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''SLA r''| ? | ? | P | ? | 0 | 0 | 2 | 1 | 4 | ─ |
|''SLA (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''SLA (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''SLA (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''SRA r''| ? | ? | P | ? | 0 | 0 | 2 | 1 | 4 | ─ |
|''SRA (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''SRA (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''SRA (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''SRL r''| ? | ? | P | ? | 0 | 0 | 2 | 1 | 4 | ─ |
|''SRL (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''SRL (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''SRL (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RLA''| ? | ● | ● | ● | 0 | 0 | 1 | 1 | 4 | ''RAL'' |
|''RL r''| ? | ? | P | ? | 0 | 0 | 2 | 1 | 4 | ─ |
|''RL (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''RL (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RL (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RRA''| ? | ● | ● | ● | 0 | 0 | 1 | 1 | 4 | ''RAR'' |
|''RR r''| ? | ? | P | ? | 0 | 0 | 2 | 2 | 8 | ─ |
|''RR (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''RR (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RR (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RLCA''| ? | ● | ● | ● | 0 | 0 | 1 | 1 | 4 | ''RLC'' |
|''RLC r''| ? | ? | P | ? | 0 | 0 | 2 | 2 | 8 | ─ |
|''RLC (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''RLC (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RLC (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RRCA''| ? | ● | ● | ● | 0 | 0 | 1 | 1 | 4 | ''RRC'' |
|''RRC r''| ? | ? | P | ? | 0 | 0 | 2 | 2 | 8 | ─ |
|''RRC (HL)''| ? | ? | P | ? | 0 | 0 | 2 | 4 | 15 | ─ |
|''RRC (IX+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RRC (IY+d)''| ? | ? | P | ? | 0 | 0 | 4 | 6 | 23 | ─ |
|''RLD''| ● | ? | P | ? | 0 | 0 | 2 | 5 | 18 | ─ |
|''RRD''| ● | ? | P | ? | 0 | 0 | 2 | 5 | 18 | ─ |
Действие команд сдвига поясняется рисунком:
''SLA'' (сдвиг влево арифметический):
┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐
│ ◄─────┤b7│b6│b5│b4│b3│b2│b1│b0├◄─── 0
└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘
флаг C регистр/память
''SRA'' (сдвиг вправо арифметический):
┌──────────────────────────────────────┐
│ ┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
└──► │ ┌►┤b7│b6│b5│b4│b3│b2│b1│b0├──┘
└──┘ │ └┬─┴──┴──┴──┴──┴──┴──┴──┘
└──┘
флаг C регистр/память
''SRL'' (сдвиг вправо логический):
┌──────────────────────────────────────┐
│ ┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
└──► │ ┌─►b7│b6│b5│b4│b3│b2│b1│b0├►─┘
└──┘ │ └──┴──┴──┴──┴──┴──┴──┴──┘
0
флаг C регистр/память
''RLA'' (сдвиг влево через перенос):
┌──────────────────────────────────────┐
│ ┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
└─┤ ├─◄───┤b7│b6│b5│b4│b3│b2│b1│b0├◄──┘
└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘
флаг C аккумулятор
Команда RL выполняется аналогично над регистром или памятью.
''RRA'' (сдвиг вправо через перенос):
┌─────────────────────────────────────┐
│ ┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
└►┤ ├─►───┤b7│b6│b5│b4│b3│b2│b1│b0├──┘
└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘
флаг C аккумулятор
Команда ''RR'' выполняется аналогично над регистром или памятью.
''RLCA'' (циклический сдвиг влево):
┌─────────────────────────────┐
┌──┐ │ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
│ ◄───┴─┤b7│b6│b5│b4│b3│b2│b1│b0├◄──┘
└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘
флаг C аккумулятор
Команда ''RLC'' выполняется аналогично над регистром или памятью.
''RRCA'' (циклический сдвиг вправо):
┌───────┬──────────────────────────────┐
│ ┌──┐ │ ┌──┬──┬──┬──┬──┬──┬──┬──┐ │
└─► │ └─►┤b7│b6│b5│b4│b3│b2│b1│b0├───┘
└──┘ └──┴──┴──┴──┴──┴──┴──┴──┘
флаг C аккумулятор
Команда ''RRC'' выполняется аналогично над регистром или памятью.
''RLD'' (обмен полубайтов влево):
┌───────────────────────┐
┌─────┬──┴──┐ ┌─────┬──▼──┐
│ │ │ │ │ │
└─────┴──▲──┘ └┬─▲──┴──┬──┘
└───────────────┘ └─────┘
аккумулятор память, адресуемая (HL)
''RRD'' (обмен полубайтов вправо):
┌─────────────────┐ ┌───┐
┌─────┬──┴──┐ ┌──▼─┴┬──▼──┐
│ │ │ │ │ │
└─────┴──▲──┘ └─────┴──┬──┘
└───────────────────────┘
аккумулятор память, адресуемая (HL)
===== Группа команд пересылки блока =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''LDI''|''(DE)<= (HL)'' \\ ''DE=DE+1'' \\ ''HL=HL+1'' \\ ''BC=BC-1''| ● | ● | ? \\ 1 | ● | 0 | 0 | 2 | 4 | 16 | ─ |
|''LDIR''|''(DE)<= (HL)'' \\ ''DE=DE+1'' \\ ''HL=HL+1'' \\ ''BC=BC-1'' \\ Повторяется пока ''BC<>0''| ● | ● | 0 | ● | 0 | 0 | 2 | 4 | 16 | ─ |
|''LDD''|''(DE)<= (HL)'' \\ ''DE=DE-1'' \\ ''HL=HL-1'' \\ ''BC=BC-1''| ● | ● | ? \\ 1 | ● | 0 | 0 | 2 | 4 | 16 | ─ |
|''LDDR''|''(DE)<= (HL)'' \\ ''DE=DE-1'' \\ ''HL=HL-1'' \\ ''BC=BC-1'' \\ Повторяется пока ''BC<>0''| ● | ● | 0 | ● | 0 | 0 | 2 | 4 | 16 | ─ |
===== Группа команд поиска =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''CPI''|''A = (HL) ?'' \\ ''HL<=HL+1'' \\ ''BC<=BC-1;'' \\ ''P/V=0,if BC=0'' \\ ''P/V=1,if <>0''| ● | ? | ? | ? | 1 | ? | 2 | 4 | 16 | — |
|''CPIR''|''A = (HL) ?'' \\ ''HL<=HL+1'' \\ ''BC<=BC-1'' \\ Повторяется пока ''BC<>0''| ● | ? | ? | ? | 1 | ? | 2 | 4 | 16 | — |
|''CPD''|''A = (HL) ?'' \\ ''HL=HL-1'' \\ ''BC=BC-1'' \\ ''P/V=0,if BC=0'' \\ ''P/V=1,if <>0''| ● | ? | ? | ? | 1 | ? | 2 | 4 | 16 | — |
|''CPDR''|''A = (HL) ?'' \\ ''HL=HL-1'' \\ ''BC=BC-1'' \\ Повторяется пока ''BC<>0''| ● | ? \\ 2 | ? \\ 1 | ? | 1 | ? | 2 | 4 | 16 | — |
===== Команды обращения к подпрограмме =====
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''CALL nn''|''SP <= SP-2'' \\ ''(SP) <= PC'' \\ ''PC = nn''| ● | ● | ● | ● | ● | ● | 3 | 5 | 17 | ''CALL NN'' |
|''CALL cc,nn''|Если условие ''cc'' ложно, \\ продолжить программу, \\ иначе так же, как и для \\ ''CALL nn''| ● | ● | ● | ● | ● | ● | 3 | 3 | 10 | ''CNZ'', ''CZ'', \\ ''CNC'', ''CC'', \\ ''CPO'', ''CP'', \\ ''CPE'', ''CM'' |
| ::: | ::: |:::|:::|:::|:::|:::|:::| 3 | 5 | 17 |:::|
|''RET''|''PC <= (SP)'' \\ ''SP <= SP+2''| ● | ● | ● | ● | ● | ● | 1 | 3 | 10 | ''RET'' |
|''RET cc''|Если условие ''cc'' ложно, \\ продолжить программу, \\ иначе так же, как и для \\ ''RET''| ● | ● | ● | ● | ● | ● | 1 | 1 | 5 | ''RNZ'', ''RZ'', \\ ''RNC'', ''RC'', \\ ''RPO'', ''RP'', \\ ''RPE'', ''RM'' |
| ::: | ::: |:::|:::|:::|:::|:::|:::| 1 | 3 | 11 | ::: |
|''RETI''|Возврат после прерывания| ● | ● | ● | ● | ● | ● | 2 | 4 | 14 | ─ |
|''RETN''|Возврат после \\ немаскируемого прерывания| ● | ● | ● | ● | ● | ● | 2 | 4 | 14 | ─ |
|''RST p''|''SP <= SP-2'' \\ ''(SP)<= PC'' \\ ''PC = p''| ● | ● | ● | ● | ● | ● | 1 | 3 | 11 | ''RST N'' |
В системе команд микропроцессора имеется восемь однобайтовых команд ''RST 0'' – ''RST 7'' вызова подпрограмм, расположенных по фиксированным адресам. Ниже приведена таблица соответствия между этими командами и шестнадцатеричными адресами ячеек памяти, куда передается управление при их выполнении.
{{anchor:table_rts}}
^ Команда ^ Адрес начала \\ подпрограммы ^
| ''RST 0'' | 0000 |
| ''RST 1'' | 0008 |
| ''RST 2'' | 0010 |
| ''RST 3'' | 0018 |
| ''RST 4'' | 0020 |
| ''RST 5'' | 0028 |
| ''RST 6'' | 0030 |
| ''RST 7'' | 0038 |
В мнемонике микропроцессора Z80 (в отличие от мнемоники Intel 8080) команда записывается с указанием непосредственного адреса обращения к подпрограмме, например, ''RST 7'' записывается как ''RST 38h''.
===== Группа команд управления центральным процессором =====
Команда ''NOP'' этой группы не производит никаких операций, однако т.к. она выполняется за определенный отрезок времени, её можно использовать в программах для задания временных интервалов.
Появление в программе команды ''HALT'' ведет к останову выполнения программы. Продолжить выполнение программы можно только подачей сигнала СБРОС или ЗАПРОС ПРЕРЫВАНИЯ на соответствующие входы микропроцессора. В режиме ожидания команда схожа с командой ''NOP''.
Команда ''IM'' служит для установки вектора прерываний. Команды ''DI'' и ''EI'' — для запрещения и разрешения маскируемых прерываний.
Команда ''IM 0'' устанавливает режим прерывания, в котором прерывающее устройство может вставить какую–нибудь команду в шину данных или для выполнения ЦП.
Команда ''IM 1'' устанавливает режим прерывания, в котором процессор будет реагировать на прерывание, выполняемое командой ''RST 38H''.
Команда ''IM 2'' устанавливает режим прерывания, в котором разрешается непрямой вызов какой–нибудь ячейки памяти. В этом режиме ЦП формирует 16–битный адрес памяти. Восемь верхних битов содержит регистр ''I'' контроля вектора прерывания.
^ Мнемокод ^ Символическое описание ^ Флаги ^^^^^^ Дл ^ ЧЦ ^ ЧТ ^ Intel 8080 ^
^:::^:::^ C ^ Z ^ V ^ S ^ N ^ H ^:::^:::^:::^:::^
|''NOP''|Нет операции| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ''NOP'' |
|''HALT''|Останов| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ''HLT'' |
|''DI''|''IFF=0''| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ''DI'' |
|''EI''|''IFF=1''| ● | ● | ● | ● | ● | ● | 1 | 1 | 4 | ''EI'' |
|''IM 0''|Установка режима \\ прерываний| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
|''IM 1''|:::| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
|''IM 2''|:::| ● | ● | ● | ● | ● | ● | 2 | 2 | 8 | ─ |
----
[<>]
{{tag>Z80 MSX Book_apguidefb on_github}}