---------------------------------------------------------------- | | | | | Zilog | | | | ZZZZZZZ 88888 000 | | Z 8 8 0 0 | | Z 8 8 0 0 0 | | Z 88888 0 0 0 | | Z 8 8 0 0 0 | | Z 8 8 0 0 | | ZZZZZZZ 88888 000 | | | | Z80 MICROPROCESSOR Instruction Set Summary | | | | | | | | | | | | _________ _________ | | _| \__/ |_ | | <-- A11 |_|1 40|_| A10 --> | | _| |_ | | <-- A12 |_|2 39|_| A9 --> | | _| |_ | | <-- A13 |_|3 38|_| A8 --> | | _| |_ | | <-- A14 |_|4 37|_| A7 --> | | _| |_ | | <-- A15 |_|5 36|_| A6 --> | | _| |_ | | --> CLK |_|6 35|_| A5 --> | | _| |_ | | <--> D4 |_|7 34|_| A4 --> | | _| |_ | | <--> D3 |_|8 33|_| A3 --> | | _| |_ | | <--> D5 |_|9 32|_| A2 --> | | _| |_ | | <--> D6 |_|10 Z80 31|_| A1 --> | | _| |_ | | +5V |_|11 30|_| A0 --> | | _| |_ | | <--> D2 |_|12 29|_| GND | | _| |_ ____ | | <--> D7 |_|13 28|_| RFSH --> | | _| |_ __ | | <--> D0 |_|14 27|_| M1 --> | | _| |_ _____ | | <--> D1 |_|15 26|_| RESET <-- | | ___ _| |_ _____ | | --> INT |_|16 25|_| BUSRQ <-- | | ___ _| |_ ____ | | --> NMI |_|17 24|_| WAIT <-- | | ____ _| |_ ____ | | <-- HALT |_|18 23|_| BUSAK --> | | ____ _| |_ __ | | <-- MREQ |_|19 22|_| WR --> | | ____ _| |_ __ | | <-- IORQ |_|20 21|_| RD --> | | |______________________| | | | | | | | | | | | | | |Written by Jonathan Bowen | | Programming Research Group | | Oxford University Computing Laboratory | | 8-11 Keble Road | | Oxford OX1 3QD | | England | | | | Tel +44-865-273840 | | | |Created August 1981 | |Updated April 1985 | |Issue 1.3 Copyright (C) J.P.Bowen 1985| ---------------------------------------------------------------- ---------------------------------------------------------------- |Mnemonic |SZHPNC|Description |Notes | |----------+------+---------------------+----------------------| |ADC A,s |***V0*|Add with Carry |A=A+s+CY | |ADC HL,ss |**?V0*|Add with Carry |HL=HL+ss+CY | |ADD A,s |***V0*|Add |A=A+s | |ADD HL,ss |--?-0*|Add |HL=HL+ss | |ADD IX,pp |--?-0*|Add |IX=IX+pp | |ADD IY,rr |--?-0*|Add |IY=IY+rr | |AND s |***P00|Logical AND |A=A&s | |BIT b,m |?*1?0-|Test Bit |m&{2^b} | |CALL cc,nn|------|Conditional Call |If cc CALL | |CALL nn |------|Unconditional Call |-[SP]=PC,PC=nn | |CCF |--?-0*|Complement Carry Flag|CY=~CY | |CP s |***V1*|Compare |A-s | |CPD |****1-|Compare and Decrement|A-[HL],HL=HL-1,BC=BC-1| |CPDR |****1-|Compare, Dec., Repeat|CPD till A=[HL]or BC=0| |CPI |****1-|Compare and Increment|A-[HL],HL=HL+1,BC=BC-1| |CPIR |****1-|Compare, Inc., Repeat|CPI till A=[HL]or BC=0| |CPL |--1-1-|Complement |A=~A | |DAA |***P-*|Decimal Adjust Acc. |A=BCD format | |DEC s |***V1-|Decrement |s=s-1 | |DEC xx |------|Decrement |xx=xx-1 | |DEC ss |------|Decrement |ss=ss-1 | |DI |------|Disable Interrupts | | |DJNZ e |------|Dec., Jump Non-Zero |B=B-1 till B=0 | |EI |------|Enable Interrupts | | |EX [SP],HL|------|Exchange |[SP]<->HL | |EX [SP],xx|------|Exchange |[SP]<->xx | |EX AF,AF' |------|Exchange |AF<->AF' | |EX DE,HL |------|Exchange |DE<->HL | |EXX |------|Exchange |qq<->qq' (except AF)| |HALT |------|Halt | | |IM n |------|Interrupt Mode | (n=0,1,2)| |IN A,[n] |------|Input |A=[n] | |IN r,[C] |***P0-|Input |r=[C] | |INC r |***V0-|Increment |r=r+1 | |INC [HL] |***V0-|Increment |[HL]=[HL]+1 | |INC xx |------|Increment |xx=xx+1 | |INC [xx+d]|***V0-|Increment |[xx+d]=[xx+d]+1 | |INC ss |------|Increment |ss=ss+1 | |IND |?*??1-|Input and Decrement |[HL]=[C],HL=HL-1,B=B-1| |INDR |?1??1-|Input, Dec., Repeat |IND till B=0 | |INI |?*??1-|Input and Increment |[HL]=[C],HL=HL+1,B=B-1| |INIR |?1??1-|Input, Inc., Repeat |INI till B=0 | |JP [HL] |------|Unconditional Jump |PC=[HL] | |JP [xx] |------|Unconditional Jump |PC=[xx] | |JP nn |------|Unconditional Jump |PC=nn | |JP cc,nn |------|Conditional Jump |If cc JP | |JR e |------|Unconditional Jump |PC=PC+e | |JR cc,e |------|Conditional Jump |If cc JR(cc=C,NC,NZ,Z)| |LD dst,src|------|Load |dst=src | |LD A,i |**0*0-|Load |A=i (i=I,R)| |LDD |--0*0-|Load and Decrement |[DE]=[HL],HL=HL-1,# | |LDDR |--000-|Load, Dec., Repeat |LDD till BC=0 | |LDI |--0*0-|Load and Increment |[DE]=[HL],HL=HL+1,# | |LDIR |--000-|Load, Inc., Repeat |LDI till BC=0 | |NEG |***V1*|Negate |A=-A | |NOP |------|No Operation | | |OR s |***P00|Logical inclusive OR |A=Avs | |OTDR |?1??1-|Output, Dec., Repeat |OUTD till B=0 | |OTIR |?1??1-|Output, Inc., Repeat |OUTI till B=0 | |OUT [C],r |------|Output |[C]=r | |OUT [n],A |------|Output |[n]=A | |OUTD |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1| |OUTI |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1| |POP xx |------|Pop |xx=[SP]+ | |POP qq |------|Pop |qq=[SP]+ | |PUSH xx |------|Push |-[SP]=xx | |PUSH qq |------|Push |-[SP]=qq | |RES b,m |------|Reset bit |m=m&{~2^b} | |RET |------|Return |PC=[SP]+ | |RET cc |------|Conditional Return |If cc RET | |RETI |------|Return from Interrupt|PC=[SP]+ | |RETN |------|Return from NMI |PC=[SP]+ | |RL m |**0P0*|Rotate Left |m={CY,m}<- | |RLA |--0-0*|Rotate Left Acc. |A={CY,A}<- | |RLC m |**0P0*|Rotate Left Circular |m=m<- | |RLCA |--0-0*|Rotate Left Circular |A=A<- | ---------------------------------------------------------------- ---------------------------------------------------------------- |Mnemonic |SZHPNC|Description |Notes | |----------+------+---------------------+----------------------| |RLD |**0P0-|Rotate Left 4 bits |{A,[HL]}={A,[HL]}<- ##| |RR m |**0P0*|Rotate Right |m=->{CY,m} | |RRA |--0-0*|Rotate Right Acc. |A=->{CY,A} | |RRC m |**0P0*|Rotate Right Circular|m=->m | |RRCA |--0-0*|Rotate Right Circular|A=->A | |RRD |**0P0-|Rotate Right 4 bits |{A,[HL]}=->{A,[HL]} ##| |RST p |------|Restart | (p=0H,8H,10H,...,38H)| |SBC A,s |***V1*|Subtract with Carry |A=A-s-CY | |SBC HL,ss |**?V1*|Subtract with Carry |HL=HL-ss-CY | |SCF |--0-01|Set Carry Flag |CY=1 | |SET b,m |------|Set bit |m=mv{2^b} | |SLA m |**0P0*|Shift Left Arithmetic|m=m*2 | |SRA m |**0P0*|Shift Right Arith. |m=m/2 | |SRL m |**0P0*|Shift Right Logical |m=->{0,m,CY} | |SUB s |***V1*|Subtract |A=A-s | |XOR s |***P00|Logical Exclusive OR |A=Axs | |----------+------+--------------------------------------------| | F |-*01? |Flag unaffected/affected/reset/set/unknown | | S |S |Sign flag (Bit 7) | | Z | Z |Zero flag (Bit 6) | | HC | H |Half Carry flag (Bit 4) | | P/V | P |Parity/Overflow flag (Bit 2, V=overflow) | | N | N |Add/Subtract flag (Bit 1) | | CY | C|Carry flag (Bit 0) | |-----------------+--------------------------------------------| | n |Immediate addressing | | nn |Immediate extended addressing | | e |Relative addressing (PC=PC+2+offset) | | [nn] |Extended addressing | | [xx+d] |Indexed addressing | | r |Register addressing | | [rr] |Register indirect addressing | | |Implied addressing | | b |Bit addressing | | p |Modified page zero addressing (see RST) | |-----------------+--------------------------------------------| |DEFB n(,...) |Define Byte(s) | |DEFB 'str'(,...) |Define Byte ASCII string(s) | |DEFS nn |Define Storage Block | |DEFW nn(,...) |Define Word(s) | |-----------------+--------------------------------------------| | A B C D E |Registers (8-bit) | | AF BC DE HL |Register pairs (16-bit) | | F |Flag register (8-bit) | | I |Interrupt page address register (8-bit) | | IX IY |Index registers (16-bit) | | PC |Program Counter register (16-bit) | | R |Memory Refresh register | | SP |Stack Pointer register (16-bit) | |-----------------+--------------------------------------------| | b |One bit (0 to 7) | | cc |Condition (C,M,NC,NZ,P,PE,PO,Z) | | d |One-byte expression (-128 to +127) | | dst |Destination s, ss, [BC], [DE], [HL], [nn] | | e |One-byte expression (-126 to +129) | | m |Any register r, [HL] or [xx+d] | | n |One-byte expression (0 to 255) | | nn |Two-byte expression (0 to 65535) | | pp |Register pair BC, DE, IX or SP | | qq |Register pair AF, BC, DE or HL | | qq' |Alternative register pair AF, BC, DE or HL | | r |Register A, B, C, D, E, H or L | | rr |Register pair BC, DE, IY or SP | | s |Any register r, value n, [HL] or [xx+d] | | src |Source s, ss, [BC], [DE], [HL], nn, [nn] | | ss |Register pair BC, DE, HL or SP | | xx |Index register IX or IY | |-----------------+--------------------------------------------| | + - * / ^ |Add/subtract/multiply/divide/exponent | | & ~ v x |Logical AND/NOT/inclusive OR/exclusive OR | | <- -> |Rotate left/right | | [ ] |Indirect addressing | | [ ]+ -[ ] |Indirect addressing auto-increment/decrement| | { } |Combination of operands | | # |Also BC=BC-1,DE=DE-1 | | ## |Only lower 4 bits of accumulator A used | ----------------------------------------------------------------