Guia Para o Assembly 80x86, De Gavin - Parte 2

download Guia Para o Assembly 80x86, De Gavin - Parte 2

of 4

Transcript of Guia Para o Assembly 80x86, De Gavin - Parte 2

  • 7/25/2019 Guia Para o Assembly 80x86, De Gavin - Parte 2

    1/4

    16/12/2015 Guia para o Assembly 80x86, de Gavin - Parte 2

    http://w ww .ci n.ufpe.br /~ ar fs/Assem bl y/aposti las/Tutor ial %20Assem bl y%20- %20Gavi n/ASM 3.H TM 1/4

    Uma Introduo a Instrues Assembly

    Existem muitas instrues em assembly mas apenas por volta de vinte delas voc dever conhecer eutilizar muito freqentemente. A maioria das instrues so compostas por trs caracteres e possuemum operando ento uma vrgula e ento outro operando. Por exemplo, para copiar um dado para umregistrador voc utiliza a instruo MOV.

    mov ax,10 ; copia 10 para axmov bx,20 ; copia 20 para bxmov cx,30 ; copia 30 para cxmov dx,40 ; copia 40 para dx

    Observe que em assembly tudo que estiver aps um (ponto e vrgula) ignorado. Isto muito tilpara se colocar comentrios em seu cdigo.

    Push e Pop: Duas Instrues para manuseio da Pilha

    Voc j conhece a pilha mas no sabe como colocar e retirar dados dela. Existem duas instruessimples que voc precisa conhecer: push e pop. Eis a sintaxe para o seu uso:

    PUSH:Coloca dados no topo da pilha.Sintaxe:

    push dados

    POP:Recupera o dado do topo da pilha para um registrador especificado ou uma varivel.Sintaxe:

    pop registrador (ou varivel)

    Este exemplo de cdigo demonstra como utilizar as intrues push e pop

    push cx ; copia cx na pilhapush ax ; copia ax na pilhapop cx ; recupera valor do topo da pilha para cxpop ax ; recupera valor do topo da pilha para ax

    Veja que os valores de CX e AX sero trocados. H uma instruo para trocar o contedo de doisregistradores: XCHG, que reduziria o fragmento de cdigo anterior para "xchg ax,cx".

    Tipos de Operandos

    Existem trs tipos de operandos em assembly: imediato, registrador e memria. Imediato aquelevalor que ser conhecido na compilao e sempre ser o mesmo, por exemplo '20' ou 'A'. Umoperando do tipo registrador qualquer registrador de uso geral ou de ndice, por exemplo AX ou SI.Um operando do tipo memria uma varivel que est armazenada em memria e ser detalhadomais tarde.

    Algumas Instrues que voc precisar conhecer

    Esta uma lista de algumas instrues importantes que voc precisa conhecer antes de conseguirentender ou escrever programas em assembly.

    MOV:move um valor de um lugar para outro.

  • 7/25/2019 Guia Para o Assembly 80x86, De Gavin - Parte 2

    2/4

    16/12/2015 Guia para o Assembly 80x86, de Gavin - Parte 2

    http://w ww .ci n.ufpe.br /~ ar fs/Assem bl y/aposti las/Tutor ial %20Assem bl y%20- %20Gavi n/ASM 3.H TM 2/4

    Sintaxe:

    MOV destino, origem

    por exemplo:

    mov ax,10 ; move um valor imediato para axmov bx,cx ; move o valor de cx para bxmov dx,Number ; moves o valor de Number para dx

    INT:chama uma funo DOS ou BIOS que so subrotinas para fazer coisas para o que nocriaramos uma funo, por exemplo alterar o modo de vdeo, abrir um arquivo, etc.Sintaxe:

    INT nmero da interrupo

    Por exemplo:

    int 21h ; Chama servios do DOSint 10h ; Chama a interrupo de Vdeo da BIOS

    A maior parte das interrupes possuem mais de uma funo, significando que voc deve passar onmero da funo desejada. Este normalmente colocado em AH. Para imprimir uma mensagem natela do monitor tudo que voc precisa fazer isto:

    mov ah,9 ; nmero da subrotina 9int 21h ; chama a interrupo

    Mas primeiro voc deve especificar o que imprimir. Esta funo precisa que DS:DX seja um ponteirodo tipo far para onde a string estiver. A string deve ser terminada com um caracter cifro ($). Istoseria fcil se DS pudesse ser manipulado diretamente, para contornar isto ns teremos que usar AX.

    Este exemplo mostra como isto funciona:

    mov dx,OFFSET Message ; DX contm o offset da messagemmov ax,SEG Message ; AX contm o segmento da messagemmov ds,ax ; DS:DX aponta para a messagemmov ah,9 ; funo 9 exibe a stringint 21h ; chama servio do DOS

    As palavras OFFSET e SEG dizem ao montador que voc quer o segmento ou o offset da mensagemcolocado no registrador, no o contedo da mensagem. Agora que sabemos como preparar o cdigo

    para exibir a mensagem, precisaremos declarar a mensagem. No segmento de dados ns declaramos a

    mensagem da seguinte forma:

    Message DB "Hello World!$"

    Observe que a string est terminada com um cifro. O que significa 'DB'? DB a abreviao deDefinir Byte e a mensagem um conjunto de bytes (um caracter ASCII ocupa um byte). Dados

    podem ser declarados em vrios tamanhos: bytes (DB), words (DW) e double words (DD). Voc noprecisa se preocupar com double words por enquanto uma vez que voc precisa de um registrador de32 bits, tal como o EAX, para coloc-las.

    Aqui esto alguns exemplos de declarao de dados:

    Number1 db ?Number2 dw ?

    O sinal de interrogao (?) no final significa que o dado no iniciado, isto , ele no possui um valor

  • 7/25/2019 Guia Para o Assembly 80x86, De Gavin - Parte 2

    3/4

    16/12/2015 Guia para o Assembly 80x86, de Gavin - Parte 2

    http://w ww .ci n.ufpe.br /~ ar fs/Assem bl y/aposti las/Tutor ial %20Assem bl y%20- %20Gavi n/ASM 3.H TM 3/4

    definido no incio da execuo. Isto poderia ser escrito facilmente como:

    Number1 db 0Number2 dw 1

    Desta vez Number1 igual a 0 e Number2 igual a 1 quando o seu programa carregado. Seuprograma tambm ter um tamanho de 3 bytes.

    Se voc declarar uma varivel como uma word voc no poder mover o valor desta varivel para umregistrador de 8 bits e voc no poder declarar uma varivel como um byte e mover seu valor paraum registrador de 16 bits. Por exemplo:

    mov al,Number1 ; okmov ax,Number1 ; erro

    mov bx,Number2 ; okmov bl,Number2 ; erro

    Tudo o que voc dever lembrar que voc s pode colocar bytes dentro de registradores de 8 bits, ewords em registradores de 16 bits.

    Seu primeiro programa assembly

    Agora que voc conhece algumas instrues bsicas e um pouco sobre dados hora de dar umaolhada em um programa assembly completo que possa ser montado.

    Listagem 1: 1STPROG.ASM; Este um programa simples que exibe "Hello World!"; na tela do monitor.

    .model small.stack

    .data

    Message db "Hello World!$" ; messagem a ser exibida

    .code

    start:

    mov dx,OFFSET Message ; offset da Messagem est em DXmov ax,SEG Message ; segmento da Messagem est em AXmov ds,ax ; DS:DX aponta para a string

    mov ah,9 ; funo 9 exibe stringint 21h ; chama servio DOSmov ax,4c00h ; retorna ao DOSint 21h

    END start ;termina aqui

    Instrues de Montagem

    Existem algumas instrues para montar e ligar programas. Se voc tiver um montador que no oTASM ou o A86 ento consulte seu manual de instrues.

    Turbo Assembler

  • 7/25/2019 Guia Para o Assembly 80x86, De Gavin - Parte 2

    4/4

    16/12/2015 Guia para o Assembly 80x86, de Gavin - Parte 2

    http://w ww .ci n.ufpe.br /~ ar fs/Assem bl y/aposti las/Tutor ial %20Assem bl y%20- %20Gavi n/ASM 3.H TM 4/4

    tasm file.asmtlink file [/t]

    A opo /t cria um arquivo .COM . Isto s ir funcionar se for declarado o modelo de memria tiny noarquivo fonte.

    A86

    a86 file.asm

    Isto ir gerar o programa em um arquivo .COM . No importa qual seja o modelo de memria.

    Retornar para o Sumrio

    http://www.cin.ufpe.br/~arfs/Assembly/apostilas/Tutorial%20Assembly%20-%20Gavin/asm1.htm#toc