Sistemas microprossessados

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