UTFPR – DAELN – Microcontroladores 1 – Prof. Cion
([email protected])
Conjunto de Instruções do 8051 – versão fev/2013
Instruções de Movimento de Dados
Instrução
Operando
Operação
MOV
A,Rn
A  Rn
A  M[direto]
MOV
A,direto
MOV
A,@Ri
A  M[Ri]
A  const
MOV
A,#const
MOV
Rn,A
Rn  A
Rn  M[direto]
MOV
Rn,direto
MOV
Rn,#const
Rn  const
M[direto]  A
MOV
direto,A
MOV
direto,Rn
M[direto]  Rn
M[direto]  M[direto]
MOV
direto,direto
MOV
direto,@Ri
M[direto]  M[Ri]
M[direto]  const
MOV
direto,#const
MOV
@Ri,A
M[Ri]  A
M[Ri]  M[direto]
MOV
@Ri,direto
MOV
@Ri,#const
M[Ri]  const
DPTR  const16
MOV
DPTR,#const16
MOVC
A,@A+DPTR
A  CM[A + DPTR]
A  CM[A + PC]
MOVC
A,@A+PC
MOVX
A,@Ri
A  XM[Ri]
A  XM[DPTR]
MOVX
A,@DPTR
MOVX
@Ri,A
XM[Ri]  A
XM[DPTR]  A
MOVX
@DPTR,A
PUSH
direto
SP  SP + 1; M[SP]  M[direto]
M[direto]  M[SP]; SP  SP - 1
POP
direto
XCH
A,Rn
A  Rn /*permuta bytes */
A  M[direto]
XCH
A,direto
XCH
A,@Ri
A  M[Ri]
Anls  M[Ri]nls /* A4  M[Ri]4, ... , A0  M[Ri]0 */
XCHD
A,@Ri
bytes
1
2
1
2
1
2
2
2
2
3
2
3
1
2
2
3
1
1
1
1
1
1
2
2
1
2
1
1
ciclos
1
1
1
1
1
2
1
1
2
2
2
2
1
2
1
2
2
2
2
2
2
2
2
2
1
1
1
1
Instruções de Aritméticas
Instrução
Operando
ADD
A,Rn
ADD
A,direto
ADD
A,@Ri
ADD
A,#const
ADDC
A,Rn
ADDC
A,direto
ADDC
A,@Ri
ADDC
A,#const
SUBB
A,Rn
SUBB
A,direto
SUBB
A,@Ri
SUBB
A,#const
INC
A
INC
Rn
INC
direto
INC
@Ri
DEC
A
DEC
Rn
DEC
direto
DEC
@Ri
INC
DPTR
MUL
AB
bytes
1
2
1
2
1
2
1
2
1
2
1
2
1
1
2
1
1
1
2
1
1
1
ciclos
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
4
Operação
A  A + Rn
A  A + M[direto]
A  A + M[Ri]
A  A + const
A  A + Rn + C
A  A + M[direto] + C
A  A + M[Ri] + C
A  A + const + C
A  A - Rn - C
A  A - M[direto] - C
A  A - M[Ri] - C
A  A - const - C
AA+1
Rn  Rn + 1
M[direto]  M[direto] + 1
M[Ri]  M[Ri] + 1
AA-1
Rn  Rn - 1
M[direto]  M[direto] - 1
M[Ri]  M[Ri] - 1
DPRT  DPTR + 1
A  (A*B)LSB e B  (A*B)MSB
1
DIV
DA
AB
A
A  quociente(A/B) e B  resto(A/B)
Ajuste Decimal do Acumulador
Instruções Lógicas e de Rotação
Instrução
Operando
Operação
A  A  Rn
ANL
A,Rn
ANL
A,direto
A  A  M[direto]
A  A  M[Ri]
ANL
A,@Ri
ANL
A,#const
A  A  const
M[direto]  M[direto]  A
ANL
direto,A
ANL
direto,#const
M[direto]  M[direto]  const
A  A  Rn
ORL
A,Rn
ORL
A,direto
A  A  M[direto]
A  A  M[Ri]
ORL
A,@Ri
ORL
A,#const
A  A  const
M[direto]  M[direto]  A
ORL
direto,A
ORL
direto,#const
M[direto]  M[direto]  const
A  A  Rn
XRL
A,Rn
XRL
A,direto
A  A  M[direto]
A  A  M[Ri]
XRL
A,@Ri
XRL
A,#const
A  A  const
M[direto]  M[direto]  A
XRL
direto,A
XRL
direto,#const
M[direto]  M[direto]  const
A0
CLR
A
CPL
A
A  /A
1
1
4
1
bytes
1
2
1
2
2
3
1
2
1
2
2
3
1
2
1
2
2
3
1
1
ciclos
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
2
1
1
RL
A
1
1
RLC
A
1
1
RR
A
1
1
RRC
A
1
1
SWAP
A
1
1
bytes
1
2
1
2
1
2
2
2
2
2
2
2
ciclos
1
1
1
1
1
1
2
2
2
2
1
2
2
2
2
2
3
2
3
2
3
2
Instruções Booleanas
Instrução
Operando
CLR
C
CLR
bit
SETB
C
SETB
bit
CPL
C
CPL
bit
ANL
C,bit
ANL
C,/bit
ORL
C,bit
ORL
C,/bit
MOV
C,bit
MOV
bit,C
JC
rel
JNC
rel
JB
bit,rel
JNB
bit,rel
JBC
bit,rel
Anms  Anls /* A7  A3, ..., A4  A0 */
Operação
C0
BM[bit]  0
C1
BM[bit]  1
C  /C
BM[bit]  /BM[bit]
C  C  BM[bit]
C  C  /BM[bit]
C  C  BM[bit]
C  C  /BM[bit]
C  BM[bit]
BM[bit]  C
Se (C == 1) PC  PC  rel
Senão PC  PC + 2
Se (C == 0) PC  PC  rel
Senão PC  PC + 2
Se (BM[bit] == 1) PC  PC  rel
Senão PC  PC + 2
Se (BM[bit] == 0) PC  PC  rel
Senão PC  PC + 2
Se (BM[bit] == 1) {BM[bit]  0; PC  PC  rel
Senão PC  PC + 2}
2
Instruções de Desvio
Instrução
Operando
ACALL
end16
LCALL
end16
RET
RETI
AJMP
LJMP
SJMP
JMP
end11
end16
rel
@A+DPTR
JZ
rel
JNZ
rel
CJNE
A,direto,rel
CJNE
A,#const,rel
CJNE
Rn,#const,rel
CJNE
@Ri,#const,rel
DJNZ
Rn,rel
DJNZ
direto,rel
NOP
Notação
Rn
direto
@Ri
#const
#const16
end16
end11
rel
bit
M
XM
CM
BM

+
*
/


Operação
SP  SP + 1; M[SP]  PClsb; SP  SP + 1; M[SP]  PCmsb;
PC  end11
SP  SP + 1; M[SP]  PClsb; SP  SP + 1; M[SP]  PCmsb;
PC  end16
PCmsb  M[SP]; SP  SP - 1; PClsb  M[SP]; SP  SP - 1
PCmsb  M[SP]; SP  SP - 1; PClsb  M[SP]; SP  SP - 1
PC  end11
PC  end16
PC  PC  rel
PC  A + DPTR
Se (A == 0) PC  PC  rel
Senão PC  PC + 2
Se (A != 0) PC  PC  rel
Senão PC  PC + 2
Se (A != M[direto]) PC  PC  rel
Senão PC  PC + 3
Se (A < M[direto]) C  1
Senão C  0
Se (A != const) PC  PC  rel
Senão PC  PC + 3
Se (A < const) C  1
Senão C  0
Se (Rn != const) PC  PC  rel
Senão PC  PC + 3
Se (Rn < const) C  1
Senão C  0
Se (M[Ri] != const) PC  PC  rel
Senão PC  PC + 3
Se (M[Ri] < const) C  1
Senão C  0
Rn  Rn –1; Se (Rn != 0) PC  PC  rel
Senão PC  PC + 2
M[direto]  M[direto] – 1; Se (M[direto] != 0 ) PC  PC  rel
Senão PC  PC + 2
/* Sem operação */
bytes
ciclos
2
2
3
2
1
1
2
3
2
1
2
2
2
2
2
2
2
2
2
2
3
2
3
2
3
2
3
2
2
2
3
2
1
1
Descrição
Rn = {R0,R1,R2,R3,R4,R5,R6,R7} do banco de registradores selecionado
Endereço de 8 bits da IRAM - direto=00..0FFH (00 .. 7FH  área de uso geral e 80H a 0FFH  área dos SRF)
Define de forma indireta um endereço da RAM interna. Ri é o registrador R0 ou o registrador R1 (Ri = {R0,R1})
Constante de 8 bits (0 a 255 ou de 0 a 0FFH)
Constante de 16 bits (0 a 65535 ou 0000 a 0FFFFH)
Endereço de 16 bits
Endereço de 11 bits
Endereço relativo de 8 bits (varia de –128 a +127)
Endereço direto do bit (RAM bit endereçável ou registrador bit endereçável)
Memória IRAM – M[00]..M[0FFH] – memória RAM interna
Memória RAM externa
Memória de Código (ou memória de programa)
Memória IRAM bit endereçável (00 a 7FH) ou registradores bit endereçáveis
Atribuição
Soma
Subtração
Multiplicação
Divisão (ou Inversão lógica)
Operação lógica E
Operação lógica OU
3

/

nls
nms
Operação lógica OU Exclusivo
Inversão lógica (ou divisão aritmética)
Permuta
Nibble menos significativo (b3,b2,b1,b0)
Nibble mais significativo (b7,b6,b5,b4)
4