[<>] ~~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}}