Upload
carloscadu
View
8
Download
0
Embed Size (px)
Citation preview
Sistemas Microprocessados
satoutfpredubrhttp://pessoal.utfpr.edu.br/sato/
Assembly do 8051
satoutfpredubr
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, #1CADD A, #F2
mnemnicos
01110100000111000010010011110010
opcodes
AssemblyCLR C ;faz carry=0SUBB A, R0 ;subtrai R0 de AJZ IGUAL ;se R0=A salta para IGUALJC MAIOR ;se R0>A salta para MAIOR
MENOR: MOV R1, #01 ;sinaliza em R1 que R0ASJMP FIM
IGUAL: MOV R1, #00 ;sinaliza em R1 que R0=AFIM: ;segue em frente
ComentriosLabels
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 RESETRESET: LJMP INICIO ;SALTA PARA O INICIO
ORG 0100H ;INICIO DO PROGRAMAINICIO: MOV A, #040H ;INICIALIZA CONTADOR
MOV R0, #64 ;ENDERECO INICIALREPETE: MOV @R0, #TESTE ;ESCREVE CONSTANTE
INC R0 ;PRXIMO ENDEREODEC A ;DECREMENTA CONTADORCJNE A, #0, REPETE ;SE NAO TERMINOU REPETE
FINAL: JMP FINAL
Resultado do MontadorLOC OBJ LINE SOURCE0055 1 TESTE EQU 01010101B
2 0000 3 ORG 0000H0000 020100 4 RESET: LJMP INICIO
5 0100 6 ORG 0100H0100 7440 7 INICIO: MOV A, #040H0102 7840 8 MOV R0, #640104 7655 9 REPETE: MOV @ R0 , # 85 0106 08 10 INC R00107 14 11 DEC A0108 B400F9 12 CJNE A, #0, REPETE010B 80FE 13 FINAL: JMP FINAL
Pilha Pilha
Estrutura de dados do tipo LIFO, cujo topo apontado pelo registro SP
Utilizada para armazenamento temporriode 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 - PilhaPUSH ACC ;salva acumulador na pilhaPUSH PSW ;salva PSW na pilhaPUSH DPL ;salva DPTR na pilhaPUSH DPH
...
;sequencia de instrucoes...
POP DPH ;recupera DPTR da pilhaPOP DPLPOP PSW ;recupera PSW da pilhaPOP 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 - SubrotinaINICIO: MOV R0, #11H ;valor=11H
LCALL ENVIA ;chama subrotina ENVIAMOV R0, #22H ;valor=22HLCALL ENVIA ;chama subrotina ENVIASJMP INICIO ;retorna ao INICIO
ENVIA: ANL R0, #0FH ;zera nibble superiorORL R0, #30H ;forma codigo ASCIIMOV SBUF, R0 ;envia pela serialRET ;retorna da subrotina
Estruturas de Programao
Interrupes So funes (rotinas) chamadas por
hardware Possuem endereos fixos (vetores de
interrupo)
Exemplo - InterrupoTIMER0: PUSH ACC ;salva acumulador
PUSH PSW ;salva PSWMOV PSW, #00011000B ;banco 3
MOV A, P1 ;le port P1ANL A, #11000000B ;mascara MOV ESTADO, A ;guarda em ESTADO
POP PSW ;recupera PSWPOP ACC ;recupera ARETI ;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 DecisoCLR C ;faz carry=0SUBB A, R0 ;subtrai R0 de AJZ IGUAL ;se R0=A salta para IGUALJC MAIOR ;se R0>A salta para MAIOR
MENOR: MOV R1, #01 ;sinaliza em R1 que R0ASJMP FIM
IGUAL: MOV R1, #00 ;sinaliza em R1 que R0=AFIM: ;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=16LOOP1: ...
;sequencia de instrucoes...
DJNZ R0, LOOP1 ;repete se R0!=0
MOV A, #20H ;repeticoes=32LOOP2: ...
;sequencia de instrucoes...
DEC AJNZ LOOP2 ;repete se A!=0
Programa em Cvoid main(void){
unsigned char cont, soma=0;
for(cont=1; cont
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,#001H0005 ?FOR1:
; SOURCE LINE # 6 0005 E500 R MOV A,soma0007 2F ADD A,R70008 F500 R MOV soma,A
; SOURCE LINE # 5 000A 0F INC R7000B BF0AF7 CJNE R7,#00AH,?FOR1000E ?WHILE1:
; SOURCE LINE # 8 000E 80FE SJMP ?WHILE1
; FUNCTION main (END)
Instrues Carga
243MOV DPTR,#2000hMove 2 bytes p/ data pointer MOV DPTR,#dado16122MOV @R4,#0FhMove dado imediato p/ RAM indiretoMOV @Ri,#dado242MOV @R3,40hMove byte direto p/ RAM indiretoMOV @Ri,direto121MOV @R4,AMove acumulador p/ RAM indiretoMOV @Ri,A242MOV 40h,#100Move dado imediato p/ byte direto MOV direto,#dado242MOV 7Fh,@R0Move RAM indireto p/ byte direto MOV direto,@Ri243MOV 7Fh,30hMove byte direto p/ byte direto MOV direto,direto242MOV 7Fh,R1Move registro p/ byte direto MOV direto,Rn122MOV 7Fh,AMove acumulador p/ byte direto MOV direto,A122MOV R6,#200Move dado imediato p/ registroMOV Rn,#dado 242MOV R3,7FhMove byte direto p/ registroMOV Rn,direto 121MOV R7,AMove acumulador p/ registroMOV Rn,A 122MOV A,#20Move dado imediato p/ acumuladorMOV A,#dado121MOV A,@R4Move RAM indireto p/ acumuladorMOV A,@Ri122MOV A,7FhMove byte direto p/ acumuladorMOV A,direto121MOV A,R2Move registro p/ acumuladorMOV A,Rn
ClkBExemploDescrioInstruo
Instrues Carga
121XCHD A,@R0Troca nibble inferior da RAM com acumuladorXCHD A,@Ri
121XCH A,@R0Troca RAM indireto com AXCH A,@Ri122XCH A,48hTroca byte direto com AXCH A,direto242POP DPHRecupera byte direto da pilhaPOP direto242PUSH R0Move byte direto para pilhaPUSH direto
241MOVC A,@A+PCMove cdigo contido no endereo A+PC para o acumuladorMOVC A,@A+PC
241MOVC A,@A+DPTRMove cdigo contido no endereo A+DPTR para o acumuladorMOVC A,@A+DPTR
241MOVX @DPTR,AMove acumulador p/ RAM externa (end. 16 bits)MOVX @DPTR,A
241MOVX @R1,AMove acumulador p/ RAM externa (end. 8 bits)MOVX @Ri,A
241MOVX A,DPTRMove RAM externa (end. 16 bits) p/ acumuladorMOVX A,@DPTR
241MOVX A,@R1Move RAM externa (end. 8 bits) p/ acumuladorMOVX A,@Ri
ClkBExemploDescrioInstruo
Instrues Aritmticas
122ADD A,#15Subtrai dado imediato e borrow do acumuladorSUBB A,#dado
121ADD A,@R4Subtrai RAM indireto e borrow do acumuladorSUBB A,@Ri
122ADD A,50hSubtrai byte direto e borrow do acumuladorSUBB A,direto121ADD A,R2Subtrai registro e borrow do acumuladorSUBB A,Rn
122ADDC A,#15Soma dado imediato ao acumulador e ao carryADDC A,#dado
121ADDC A,@R4Soma RAM indireto ao acumulador e ao carryADDC A,@Ri
122ADDC A,50hSoma byte direto ao acumulador e ao carryADDC A,direto
121ADDC A,R2Soma registro ao acumulador e ao carryADDC A,Rn
122ADD A,#15Soma dado imediato ao acumuladorADD A,#dado
121ADD A,@R4Soma RAM indireto ao acumuladorADD A,@Ri122ADD A,50hSoma byte direto ao acumuladorADD A,direto121ADD A,R2Soma registro ao acumuladorADD A,Rn
ClkBExemploDescrioInstruo
Instrues Aritmticas
121DA AAjuste decimal do acumuladorDA A481DIV ABDivide A por BDIV AB
481MUL ABMultiplica A e BMUL AB
241INC DPTRIncrementa data pointerINC DPTR
121DEC @R1Decrementa RAM indiretoDEC @Ri
122DEC 50hDecrementa byte diretoDEC direto
121DEC R3Decrementa registroDEC Rn
121DEC ADecrementa acumuladorDEC A
121INC @R1Incrementa RAM indiretoINC @Ri
122INC 50hIncrementa byte diretoINC direto
121INC R3Incrementa registroINC Rn
121INC AIncrementa acumuladorINC A
ClkBExemploDescrioInstruo
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
243XRL 50h,#7FhXOR de byte direto com dado imediatoXRL direto,#dado122XRL 50h,AXOR de byte direto com acumulador XRL direto, A122XRL A,#15XOR do acumulador com dado imediato XRL A,#dado121XRL A,@R4XOR do acumulador com RAM indiretoXRL A,@Ri122XRL A,50hXOR do acumulador com byte direto XRL A,direto121XRL A,R2XOR do acumulador com registroXRL A,Rn243ORL 50h,#7FhOR de byte direto com dado imediatoORL direto,#dado122ORL 50h,AOR de byte direto com acumulador ORL direto, A122ORL A,#15OR do acumulador com dado imediato ORL A,#dado121ORL A,@R4OR do acumulador com RAM indiretoORL A,@Ri122ORL A,50hOR do acumulador com byte direto ORL A,direto
121ORL A,R2OR do acumulador com registroORL A,Rn243ANL 50h,#7FhAND de byte direto com dado imediatoANL direto,#dado122ANL 50h,AAND de byte direto com acumulador ANL direto, A122ANL A,#15AND do acumulador com dado imediato ANL A,#dado121ANL A,@R4AND do acumulador com RAM indiretoANL A,@Ri122ANL A,50hAND do acumulador com byte direto ANL A,direto121ANL A,R2AND do acumulador com registroANL A,Rn
ClkBExemploDescrioInstruo
Instrues Lgicas
121SWAP ATroca nibbles inferior e superiorSWAP A
121RRC ARotaciona acumulador direita com carryRRC A
121RR ARotaciona acumulador direitaRR A
121RLC ARotaciona acumulador esquerda com carryRLC A
121RL ARotaciona acumulador esquerdaRL A121CPL AComplementa acumuladorCPL A121CLR ALimpa acumuladorCLR A
ClkBExemploDescrioInstruo
Afetam flag C : RRC; RLC
Instrues Booleanas
242MOV P1.0,CMove carry p/ bit diretoMOV bit,C
122MOV C,P1.0Move bit direto p/ carryMOV C,bit
242ORL C,P1.5OR do carry com bit direto complementadoORL C,/bit
242ORL C,P1.5OR do carry com bit diretoORL C,bit
242ANL C,P1.5AND do carry com bit direto complementadoANL C,/bit
242ANL C,P1.5AND do carry com bit diretoANL C,bit
122CPL P1.7Complementa bit diretoCPL bit
121CPL CComplementa flag de carryCPL C
122SETB P1.7Seta bit diretoSETB bit
121SETB CSeta flag de carrySETB C
122CLR P1.7Limpa bit diretoCLR bit
121CLR CLimpa flag de carryCLR C
ClkBExemploDescrioInstruo
Afetam flag C : SETB C; CLR C; CPL C; ANL e ORL (C,bit e C,/bit); MOV C,bit
Instrues Booleanas
242MOV P1.0,CMove carry p/ bit diretoMOV bit,C
122MOV C,P1.0Move bit direto p/ carryMOV C,bit
242ORL C,P1.5OR do carry com bit direto complementadoORL C,/bit
242ORL C,P1.5OR do carry com bit diretoORL C,bit
242ANL C,P1.5AND do carry com bit direto complementadoANL C,/bit
242ANL C,P1.5AND do carry com bit diretoANL C,bit
122CPL P1.7Complementa bit diretoCPL bit
121CPL CComplementa flag de carryCPL C
122SETB P1.7Seta bit diretoSETB bit
121SETB CSeta flag de carrySETB C
122CLR P1.7Limpa bit diretoCLR bit
121CLR CLimpa flag de carryCLR C
ClkBExemploDescrioInstruo
Afetam flag C : SETB C; CLR C; CPL C; ANL e ORL (C,bit e C,/bit); MOV C,bit
Instrues de Desvio
243JBC TF0,L1Desvia se bit direto setado e reseta bitJBC bit,relativo
242JNB P1.0,DESVIODesvia se bit direto no setadoJNB bit,relativo
242JB P1.0,LOOPDesvia se bit direto setadoJB bit,relativo
242JNC DESVIODesvia se flag de carry no setadoJNC relativo
242JC LOOPDesvia se flag de carry setadoJC relativo
ClkBExemploDescrioInstruo
Instrues de Desvio
242JNZ REPETEDesvia se acumulador diferente de zeroJNZ relativo
242JZ SAIDesvia se acumulador igual a zeroJZ relativo
241JMP @A+DPTRDesvio indireto relativo a DPTRJMP @A+DPTR
242SJMP LOOP1Desvio curto (relativo)SJMP relativo243LJMP SAIDADesvio longo LJMP end16bits
242AJMP LOOPDesvio absolutoAJMP end11bits
241RETIRetorno de rotina de interrupoRETI
241RETRetorno de subrotinaRET
243LCALL TECLASDesvio longo para subrotinaLCALL end16bits
242ACALL DISPDesvio absoluto para subrotinaACALL end11bits
ClkBExemploDescrioInstruo
Instrues de Desvio
121NOPSem operaoNOP
242DJNZ 5Fh,LOOPDecrementa byte direto e desvia se diferente de 0DJNZ direto,relativo
242DJNZ R0,LOOPDecrementa registro e desvia se diferente de 0DJNZ Rn,relativo
243CJNE @R2,#20,L3Compara dado c/ dado apontado por registrador, se diferente, desvia
CJNE @Rn,#dado,relativo
243CJNE R2,#20,L3Compara dado c/ registrador, se diferente, desviaCJNE Rn,#dado,relativo
243CJNE A,#10,L3Compara dado c/ acumulador, se diferente, desviaCJNE A,#dado,relativo
243CJNE A,30h,L3Compara byte direto c/ acumulador, se diferente, desviaCJNE A,direto,relativo
ClkBExemploDescrioInstruo
Afetam flag C : CJNE
Sobre o material
Essas transparncias foram baseadas em materiais elaborados pelos professores Hugo Vieira Neto, Eduardo Bertonha e Gabriel Kovalhuk