06_8086_Assembly

39
1 Microprocessadores Prof. Arthur Braga Tópicos n Assembly 8086 ¤ Formato de Dados ¤ Estrutura de um Programa Assembly ¤ Conjunto de Instruções de Movimento de Dados ¤ Conjunto de Instruções Aritméticas ¤ Conjunto de Instruções Lógicas ¤ Conjunto de Instruções de Deslocamento e Rotação ¤ Conjunto de Instruções de Controle do Programa (Desvios) ¤ MACROS

Transcript of 06_8086_Assembly

  • 1

    Microprocessadores

    Prof. Arthur Braga

    Tpicosn Assembly 8086

    Formato de Dados

    Estrutura de um Programa Assembly

    Conjunto de Instrues de Movimento de Dados

    Conjunto de Instrues Aritmticas

    Conjunto de Instrues Lgicas

    Conjunto de Instrues de Deslocamento e Rotao

    Conjunto de Instrues de Controle do Programa (Desvios)

    MACROS

  • 2

    Sintaxe do Assembly 8086

    Sintaxe do Assembly 8086

  • 3

    Sintaxe do Assembly 8086

    Sintaxe do Assembly 8086

    Como so os diferentes campos de uma linha de programa ?

  • 4

    Sintaxe do Assembly 8086

    O campo Rtulo:

    Sintaxe do Assembly 8086

  • 5

    Sintaxe do Assembly 8086

    Sintaxe do Assembly 8086

  • 6

    Formato de Dados

    Formato de dados

  • 7

    Formato de dados

    QUESTO: Como o montador trata 0Ah, Ah e Ah ?

    Formato de dadosTabela ASCII

    Como os dados podem ser declarados como variveis ou constantes ?

  • 8

    Formato de dados

    Formato de dados

  • 9

    Formato de dados

    Caso se queira trabalhar com valores constantes ?

    Pode-se utilizar a diretiva DUP para reservar espao na memria que seja mltiplodo tipo escolhido:

    text DW 10 DUP (W) ;reserva 20 bytes na memria e inicializa com o ASCII de Wtext DW 10 DUP (?) ;reserva 20 bytes na memria, sem inicializao

    Formato de dados

  • 10

    Formato de dadosTabela ASCII

    Variveis e constantes podem ser declaradas em qualquer ponto do programa ?

    Estrutura de um Programa

    Assembly

  • 11

    Estrutura de um Programa Assembly

    Modelo Descrio

    TINY Todos os registradores de Segmento (DS, CS, SS e ES) tm o mesmo valor.

    SMALL Cdigo em 1 segmento;Dados em 1 segmento

    MEDIUM Cdigo em mais de 1 segmento;Dados em 1 segmento

    COMPACT Cdigo em 1 segmento;Dados em mais de 1 segmento

    LARGECdigo em mais de 1 segmento;Dados em mais de 1 segmento;Nenhum array maior que 64 Kbytes

    HUGECdigo em mais de 1 segmento;Dados em mais de 1 segmento;Arrays maiores que 64 Kbytes

    Estrutura de um Programa Assembly

    ?

  • 12

    Estrutura de um Programa Assembly

    Estrutura de um Programa Assembly

  • 13

    Estrutura de um Programa Assembly

    Estrutura de um Programa Assembly

    OBS:

    ?

  • 14

    Conjunto de Instrues de

    Movimento de Dados

    Conjunto de Instrues de Movimento de Dados

  • 15

    Instrues de movimento de dados PUSH / POP Armazenar / recuperar dados da pilha de memria (LIFO)

    PUSH AX crescimento da pilha

    Conjunto de Instrues de Movimento de Dados

    PUSH AX aps a execuo da instruo o SP = SP 2.

    POP Executa a operao inversa do PUSH.

    POP BX

    Conjunto de Instrues de Movimento de Dados

    reduo da pilha

  • 16

    Carga de endereo efetivo. LEA (Load Effective Address)

    LEA BX, LIST ;carrega o offset da posio de memria da varivel LIST

    A diretiva OFFSET realiza a funo da instruo LEA. Exemplo:

    MOV BX, OFFSET LIST

    Conjunto de Instrues de Movimento de Dados

    LDS carrega a base do endereo em DS e o offset em um registrador LES carrega a base do endereo em ES e o offset em um registrador

    LDS BX, LIST

    Instrues de strings data transfers

    LODS, STOS e MOVS

    Flag de direo: a flag de direo seleciona autoincremento (D=0) ouautodecremento (D=1).

    CLD : faz D = 0STD : faz D = 1

    Registradores DI e SI: durante uma execuo de instruo de string, oacesso memria ocorre atravs de DI e SI (ou ambos).

    DI Offset para acesso a dados no Segmento ExtraSI Offset para acesso a dados no Segmento de Dados

    Conjunto de Instrues de Movimento de Dados

    Quando estas instrues podem ser teis, e qual a sintaxe delas ?

  • 17

    LODS Carrega AL ou AX com dado armazenado no SEGMENTO DEDADOS com offset dado por SI.

    Conjunto de Instrues de Movimento de Dados

    STOS Armazena AL ou AX em localizaes do SEGMENTO EXTRAendereadas por DI

    Conjunto de Instrues de Movimento de Dados

    STOS com REP O prefixo REP adicionado a uma instruo de stringprovoca a repetio da ao da instruo e decrementa CX de 1 aps cadarepetio. O final das repeties ocorre quando CX = 0.

    EXEMPLO: Considere que CX = 100,

    REP STOSB ; executa STOSB 100 vezes, DI incrementado ou; decrementado (a depender da flag D) e o contedo de; AL armazenado em um bloco de memria.

  • 18

    MOVS uma das mais teis instrues de strings, pois transfere dados entreposies de memria.

    Operao no segmento de dados envolve SI Operao no segmento extra envolve DI A instruo transfere 1 byte ou 1 word do segmento de dados endereadopor SI para o segmento extra endereado por DI.

    Exemploscrollup uma linhado vdeo

    Conjunto de Instrues de Movimento de Dados

    IN e OUT As instrues IN e OUT executam operaes de I/O. Nestas operaes oscontedos de AL ou AX so transferidos entre o dispositivo de I/O e omicroprocessador Formas:

    Fixed Port: o nmero da porta segue o cdigo da operao da instruoVariable Port: o nmero da porta esta armazenado no registrador DX

    Conjunto de Instrues de Movimento de Dados

  • 19

    Outras importantes instrues de transferncia de dados XCHG Troca o contedo entre registradores ou entre registradores eposies de memria.

    Conjunto de Instrues de Movimento de Dados

    Prefixo de Passagem de SegmentoPode ser adicionado a quase todas instrues em modo de endereamento memria, permitindo ao programador desviar do segmento padro.MOVAX, [DI] ;acessa o segmento de dados (default)MOVAX, ES:[DI] ;acessa o segmento extra

    Conjunto de Instrues de Movimento de Dados

  • 20

    Conjunto de Instrues

    Aritmticas

    Conjunto de Instrues Aritmticas

    Estas instrues afetam os flags.

  • 21

    Relembrando: Registrador de Flags

    Conjunto de Instrues Aritmticas

    Estas instrues afetam os flags.

    Adio com carry como o carry liga duas instrues de adio 16 bits em uma de 32 bit.

    SUM32 PROC NEARADD AX, CXADC BX, DXRET

    SUM32 ENDP

    Conjunto de Instrues Aritmticas

  • 22

    Subtrao com vem 1(borrow) SBB

    SUB AX, DISBB BX, SI

    Conjunto de Instrues Aritmticas

    Instruo de Comparao CMP A instruo CMP uma subtrao que afeta apenas os bits de flag. til para comparar o contedo de registradores ou posies de memria. So, geralmente, seguidas por instrues de salto

    CMP AL,10h ; compara AL com 10hJAE SUBER ; salta para SUBER se AL = 10h ou AL > 10h

    Conjunto de Instrues Aritmticas

  • 23

    Conjunto de Instrues Aritmticas

    Instrues de Multiplicao e Diviso Multiplicao

    Pode ser executado em byte ou word, pode considerar inteiros sinalizados (IMUL) ou inteiros no-sinalizado (MUL) sempre utiliza o ACUMULADOR. Apenas do 386 em diante que realizada multiplicao em 32 bits. O produto sempre double-width.

    Conjunto de Instrues Aritmticas

    Para 8 bits:

    resultado em AX

    Para 16 bits:

    resultado em DX e AX

  • 24

    Diviso Pode ser executado em byte ou word, considerando inteiros sinalizados (IDIV) ou inteiros no-sinalizado (DIV) sempre utiliza o ACUMULADOR como DIVIDENDO. Do 386 em diante, realiza diviso em 32 bits. O Dividendo sempre double-width, ou seja uma diviso de 8 bits divide um nmero de 16 bitspor um de 8 bits, uma diviso de 16 bits divide um nmero de 32 bits por um de 16 bits e umadiviso de 32 bits divide um nmero de 64 bits por um de 32 bits. Dois tipos de erros:

    Diviso por zero Overflow

    Conjunto de Instrues Aritmticas

    Para 8 bits:

    quociente em AL, e o resto para AH

    Para 16 bits (dividendo DX e AX):

    quociente em AX, e o resto para DX

    Conjunto de Instrues Lgicas

  • 25

    Conjunto de Instrues Lgicas

    EXEMPLO ?

    Conjunto de Instrues Lgicas

    Restou alguma operao Lgica Bsica ?

  • 26

    Conjunto de Instrues Lgicas

    Instruo NOTAceita um operando. Realiza a inverso lgica de todos os bits dooperando: o COMPLEMENTO 1.

    NOT operando

    Instruo NEGAceita um operando. Realiza a inverso aritmtica do operando: oCOMPLEMENTO 2. Muda o operando de positivo para negativo, ouvice-versa.

    NEG operando

    Instrues de test e teste de bit TEST

    A instruo de TEST executa uma operao AND. A diferena que a instruo AND modifica ooperando destino, enquanto TEST no o faz. A instruo TEST afeta apenas o Registrador de Flags.

    Normalmente testa um bit ou conjunto de bits. A flag ZF = 1 se o resultado do teste zero e ZF = 0 caso contrrio.

    Geralmente uma instruo TEST seguida por uma de salto.Exemplo: TEST AL,1 ;testa bit menos significativo

    JNZ RIGHT ;se bit menos significativo igual a 1, saltar para RIGHTTEST AL, 128 ;testa o bit mais significativoJNZ LEFT ;se bit mais significativo igual a 1, saltar para LEFT

    Conjunto de Instrues Lgicas

  • 27

    Conjunto de Instrues de

    Deslocamento e Rotao

    Deslocamento

    Conjunto de Instrues de Deslocamento e Rotao

  • 28

    Instrues que executaro mais rpido

    Conjunto de Instrues de Deslocamento e Rotao

    Rotao

    Conjunto de Instrues de Deslocamento e Rotao

  • 29

    Comparao de stringsSCAS (String scan) CMPS (String compare)

    SCAS compara (como a instruo CMP) o registrador AL com umbloco de 1 byte da memria (SCASB), ou AX com um bloco de 2 bytes(SCASW). A comparao feita com o contedo do Segmento Extra. Obit de flag D indica a direo da comparao.

    Pode ser usada com o prefixo REPNE (repeat while not equal) destaforma a instruo repetida at que CX = 0, ou o dado seja encontrado.

    Conjunto de Instrues de Deslocamento e Rotao

    EXEMPLO: Em uma seo de memria de 100 bytes, deseja-seencontrar 00H.

    CMPS compara duas sees de memria. Pode-se comparar bytes(CMPSB), ou palavras (2 bytes) (CMPSW). Os contedos de dados dosegmento de dados (indexado por SI) e dados do segmento extra (indexadospor DI) podem ser comparados. O flag D indica a direo da comparao.Utiliza-se normalmente em conjunto com: REPZ (repeat until zero), REPNZ(repeat until not zero), REPE (repeat while equal) e REPNE (repeat while notequal).

    Conjunto de Instrues de Deslocamento e Rotao

    EXEMPLO: Compara se duas sees de memria so iguais.

  • 30

    Conjunto de Instrues de

    Controle do Programa (Desvios)

    Grupo das instrues JMP (JuMP) Incondicionais e Condicionais.O Salto Incondicional pode ser de trs tipos: short, near e far.

    Short jump: executa salto para posies da memria localizadas entre -128 a127 byes relativo ao endereo que segue a instruo.

    O montador suporta endereamento em relao aoponteiro da instruo IP, usando $ +/-.

    EXEMPLO: JMP $+2 ; salta 2 posies que; seguem a posio do JMP

    Conjunto de Instrues de Controle do Programa

    Near jump: permite o salto entre +/- 32 Kbytes.

    Far jump: permite saltos inter-segmentos.

    Mas nem todo salto

    incondicional !

  • 31

    Saltos condicionais: Os saltos condicionais testam os bits do registrador de flags sinal (SF), zero (ZF), carry (CF), paridade (PF), overflow (OF).

    As operaes podem ser sinalizadas ou no: FF (255) nos nmeros no sinalizados maior que 00h, porm FF (-1) nos nmeros sinalizados menor que 00h.

    Conjunto de Instrues de Controle do Programa

    Quando nmeros sinalizados so comparados usa-se: JG, JL, JGE, JLE, JE e JNE Os termos greater e less se referem a nmeros sinalizados

    Quando nmeros no-sinalizados so comparados usa-se: JA, JB, JAE, JBE, JE e JNE Os termos above e below se referem a nmeros no-sinalizados

    Conjunto de Instrues de Controle do Programa

  • 32

    Instruo LOOP: uma combinao de decremento de CX com JNZ LOOP decrementa CX e se CX 0, salta para o endereo indicado pelo LABEL. LOOP usa CX

    Conjunto de Instrues de Controle do Programa

    Conjunto de Instrues de Controle do Programa

    PROCEDIMENTOS:Antes de apresentar as prximas instrues de Controle do Programa precisoformalizar o conceito de PROCEDIMENTO (ou PROCEDURE, em ingls). Oprocedimento, ou subrotina, um conjunto de instrues que realiza uma tarefaespecfica.Vantagens de utilizar procedimentos na programao Assembly:

    Quando o cdigo reutilizvel, salva espao de memria. Torna mais simples o desenvolvimento do programa por torn-lo modular. Realiza um SALTO no programa, mas permite realizar um RETORNO.

    Mas tambm h uma desvantagem: Consome uma parcela de tempo do processador para realizar o desvio para oprocedimento, e para retornar do procedimento.

    Como declarado um PROCEDIMENTO ?

  • 33

    Conjunto de Instrues de Controle do Programa

    PROCEDIMENTOS:

    NOME PROC NEAR / FAR

    instruo 1

    Instruo 2

    instruo N

    RET

    NOME ENDP

    M

    A instruo CALL que transfere a execuo do programa para o procedimento.

    EXEMPLO:

    CALL NOME.O endereo de retorno armazenado na PILHA

    Instruo RET: Remove um nmero de 16 bits (near return) ou 32 bits (far return) da pilha ecoloca em IP ou em IP e CS

    Conjunto de Instrues de Controle do Programa

  • 34

    O SEGMENTO DE PILHA fundamental para os compiladoresimplementarem PROCEDIMENTOS (SUB-ROTINAS). Estesegmento de memria, alm de armazenar o endereo de retorno, responsvel por receber os parmetros a serem manuseadospela subrotina, que so passados pelo procedimento que achamou.

    Conjunto de Instrues de Controle do Programa

    instruo

    instruo

    instruo de chamada (CALL)

    1a. instruo da subrotina

    instruo da subrotina

    instruo da subrotina

    instruo de retorno (RET)

    instruo seguinte chamada

    Segmento de cdigo

    Pilha

    retorno

    Conjunto de Instrues de Controle do Programa

  • 35

    E caso fosse um call far ?

    Conjunto de Instrues de Controle do Programa

    Conjunto de Instrues de Controle do Programa

    INTRODUO S INTERRUPES:Uma interrupo funciona como um CALL gerado por hardware (derivadoexternamente por um sinal nos pinos do processador relacionados a interrupes), oupor software (derivado da execuo de uma instruo ou de algum outro eventointerno). Nos dois casos, o programa interrompido, e feita a chamada a umprocedimento de atendimento interrupo.

    Como isso ocorre em interrupes por software ?(interrupes por hardware sero vistas mais frente na disciplina)

    O processador tem trs diferentes instrues de interrupo: INTO - interrupo de overflow, chama a interrupo 4 se O = 1. INT 3 - interrupo de breakpoint, usado para debugar o programa. INT nmero - o nmero indica o vetor de interrupo da tabela de vetores de

    interrupo.

    VETOR DE INTERRUPO ? TABELA DE VETORES DE INTERRUPO ?

  • 36

    Conjunto de Instrues de Controle do Programa

    INTRODUO S INTERRUPES:

    ? NOME PROC FARinstruo 1

    Instruo 2

    instruo N

    IRET

    NOME ENDP

    M

    Obs.: Como CALL, a instruo INT armazena CS eIP na pilha. Mas diferente de CALL, a instruo INTtambm armazena as flags na pilha.

    Grande nmero de funes ? Quais ? Como acess-las ?

    Conjunto de Instrues de Controle do Programa

  • 37

    Outras interrupes do DOS: Apndice G do Zelenovsky !

    Conjunto de Instrues de Controle do Programa

    MACROS

  • 38

    MACROS

    Macro um conjunto de instrues que realiza uma tarefa especfica, da mesmaforma que ocorre com um procedimento ou subrotina. A diferena que umprocedimento acessado via instruo CALL, enquanto uma macro inserida noprograma no ponto em que seu conjunto de instrues deve aparecer.

    Utiliza-se as diretivas MACRO e ENDM para delimitar incio e final de uma macro.

    EXEMPLO:

    NOME MACRO parametros

    instruo 1

    Instruo 2

    instruo N

    ENDM

    M

    Como o montador trata uma MACRO ?

    MACROS

    MOVE MACRO A, B

    PUSH AX

    MOV AX, B

    MOV A, AX

    POP AX

    ENDM

    M

    TRECHO DE PROGRAMA:

    MOVE VAR1, VAR2

    ADD CX, VAR1

    MOVE VAR3, VAR4

    ADD CX, VAR3

    M

    INTERPRETAO DO MONTADOR:

    MPUSH AXMOV AX, VAR2MOV VAR1, AXPOP AXADD CX, VAR1PUSH AXMOV AX, VAR4MOV VAR3, AXPOP AXADD CX, VAR3

    M

    Obs.: Diferente do procedimento, uma macro nodemanda tempo do processador para desviar oponto de execuo do programa.

  • 39

    Bibliografia Bsican Zelenovsky, Ricardo e Mendona, Alexandre, PC um

    guia prtico de Hardware e Interfaceamento, MZ EditoraLtda, 4a. edio, 2006. (http://www.mzeditora.com.br/)

    n Brey, Barry, The Intel Microprocessors - 8086/88, 286,386 and 486 - Architecture, Programming andInterfacing, Third Edition, PHI, 1994.

    Material da DisciplinaSIGAA - Sistema Integrado de Gesto de Atividades Acadmicas

    http://www.mzeditora.com.br/)