You are on page 1of 44

Sistemas

Microprocessados
sato<at>utfpr<dot>edu<dot>br
http://pessoal.utfpr.edu.br/sato/
Assembly do 8051
sato<at>utfpr<dot>edu<dot>br
Sobre o material
Essas transparncias foram baseadas
em materiais elaborados pelos
professores Hugo Vieira Neto,
Eduardo Bertonha e Gabriel
Kovalhuk
Assembly
Opcode (Operation code)
Instruo em linguagem de mquina
Carga, aritmtica, lgica, controle, etc
Operandos: registradores, pilha,
memria, interfaces E/S, etc
Assembly
Linguagem de baixo nvel
Mnemnicos
Assembly
Mnemnicos
Representam opcode
Mais compreensvel para humanos
Significado exato para mquina
Assembler (Montador)
mnemnicos opcodes
Labels (Referncias)
Nomes dados endereos, variveis,
etc
Assembly
Assembler
Memria
ISP, gravador, etc
MOV A, #1C
ADD A, #F2
mnemnicos
01110100
00011100
00100100
11110010
opcodes
Assembly
CLR C ;faz carry=0
SUBB A, R0 ;subtrai R0 de A
JZ IGUAL ;se R0=A salta para IGUAL
JC MAIOR ;se R0>A salta para MAIOR
MENOR: MOV R1, #01 ;sinaliza em R1 que R0<A
SJMP FIM
MAIOR: MOV R1, #02 ;sinaliza em R1 que R0>A
SJMP FIM
IGUAL: MOV R1, #00 ;sinaliza em R1 que R0=A
FIM: ;segue em frente
Comentrios
Labels
Assembly
Cdigos das instrues de 8 bits
Extenso varivel de 1 a 3 bytes
Tempo de execuo varivel de 1 a
4 ciclos de mquina
Mnemnicos seguem o padro Intel
Conjunto de Instrues
Transferncia de dados
MOV, MOVX, MOVC
PUSH, POP
XCH, XCHD
Aritmticas
ADD, ADDC, SUBB
INC, DEC
MUL, DIV
DA
Conjunto de Instrues
Lgicas
ANL, ORL, XRL, CLR, CPL,
RL, RLC, RR, RRC, SWAP
Booleanas (bits)
CLR, SETB, CPL, ANL, ORL
MOV
Conjunto de Instrues
Desvio
ACALL, LCALL, RET, RETI
AJMP, LJMP, SJMP, JMP
JZ, JNZ, JC, JNC, JB, JNB, JBC
CJNE, DJNZ
NOP
Modos de Endereamento
Endereamento Direto
MOV A, 25h
Move para A o contedo de da
posio de memria 25h
Endereamento por Constante
Imediata
MOV A, #25h
Move para A o dado imediato 25h (#)
Modos de Endereamento
Endereamento Indireto
MOV A, @R1
Move para A o contedo da posio de
memria apontada por R1 (@)
Endereamento via Registrador
MOV A, R1
Move para A o contedo de R1
Modos de Endereamento
Endereamento Indexado
MOVX A, @DPTR
Move para A o contedo da posio de
memria apontada por DPTR
MOVC A, @A+DPTR
Move para A o contedo da posio de
memria apontada por A+DPTR
MOVC A, @A+PC
Move para A o contedo da posio de
memria apontada por A+PC
Notao dos Mnemnicos
Endereamento de dados
A - acumulador
B - registro especial B
Rn - R0 a R7 do banco em uso
direto - endereo da RAM interna
@Ri - R0 ou R1 como ponteiro da
RAM interna
@DPTR - DPTR como ponteiro da
ROM ou RAM externa
Notao dos Mnemnicos
Endereamento de dados (cont.)
#dado - constante de 8 bits
#dado16 - constante de 16 bits
Bit - flag, bit de controle ou de port de E/S
Endereamento de programa
end11 - endereo dentro de pgina de 2KB
end16 - endereo dentro do espao de
64KB
rel - destino relativo prxima instruo
(128 a +127)
Diretivas do Assembler
ORG exp
END exp
label: DB exp
label: DW exp
label: LONG exp
label: ASCII exp
label: EQU val
Programa em Assembly
TESTE EQU 01010101B ;CONSTANTE DE TESTE
ORG 0000H ;ENDERECO DE RESET
RESET: LJMP INICIO ;SALTA PARA O INICIO
ORG 0100H ;INICIO DO PROGRAMA
INICIO: MOV A, #040H ;INICIALIZA CONTADOR
MOV R0, #64 ;ENDERECO INICIAL
REPETE: MOV @R0, #TESTE ;ESCREVE CONSTANTE
INC R0 ;PRXIMO ENDEREO
DEC A ;DECREMENTA CONTADOR
CJNE A, #0, REPETE ;SE NAO TERMINOU REPETE
FINAL: JMP FINAL
Resultado do Montador
LOC OBJ LINE SOURCE
0055 1 TESTE EQU 01010101B
2
0000 3 ORG 0000H
0000 020100 4 RESET: LJMP INICIO
5
0100 6 ORG 0100H
0100 7440 7 INICIO: MOV A, #040H
0102 7840 8 MOV R0, #64
0104 7655 9 REPETE: MOV @ R0 , # 85
0106 08 10 INC R0
0107 14 11 DEC A
0108 B400F9 12 CJNE A, #0, REPETE
010B 80FE 13 FINAL: JMP FINAL
Pilha
Pilha
Estrutura de dados do tipo LIFO, cujo topo
apontado pelo registro SP
Utilizada para armazenamento temporrio
de dados e endereos de retorno de
subrotinas e interrupes
O programa em Assembly deve manter o
equilbrio da pilha, evitando o estouro da sua
capacidade
Exemplo - Pilha
PUSH ACC ;salva acumulador na pilha
PUSH PSW ;salva PSW na pilha
PUSH DPL ;salva DPTR na pilha
PUSH DPH
...
;sequencia de instrucoes
...
POP DPH ;recupera DPTR da pilha
POP DPL
POP PSW ;recupera PSW da pilha
POP ACC ;recupera acumulador da pilha
Estruturas de
Programao
Subrotinas
So funes (rotinas) chamadas por
software
teis quando uma seqncia de
operaes em um programa
repetidamente utilizada
Exemplo - Subrotina
INICIO: MOV R0, #11H ;valor=11H
LCALL ENVIA ;chama subrotina ENVIA
MOV R0, #22H ;valor=22H
LCALL ENVIA ;chama subrotina ENVIA
SJMP INICIO ;retorna ao INICIO
ENVIA: ANL R0, #0FH ;zera nibble superior
ORL R0, #30H ;forma codigo ASCII
MOV SBUF, R0 ;envia pela serial
RET ;retorna da subrotina
Estruturas de
Programao
Interrupes
So funes (rotinas) chamadas por
hardware
Possuem endereos fixos (vetores de
interrupo)
Exemplo - Interrupo
TIMER0: PUSH ACC ;salva acumulador
PUSH PSW ;salva PSW
MOV PSW, #00011000B ;banco 3
MOV A, P1 ;le port P1
ANL A, #11000000B ;mascara
MOV ESTADO, A ;guarda em ESTADO
POP PSW ;recupera PSW
POP ACC ;recupera A
RETI ;retorno da int
Estruturas de
Programao
Decises
Desviam o fluxo de execuo do programa
conforme determinada condio for
verdadeira ou falsa (IF - ELSE)
Exemplo - Estrutura de Deciso
CLR C ;faz carry=0
SUBB A, R0 ;subtrai R0 de A
JZ IGUAL ;se R0=A salta para IGUAL
JC MAIOR ;se R0>A salta para MAIOR
MENOR: MOV R1, #01 ;sinaliza em R1 que R0<A
SJMP FIM
MAIOR: MOV R1, #02 ;sinaliza em R1 que R0>A
SJMP FIM
IGUAL: MOV R1, #00 ;sinaliza em R1 que R0=A
FIM: ;segue em frente
Estruturas de
Programao
Repeties
Permitem a repetio de um conjunto de
aes (loop) enquanto determinada condio
for verdadeira ou falsa (FOR, WHILE, DO -
WHILE)
Exemplo - Estrutura de
Repetio
MOV R0, #16 ;repeticoes=16
LOOP1: ...
;sequencia de instrucoes
...
DJNZ R0, LOOP1 ;repete se R0!=0
MOV A, #20H ;repeticoes=32
LOOP2: ...
;sequencia de instrucoes
...
DEC A
JNZ LOOP2 ;repete se A!=0
Programa em C
void main(void)
{
unsigned char cont, soma=0;
for(cont=1; cont<10; cont++)
soma+=cont;
while(1);
} /* main*/
Resultado do Compilador
; FUNCTION main (BEGIN)
; SOURCE LINE # 3
0000 750000 R MOV soma,#000H
; R7 is assigned to cont
; SOURCE LINE # 5
0003 7F01 MOV R7,#001H
0005 ?FOR1:
; SOURCE LINE # 6
0005 E500 R MOV A,soma
0007 2F ADD A,R7
0008 F500 R MOV soma,A
; SOURCE LINE # 5
000A 0F INC R7
000B BF0AF7 CJNE R7,#00AH,?FOR1
000E ?WHILE1:
; SOURCE LINE # 8
000E 80FE SJMP ?WHILE1
; FUNCTION main (END)
Instrues Carga
24 3 MOV DPTR,#2000h Move 2 bytes p/ data pointer MOV DPTR,#dado16
12 2 MOV @R4,#0Fh Move dado imediato p/ RAM indireto MOV @Ri,#dado
24 2 MOV @R3,40h Move byte direto p/ RAM indireto MOV @Ri,direto
12 1 MOV @R4,A Move acumulador p/ RAM indireto MOV @Ri,A
24 2 MOV 40h,#100 Move dado imediato p/ byte direto MOV direto,#dado
24 2 MOV 7Fh,@R0 Move RAM indireto p/ byte direto MOV direto,@Ri
24 3 MOV 7Fh,30h Move byte direto p/ byte direto MOV direto,direto
24 2 MOV 7Fh,R1 Move registro p/ byte direto MOV direto,Rn
12 2 MOV 7Fh,A Move acumulador p/ byte direto MOV direto,A
12 2 MOV R6,#200 Move dado imediato p/ registro MOV Rn,#dado
24 2 MOV R3,7Fh Move byte direto p/ registro MOV Rn,direto
12 1 MOV R7,A Move acumulador p/ registro MOV Rn,A
12 2 MOV A,#20 Move dado imediato p/ acumulador MOV A,#dado
12 1 MOV A,@R4 Move RAM indireto p/ acumulador MOV A,@Ri
12 2 MOV A,7Fh Move byte direto p/ acumulador MOV A,direto
12 1 MOV A,R2 Move registro p/ acumulador MOV A,Rn
Clk B Exemplo Descrio Instruo
Instrues Carga
12 1 XCHD A,@R0
Troca nibble inferior da RAM com
acumulador
XCHD A,@Ri
12 1 XCH A,@R0 Troca RAM indireto com A XCH A,@Ri
12 2 XCH A,48h Troca byte direto com A XCH A,direto
24 2 POP DPH Recupera byte direto da pilha POP direto
24 2 PUSH R0 Move byte direto para pilha PUSH direto
24 1 MOVC A,@A+PC
Move cdigo contido no endereo A+PC
para o acumulador
MOVC A,@A+PC
24 1 MOVC A,@A+DPTR
Move cdigo contido no endereo
A+DPTR para o acumulador
MOVC A,@A+DPTR
24 1 MOVX @DPTR,A
Move acumulador p/ RAM externa (end.
16 bits)
MOVX @DPTR,A
24 1 MOVX @R1,A
Move acumulador p/ RAM externa (end. 8
bits)
MOVX @Ri,A
24 1 MOVX A,DPTR
Move RAM externa (end. 16 bits) p/
acumulador
MOVX A,@DPTR
24 1 MOVX A,@R1
Move RAM externa (end. 8 bits) p/
acumulador
MOVX A,@Ri
Clk B Exemplo Descrio Instruo
Instrues Aritmticas
12 2 ADD A,#15
Subtrai dado imediato e borrow do
acumulador
SUBB A,#dado
12 1 ADD A,@R4
Subtrai RAM indireto e borrow do
acumulador
SUBB A,@Ri
12 2 ADD A,50h Subtrai byte direto e borrow do acumulador SUBB A,direto
12 1 ADD A,R2 Subtrai registro e borrow do acumulador SUBB A,Rn
12 2 ADDC A,#15
Soma dado imediato ao acumulador e ao
carry
ADDC A,#dado
12 1 ADDC A,@R4
Soma RAM indireto ao acumulador e ao
carry
ADDC A,@Ri
12 2 ADDC A,50h Soma byte direto ao acumulador e ao carry ADDC A,direto
12 1 ADDC A,R2 Soma registro ao acumulador e ao carry ADDC A,Rn
12 2 ADD A,#15 Soma dado imediato ao acumulador ADD A,#dado
12 1 ADD A,@R4 Soma RAM indireto ao acumulador ADD A,@Ri
12 2 ADD A,50h Soma byte direto ao acumulador ADD A,direto
12 1 ADD A,R2 Soma registro ao acumulador ADD A,Rn
Clk B Exemplo Descrio Instruo
Instrues Aritmticas
12 1 DA A Ajuste decimal do acumulador DA A
48 1 DIV AB Divide A por B DIV AB
48 1 MUL AB Multiplica A e B MUL AB
24 1 INC DPTR Incrementa data pointer INC DPTR
12 1 DEC @R1 Decrementa RAM indireto DEC @Ri
12 2 DEC 50h Decrementa byte direto DEC direto
12 1 DEC R3 Decrementa registro DEC Rn
12 1 DEC A Decrementa acumulador DEC A
12 1 INC @R1 Incrementa RAM indireto INC @Ri
12 2 INC 50h Incrementa byte direto INC direto
12 1 INC R3 Incrementa registro INC Rn
12 1 INC A Incrementa acumulador INC A
Clk B Exemplo Descrio Instruo
Instrues Aritmticas
Afetam flag C e OV : ADD; ADDC;
SUBB; MUL; DIV
Afetam flag C : DA; RRC; RLC; SETB C;
CLR C; CPL C; ANL e ORL (C,bit e
C,/bit); MOV C,bit; CJNE
Instrues Lgicas
24 3 XRL 50h,#7Fh XOR de byte direto com dado imediato XRL direto,#dado
12 2 XRL 50h,A XOR de byte direto com acumulador XRL direto, A
12 2 XRL A,#15 XOR do acumulador com dado imediato XRL A,#dado
12 1 XRL A,@R4 XOR do acumulador com RAM indireto XRL A,@Ri
12 2 XRL A,50h XOR do acumulador com byte direto XRL A,direto
12 1 XRL A,R2 XOR do acumulador com registro XRL A,Rn
24 3 ORL 50h,#7Fh OR de byte direto com dado imediato ORL direto,#dado
12 2 ORL 50h,A OR de byte direto com acumulador ORL direto, A
12 2 ORL A,#15 OR do acumulador com dado imediato ORL A,#dado
12 1 ORL A,@R4 OR do acumulador com RAM indireto ORL A,@Ri
12 2 ORL A,50h OR do acumulador com byte direto ORL A,direto
12 1 ORL A,R2 OR do acumulador com registro ORL A,Rn
24 3 ANL 50h,#7Fh AND de byte direto com dado imediato ANL direto,#dado
12 2 ANL 50h,A AND de byte direto com acumulador ANL direto, A
12 2 ANL A,#15 AND do acumulador com dado imediato ANL A,#dado
12 1 ANL A,@R4 AND do acumulador com RAM indireto ANL A,@Ri
12 2 ANL A,50h AND do acumulador com byte direto ANL A,direto
12 1 ANL A,R2 AND do acumulador com registro ANL A,Rn
Clk B Exemplo Descrio Instruo
Instrues Lgicas
12 1 SWAP A Troca nibbles inferior e superior SWAP A
12 1 RRC A Rotaciona acumulador direita com carry RRC A
12 1 RR A Rotaciona acumulador direita RR A
12 1 RLC A Rotaciona acumulador esquerda com carry RLC A
12 1 RL A Rotaciona acumulador esquerda RL A
12 1 CPL A Complementa acumulador CPL A
12 1 CLR A Limpa acumulador CLR A
Clk B Exemplo Descrio Instruo
Afetam flag C : RRC; RLC
Instrues Booleanas
24 2 MOV P1.0,C Move carry p/ bit direto MOV bit,C
12 2 MOV C,P1.0 Move bit direto p/ carry MOV C,bit
24 2 ORL C,P1.5 OR do carry com bit direto complementado ORL C,/bit
24 2 ORL C,P1.5 OR do carry com bit direto ORL C,bit
24 2 ANL C,P1.5
AND do carry com bit direto
complementado
ANL C,/bit
24 2 ANL C,P1.5 AND do carry com bit direto ANL C,bit
12 2 CPL P1.7 Complementa bit direto CPL bit
12 1 CPL C Complementa flag de carry CPL C
12 2 SETB P1.7 Seta bit direto SETB bit
12 1 SETB C Seta flag de carry SETB C
12 2 CLR P1.7 Limpa bit direto CLR bit
12 1 CLR C Limpa flag de carry CLR C
Clk B Exemplo Descrio Instruo
Afetam flag C : SETB C; CLR C; CPL C; ANL e ORL (C,bit e
C,/bit); MOV C,bit
Instrues Booleanas
24 2 MOV P1.0,C Move carry p/ bit direto MOV bit,C
12 2 MOV C,P1.0 Move bit direto p/ carry MOV C,bit
24 2 ORL C,P1.5 OR do carry com bit direto complementado ORL C,/bit
24 2 ORL C,P1.5 OR do carry com bit direto ORL C,bit
24 2 ANL C,P1.5
AND do carry com bit direto
complementado
ANL C,/bit
24 2 ANL C,P1.5 AND do carry com bit direto ANL C,bit
12 2 CPL P1.7 Complementa bit direto CPL bit
12 1 CPL C Complementa flag de carry CPL C
12 2 SETB P1.7 Seta bit direto SETB bit
12 1 SETB C Seta flag de carry SETB C
12 2 CLR P1.7 Limpa bit direto CLR bit
12 1 CLR C Limpa flag de carry CLR C
Clk B Exemplo Descrio Instruo
Afetam flag C : SETB C; CLR C; CPL C; ANL e ORL (C,bit e
C,/bit); MOV C,bit
Instrues de Desvio
24 3 JBC TF0,L1 Desvia se bit direto setado e reseta bit JBC bit,relativo
24 2 JNB P1.0,DESVIO Desvia se bit direto no setado JNB bit,relativo
24 2 JB P1.0,LOOP Desvia se bit direto setado JB bit,relativo
24 2 JNC DESVIO Desvia se flag de carry no setado JNC relativo
24 2 JC LOOP Desvia se flag de carry setado JC relativo
Clk B Exemplo Descrio Instruo
Instrues de Desvio
24 2 JNZ REPETE Desvia se acumulador diferente de zero JNZ relativo
24 2 JZ SAI Desvia se acumulador igual a zero JZ relativo
24 1 JMP @A+DPTR Desvio indireto relativo a DPTR JMP @A+DPTR
24 2 SJMP LOOP1 Desvio curto (relativo) SJMP relativo
24 3 LJMP SAIDA Desvio longo LJMP end16bits
24 2 AJMP LOOP Desvio absoluto AJMP end11bits
24 1 RETI Retorno de rotina de interrupo RETI
24 1 RET Retorno de subrotina RET
24 3 LCALL TECLAS Desvio longo para subrotina LCALL end16bits
24 2 ACALL DISP Desvio absoluto para subrotina ACALL end11bits
Clk B Exemplo Descrio Instruo
Instrues de Desvio
12 1 NOP Sem operao NOP
24 2 DJNZ 5Fh,LOOP
Decrementa byte direto e desvia se
diferente de 0
DJNZ direto,relativo
24 2 DJNZ R0,LOOP
Decrementa registro e desvia se
diferente de 0
DJNZ Rn,relativo
24 3 CJNE @R2,#20,L3
Compara dado c/ dado apontado por
registrador, se diferente, desvia
CJNE
@Rn,#dado,relativo
24 3 CJNE R2,#20,L3
Compara dado c/ registrador, se
diferente, desvia
CJNE Rn,#dado,relativo
24 3 CJNE A,#10,L3
Compara dado c/ acumulador, se
diferente, desvia
CJNE A,#dado,relativo
24 3 CJNE A,30h,L3
Compara byte direto c/ acumulador, se
diferente, desvia
CJNE A,direto,relativo
Clk B Exemplo Descrio Instruo
Afetam flag C : CJNE
Sobre o material
Essas transparncias foram baseadas
em materiais elaborados pelos
professores Hugo Vieira Neto,
Eduardo Bertonha e Gabriel
Kovalhuk

You might also like