Guia Para o Assembly 80x86, De Gavin - Parte 2
-
Upload
airtonsampaio -
Category
Documents
-
view
214 -
download
0
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