Instruções do Z80
Você está em: MarMSX >> Cursos >> Assembly Z80
1. Flags
- S - Flag de sinal (Bit 7)
- Z - Flag de zero (Bit 6)
- HC - Half carry (Bit 4)
- P/V - Paridade / Estouro (Bit 2)
- N - Flag de Soma / Subtração (Bit 1)
- CY - Flag de carry (Bit 0)
Legenda para símbolos do flag:
- - → Flag não afetado
- * → Flag afetado
- 0 → Flag resetado
- 1 → Flag setado
- ? → Desconhecido
2. Símbolos para registradores
- b - Um bit qualquer (0 a 7)
- cc - Condição (C,M,NC,NZ,P,PE,PO,Z)
- d - Expressão de um byte (-128 a +127)
- dst - Destino: s, ss, [BC], [DE], [HL], [nn]
- e - Expressão de um byte (-126 a +129)
- m - Qualquer registrador r, [HL] ou [xx+d]
- n - Expressão de um byte (0 a 255)
- nn - Expressão de dois bytes (0 a 65535)
- pp - Par de registradores: BC, DE, IX ou SP
- qq - Par de registradores: AF, BC, DE ou HL
- qq' - Par de registradores alternativos: AF, BC, DE ou HL
- r - Registrador: A, B, C, D, E, H ou L
- rr - Par de registradores: BC, DE, IY ou SP
- s - Qualquer registrador r, valor n, [HL] ou [xx+d]
- src - Fonte: s, ss, [BC], [DE], [HL], nn, [nn]
- ss - Par de registradores: BC, DE, HL ou SP
- xx - Registrador de índice: IX ou IY
3. Endereçamentos
- n - Endereçamento imediato
- nn - Endereçamento imediato extendido
- e - Endereço relativo (PC = PC + 2 + offset)
- [nn] - Endereçamento extendido
- [xx+d] - Endereçamento indexado
- r - Endereçamento de registro
- [rr] - Endereçamento de registro indireto
- - Endereço implícito
- b - Endereçamento de bit
- p - Endereçamento "Modified page zero" - ver RST
4. Símbolos aritméticos
- + - * / ^ → soma/subtração/multiplicação/divisão/expoente
- & ~ v x → operadores lógicos E/OU/OU inclusivo/OU exclusivo
- <- -> → Rotação esquerda/direita
- [ ] → Endereçamento indireto
- [ ]+ -[ ] → Endereçamento indireto com auto incremento/decremento
- { } → Combinação de operandos
- # → Também: BC = BC-1, DE = DE-1
- ## → Apenas os 4 bits mais baixos do acumulador A são usados
5. Conjunto de instruções
Mnemônico |
SZHPNC |
Tipo |
Descrição |
Notas |
ADC A,s |
***V0* |
Aritmética |
Add with Carry |
A=A+s+CY |
ADC HL,ss |
**?V0* |
Aritmética |
Add with Carry |
HL=HL+ss+CY |
ADD A,s |
***V0* |
Aritmética |
Add |
A=A+s |
ADD HL,ss |
--?-0* |
Aritmética |
Add |
HL=HL+ss |
ADD IX,pp |
--?-0* |
Aritmética |
Add |
IX=IX+pp |
ADD IY,rr |
--?-0* |
Aritmética |
Add |
IY=IY+rr |
AND s |
***P00 |
Lógica |
Logical AND |
A=A&s |
BIT b,m |
?*1?0- |
Lógica |
Test Bit |
m&{2^b} |
CALL cc,nn |
------ |
Desvio |
Conditional Call |
If cc CALL |
CALL nn |
------ |
Desvio |
Unconditional Call |
-[SP]=PC,PC=nn |
CCF |
--?-0* |
Lógica |
Complement Carry Flag |
CY=~CY |
CP s |
***V1* |
Lógica |
Compare |
A-s |
CPD |
****1- |
Lógica |
Compare and Decrement |
A-[HL],HL=HL-1,BC=BC-1 |
CPDR |
****1- |
Lógica |
Compare, Dec., Repeat |
CPD till A=[HL]or BC=0 |
CPI |
****1- |
Lógica |
Compare and Increment |
A-[HL],HL=HL+1,BC=BC-1 |
CPIR |
****1- |
Lógica |
Compare, Inc., Repeat |
CPI till A=[HL]or BC=0 |
CPL |
--1-1- |
Lógica |
Complement |
A=~A |
DAA |
***P-* |
Aritmética |
Decimal Adjust Acc. |
A=BCD format |
DEC s |
***V1- |
Aritmética |
Decrement |
s=s-1 |
DEC xx |
------ |
Aritmética |
Decrement |
xx=xx-1 |
DEC ss |
------ |
Aritmética |
Decrement |
ss=ss-1 |
DI |
------ |
Pilha e outros |
Disable Interrupts |
|
DJNZ e |
------ |
Desvio |
Dec., Jump Non-Zero |
B=B-1 till B=0 |
EI |
------ |
Pilha e outros |
Enable Interrupts |
|
EX [SP],HL |
------ |
Transferência de dados |
Exchange |
[SP]<->HL |
EX [SP],xx |
------ |
Transferência de dados |
Exchange |
[SP]<->xx |
EX AF,AF' |
------ |
Transferência de dados |
Exchange |
AF<->AF' |
EX DE,HL |
------ |
Transferência de dados |
Exchange |
DE<->HL |
EXX |
------ |
Transferência de dados |
Exchange |
qq<->qq' (except AF) |
HALT |
------ |
Pilha e outros |
Halt |
|
IM n |
------ |
Pilha e outros |
Interrupt Mode |
(n=0,1,2) |
IN A,[n] |
------ |
Pilha e outros |
Input |
A=[n] |
IN r,[C] |
***P0- |
Pilha e outros |
Input |
r=[C] |
INC r |
***V0- |
Aritmética |
Increment |
r=r+1 |
INC [HL] |
***V0- |
Aritmética |
Increment |
[HL]=[HL]+1 |
INC xx |
------ |
Aritmética |
Increment |
xx=xx+1 |
INC [xx+d] |
***V0- |
Aritmética |
Increment |
[xx+d]=[xx+d]+1 |
INC ss |
------ |
Aritmética |
Increment |
ss=ss+1 |
IND |
?*??1- |
Aritmética |
Input and Decrement |
[HL]=[C],HL=HL-1,B=B-1 |
INDR |
?1??1- |
Aritmética |
Input, Dec., Repeat |
IND till B=0 |
INI |
?*??1- |
Aritmética |
Input and Increment |
[HL]=[C],HL=HL+1,B=B-1 |
INIR |
?1??1- |
Aritmética |
Input, Inc., Repeat |
INI till B=0 |
JP [HL] |
------ |
Desvio |
Unconditional Jump |
PC=[HL] |
JP [xx] |
------ |
Desvio |
Unconditional Jump |
PC=[xx] |
JP nn |
------ |
Desvio |
Unconditional Jump |
PC=nn |
JP cc,nn |
------ |
Desvio |
Conditional Jump |
If cc JP |
JR e |
------ |
Desvio |
Unconditional Jump |
PC=PC+e |
JR cc,e |
------ |
Desvio |
Conditional Jump |
If cc JR(cc=C,NC,NZ,Z) |
LD dst,src |
------ |
Transferência de dados |
Load |
dst=src |
LD A,i |
**0*0- |
Transferência de dados |
Load |
A=i(i=I,R) |
LDD |
--0*0- |
Transferência de dados |
Load and Decrement |
[DE]=[HL],HL=HL-1,# |
LDDR |
--000- |
Transferência de dados |
Load, Dec., Repeat |
LDD till BC=0 |
LDI |
--0*0- |
Transferência de dados |
Load and Increment |
[DE]=[HL],HL=HL+1,# |
LDIR |
--000- |
Transferência de dados |
Load, Inc., Repeat |
LDI till BC=0 |
NEG |
***V1* |
Lógica |
Negate |
A=-A |
NOP |
------ |
Pilha e outros |
No Operation |
|
OR s |
***P00 |
Lógica |
Logical inclusive OR |
A=Avs |
OTDR |
?1??1- |
Pilha e outros |
Output, Dec., Repeat |
OUTD till B=0 |
OTIR |
?1??1- |
Pilha e outros |
Output, Inc., Repeat |
OUTI till B=0 |
OUT [C],r |
------ |
Pilha e outros |
Output |
[C]=r |
OUT [n],A |
------ |
Pilha e outros |
Output |
[n]=A |
OUTD |
?*??1- |
Pilha e outros |
Output and Decrement |
[C]=[HL],HL=HL-1,B=B-1 |
OUTI |
?*??1- |
Pilha e outros |
Output and Increment |
[C]=[HL],HL=HL+1,B=B-1 |
POP xx |
------ |
Pilha e outros |
Pop |
xx=[SP]+ |
POP qq |
------ |
Pilha e outros |
Pop |
qq=[SP]+ |
PUSH xx |
------ |
Pilha e outros |
Push |
-[SP]=xx |
PUSH qq |
------ |
Pilha e outros |
Push |
-[SP]=qq |
RES b,m |
------ |
Lógica |
Reset bit |
m=m&{~2^b} |
RET |
------ |
Desvio |
Return |
PC=[SP]+ |
RET cc |
------ |
Desvio |
Conditional Return |
If cc RET |
RETI |
------ |
Desvio |
Return from Interrupt |
PC=[SP]+ |
RETN |
------ |
Desvio |
Return from NMI |
PC=[SP]+ |
RL m |
**0P0* |
Lógica |
Rotate Left |
m={CY,m}<- |
RLA |
--0-0* |
Lógica |
Rotate Left Acc. |
A={CY,A}<- |
RLC m |
**0P0* |
Lógica |
Rotate Left Circular |
m=m<- |
RLCA |
--0-0* |
Lógica |
Rotate Left Circular |
A=A<- |
|
RLD |
**0P0- |
Lógica |
Rotate Left 4 bits |
{A,[HL]}={A,[HL]}<- ## |
RR m |
**0P0* |
Lógica |
Rotate Right |
m=->{CY,m} |
RRA |
--0-0* |
Lógica |
Rotate Right Acc. |
A=->{CY,A} |
RRC m |
**0P0* |
Lógica |
Rotate Right Circular |
m=->m |
RRCA |
--0-0* |
Lógica |
Rotate Right Circular |
A=->A |
RRD |
**0P0- |
Lógica |
Rotate Right 4 bits |
{A,[HL]}=->{A,[HL]} ## |
RST p |
------ |
Desvio |
Restart |
(p=0H,8H,10H,...,38H) |
SBC A,s |
***V1* |
Aritmética |
Subtract with Carry |
A=A-s-CY |
SBC HL,ss |
**?V1* |
Aritmética |
Subtract with Carry |
HL=HL-ss-CY |
SCF |
--0-01 |
Lógica |
Set Carry Flag |
CY=1 |
SET b,m |
------ |
Lógica |
Set bit |
m=mv{2^b} |
SLA m |
**0P0* |
Lógica |
Shift Left Arithmetic |
m=m*2 |
SRA m |
**0P0* |
Lógica |
Shift Right Arith. |
m=m/2 |
SRL m |
**0P0* |
Lógica |
Shift Right Logical |
m=->{0,m,CY} |
SUB s |
***V1* |
Aritmética |
Subtract |
A=A-s |
XOR s |
***P00 |
Lógica |
Logical Exclusive OR |
A=Axs |
Referências:
Instruções do Z80 adaptadas de: http://www.z80.info/z80-op.txt