Vous êtes sur la page 1sur 149

Unversty of Guadaa|ara

Informaton Sstems Genera Coordnaton.


Cuture and Entertanment Web

|une 12th 1995
Copyrght(C)1995-1996
*****************************************************************************
* Este tutora fo traduzdo para o Portugus por |eferson Amara. *
* e-ma: amara@nf.ufsm.br *
*****************************************************************************
Este tutora tem o ntuto de apenas ntroduzr o etor ao mundo
da programacao em Lnguagem Assemby, nao tem, portanto e de forma
aguma,
pano de esgotar o assunto.
Copyrght (C) 1995-1996, Hugo Perez Perez.
Anyone may reproduce ths document, n whoe or n part,
provded that:
(1) any copy or repubcaton of the entre document must show Unversty
of
Guadaa|ara as the source, and must ncude ths notce; and
(2) any other use of ths matera must reference ths manua and Unversty
of Guadaa|ara, and the fact that the matera s copyrght by Hugo Perez
and s used by permsson.
****************************************************************************
T U T O R I A L D E L I N G U A G E M A S S E M B L Y
--------------- --- ----------------- ---------------
Contedo:
1.Introduo
2.Concetos Bscos
3.Programao Assemby
4.Instrues Assemby
5.Interrupes e gernca de arquvos
6.Macros e procedmentos
7.Exempos de programas
8.Bbografa


*****************************************************************************
CAPTULO 1: INTRODUO
Contedo:
1.1.O que h de novo neste matera
1.2.Apresentao
1.3.Por que aprender Assemby?
1.4.Ns precsamos da sua opno
--------------- // ---------------
1.1.O que h de novo neste matera:
Aps um ano da reazao da prmera verso do tutora, e atravs das
opnes recebdas por e-ma, resovemos ter por dsposo todos estes
comentros e sugestes. Esperamos que atravs deste novo matera
Assemby,
as pessoas que se mostrarem nteressadas possam aprender mas sobre o
seu
IBM PC. Esta nova edo do tutora ncu:
Uma seo competa sobre como usar o programa debug.
Mas exempos de programas.
Um motor de pesqusa, para quaquer tpco ou tem reaconado esta
nova verso.
Consderve reorganzao e revso do matera Assemby.
Em cada seo, h um nk para o Dconro On-ne de Computao de
Denns Howe.
1.2.Apresentao:
Este tutora destna-se queas pessoas que nunca tveram contato com a
Lnguagem Assemby.
O tutora est competamente focado em computadores com processadores
80x86
da fama Inte, e consderando que a base da nguagem o funconamento
dos recursos nternos do processador, os exempos descrtos no so
compatves com quaquer outra arqutetura.
As nformaes esto dspostas em undades ordenadas para permtr fc
acesso a cada tpco, bem como uma mehor navegao peo tutora.
Na seo ntrodutra so menconados aguns concetos eementares sobre
computadores e a Lnguagem Assemby em s.
1.3.Por que aprender Assemby?
A prmera razo para se trabahar com o assember a oportundade de
conhecer mehor o funconamento do seu PC, o que permte o
desenvovmento
de programas de forma mas consstente.
A segunda razo que voc pode ter um controe tota sobre o PC ao fazer
uso do assember.
Uma outra razo que programas assemby so mas rpdos, menores e
mas
poderosos do que os crados com outras nguagens.
Utmamente, o assember (montador) permte uma otmzao dea nos
programas, se|a no seu tamanho ou execuo.

1.4.Ns precsamos da sua opno:
Nosso ntuto oferecer um modo smpes para que voc consga aprender
Assemby por s mesmo. Por tanto, quaquer comentro ou sugesto ser
bem-vnda.

*****************************************************************************
CAPTULO 2: CONCEITOS BASICOS
Contedo:
2.1.Descro bsca de um sstema computacona.
2.2.Concetos bscos da Lnguagem Assemby
2.3.Usando o programa debug
--------------- // ---------------

Esta seo tem o propsto de fazer um breve comentro a respeto dos
prncpas componentes de um sstema computacona, o que r permtr ao
usuro uma mehor compreenso dos concetos propostos no decorrer do
tutora.

2.1.DESCRIO DE UM SISTEMA COMPUTACIONAL

Contedo:
2.1.1.Processador Centra
2.1.2.Memra Prncpa
2.1.3.Undades de Entrada e Sada
2.1.4.Undades de Memra Auxar

Sstema Computacona.
Chamamos de Sstema Computacona a competa confgurao de um
computador,
ncundo os perfrcos e o sstema operacona.

2.1.1.Processador Centra.
tambm conhecdo por CPU ou Undade Centra de Processamento, que
por sua
vez composta pea undade de controe e undade de gca e artmtca.
Sua funo consste na etura e escrta do contedo das cuas de
memra,
reguar o trfego de dados entre as cuas de memra e regstradores
especas, e decodfcar e executar as nstrues de um programa.
O processador tem uma sre de cuas de memra usadas com freqnca
e,
dessa forma, so partes da CPU. Estas cuas so conhecdas com o nome
de
regstradores. Um processador de um PC possu cerca de 14 regstradores.
Como os PCs tem sofrdo evouo veremos que podemos manpuar
regstradores
de 16 ou 32 bts.
A undade de gca e artmtca da CPU reaza as operaes reaconadas
ao
ccuo smbco e numrco. Tpcamente estas undades apenas so
capazes
de reazar operaes eementares, tas como: ado e subtrao de dos
nmeros nteros, mutpcao e dvso de nmero ntero, manuseo de
bts de regstradores e comparao do contedo de dos regstradores.
Computadores pessoas podem ser cassfcados peo que conhecdo como
tamanho da paavra, sto , a quantdade de bts que o processador capaz
de manusear de uma s vez.

2.1.2.Memra Prncpa.
um grupo de cuas, agora sendo fabrcada com sem-condutores, usada
para
processamentos geras, tas como a execuo de programas e o
armazenamento
de nformaes para operaes.
Cada uma das cuas pode conter um vaor numrco e capaz de ser
endereada, sto , pode ser dentfcada de forma snguar em reao s
outras cuas peo uso de um nmero ou endereo.
O nome genrco destas memras Random Access Memory ou RAM. A
prncpa
desvantagem deste tpo de memra o fato de que seus crcutos
ntegrados
perdem a nformao que armazenavam quando a energa etrca for
nterrompda, ou se|a, ea vot. Este fo o motvo que evou crao
de um outro tpo de memra cu|a nformao no perdda quando o
sstema
desgado. Estas memras receberam o nome de Read Ony Memory ou
ROM.
2.1.3.Undades de Entrada e Sada.
Para que o computador possa ser t para ns se faz necessro que o
processador se comunque com o exteror atravs de nterfaces que
permtem a
entrada e a sada de nformao entre ee e a memra. Atravs do uso
destas
comuncaes possve ntroduzr nformao a ser processada e mas
tarde
vsuazar os dados processados.
Agumas das mas comuns undades de entrada so o tecado e o mouse. As
mas
comuns undades de sada so a tea do montor e a mpressora.

2.1.4.Undades de Memra Auxar.
Consderando o ato custo da memra prncpa e tambm o tamanho das
apcaes atuamente, vemos que ea muto mtada. Logo, surgu a
necessdade da crao de dspostvos de armazenamento prtcos e
econmcos.
Estes e outros nconvenentes deram ugar s undades de memra auxar,
perfrcos. As mas comuns so as ftas e os dscos magntcos.
A nformao a armazenada ser dvdda em arquvos. Um arquvo feto
de
um nmero varve de regstros, geramente de tamanho fxo, podendo
conter
nformao ou programas.
--------------- // ---------------

2.2.CONCEITOS BASICOS
Contedo:
2.2.1.Informaes nos computadores
2.2.2.Mtodos de representao de dados

2.2.1.Informao no computador:
2.2.1.1.Undades de nformao
2.2.1.2.Sstemas numrcos
2.2.1.3.Convertendo nmeros bnros para decmas
2.2.1.4.Convertendo nmeros decmas para bnros
2.2.1.5.Sstema hexadecma

2.2.1.1.Undades de nformao
Para o PC processar a nformao, necessro que ea este|a em cuas
especas, chamadas regstradores.
Os regstradores so grupos de 8 ou 16 fp-fops.
Um fp-fop um dspostvo capaz de armazenar 2 nves de votagem, um
baxo, geramente 0.5 vots, e outro comumente de 5 vots. O nve baxo de
energa no fp-fop nterpretado como desgado ou 0, e o nve ato,
como gado ou 1. Estes estados so geramente conhecdos como bts, que
so
a menor undade de nformao num computador.
Um grupo de 16 bts conhecdo como paavra; uma paavra pode ser
dvdda
em grupos de 8 bts chamados bytes, e grupos de 4 bts chamados nbbes.
2.2.1.2.Sstemas numrcos
O sstema numrco que ns usamos daramente o decma, mas este
sstema
no convenente para mqunas, pos a as nformaes tm que ser
codfcadas de modo a nterpretar os estados da corrente (gado-desgado);
este modo de cdgo faz com que tenhamos que conhecer o ccuo
poscona
que nos permtr expressar um nmero em quaquer base onde
precsarmos
dee.
possve representar um determnado nmero em quaquer base atravs
da
segunte frmua:

Onde n a poso do dgto, ncando da dreta para a esquerda e
numerando de 0. D o dgto sobre o qua ns operamos e B a base
numrca
usada.

2.2.1.3.Convertendo nmeros bnros para decmas
Ouando trabahamos com a Lnguagem Assemby encontramos por acaso a
necessdade de converter nmeros de um sstema bnro, que usado em
computadores, para o sstema decma usado peas pessoas.
O sstema bnro baseado em apenas duas condes ou estados, estar
gado(1), ou desgado(0), portanto sua base dos.
Para a converso, podemos usar a frmua de vaor poscona:
Por exempo, se tvermos o nmero bnro 10011, tomamos cada dgto da
dreta para a esquerda e o mutpcamos pea base, eevando potnca
correspondente sua poso reatva:
Bnary: 1 1 0 0 1
Decma: 1*20 + 1*21 + 0*22 + 0*23 + 1*24
= 1 + 2 + 0 + 0 + 16 = 19 decma.
O caracter usado em computao como smboo para potnca e * para
a
mutpcao.
2.2.1.4.Convertendo nmeros decmas para bnro
H vros mtodos para se converter nmeros decmas para bnro;
apenas um
ser anazado aqu. Naturamente a converso com uma cacuadora
centfca
muto mas fc, mas nem sempre podemos contar com sso, ogo o mas
convenente , ao menos, sabermos uma frmua para faz-a.
O mtodo resume-se na apcao de dvses sucessvas por 2, mantendo o
resto como o dgto bnro e o resutado como o prxmo nmero a ser
dvddo.
Tomemos como exempo o nmero decma 43.
43/2=21 e o resto 1; 21/2=10 e o resto 1; 10/2=5 e o resto 0;
5/2=2 e o resto 1; 2/2=1 e o resto 0; 1/2=0 e o resto 1.
Para construr o equvaente bnro de 43, vamos pegar os restos obtdos
de
baxo para cma, assm temos 101011.
2.2.1.5.Sstema hexadecma
Na base hexadecma temos 16 dgtos, que vo de 0 a 9 e da etra A at a
F,
estas etras representam os nmeros de 10 a 15. Portanto contamos:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E, e F.
A converso entre nmeros bnros e hexadecmas fc. A prmera cosa
a fazer dvdr o nmero bnro em grupos de 4 bts, comeando da dreta
para a esquerda. Se no grupo mas dreta sobrarem dgtos, competamos
com zeros.
Tomando como exempo o nmero bnro 101011, vamos dvd-o em
grupos de 4
bts:
10;1011
Preenchendo o tmo grupo com zeros (o um mas esquerda):
0010;1011
A segur, tomamos cada grupo como um nmero ndependente e
consderamos o
seu vaor decma:
0010=2;1011=11
Entretanto, observa-se que no podemos representar este nmero como
211,
sto sera um erro, uma vez que os nmeros em hexa maores que 9 e
menores
que 16 so representados peas etras A,B,...,F. Logo, obtemos como
resutado:
2Bh, onde o "h" representa a base hexadecma.
Para a converso de um nmero hexadecma em bnro apenas
necessro
nverter os passos: tomamos o prmero dgto hexadecma e o convertemos
para bnro, a segur o segundo, e assm por dante.

--------------- // ---------------
2.2.2.Mtodos de representao de dados num computador.
2.2.2.1.Cdgo ASCII
2.2.2.2.Mtodo BCD
2.2.2.3.Representao de ponto futuante

2.2.2.1.Cdgo ASCII
ASCII sgnfca Amercan Standard Code for Informaton Interchange. Este
cdgo contm as etras do afabeto, dgtos decmas de 0 a 9 e aguns
smboos adconas como um nmero bnro de 7 bts, tendo o otavo bt
em
0, ou se|a, desgado.
Deste modo, cada etra, dgto ou caracter especa ocupa 1 byte na
memra
do computador.
Podemos observar que este mtodo de representao de dados muto
nefcente no aspecto numrco, uma vez que no formato bnro 1 byte no

sufcente para representar nmeros de 0 a 255, com o ASCII podemos


representar apenas um dgto.
Devdo a esta nefcnca, o cdgo ASCII usado, prncpamente, para a
representao de textos.

2.2.2.2.Mtodo BCD
BCD sgnfca Bnary Coded Decma.
Neste mtodo grupos de 4 bts so usados para representar cada dgto
decma de 0 a 9. Com este mtodo podemos representar 2 dgtos por byte
de
nformao.
Vemos que este mtodo vem a ser muto mas prtco para representao
numrca do que o cdgo ASCII. Embora anda menos prtco do que o
bnro,
com o mtodo BCD podemos representar dgtos de 0 a 99. Com o bnro,
vemos
que o acance maor, de 0 a 255.
Este formato (BCD) prncpamente usado na representao de nmeros
grandes, apcaes comercas, devdo s suas facdades de operao.

2.2.2.3.Representao de ponto futuante
Esta representao baseada em notao centfca, sto , representar um
nmero em 2 partes: sua base e seu expoente.
Por exempo o nmero decma 1234000, representado como 1.234*106,
observamos que o expoente r ndcar o nmero de casas que o ponto
decma
deve ser movdo para a dreta, a fm de obtermos o nmero orgna.
O expoente negatvo, por outro ado, ndca o nmero de casas que o ponto
decma deve se ocomover para a esquerda.

--------------- // ---------------
2.3.PROGRAMA DEBUG

Contedo:
2.3.1.Processo de crao de programas
2.3.2.Regstradores da CPU
2.3.3.Programa debug
2.3.4.Estrutura Assemby
2.3.5.Crando um programa assemby smpes
2.3.6.Armazenando e carregando os programas

2.3.1.Processo de crao de programas.
Para a crao de programas so necessros os seguntes passos:
* Desenvovmento do agortmo, estgo em que o probema a ser
souconado estabeecdo e a mehor souo proposta, crao de
dagramas esquemtcos reatvos mehor souo proposta.
* Codfcao do agortmo, o que consste em escrever o programa
em aguma nguagem de programao; nguagem assemby neste caso
especfco, tomando como base a souo proposta no passo anteror.
* A transformao para a nguagem de mquna, ou se|a, a crao
do programa ob|eto, escrto como uma seqnca de zeros e uns que
podem
ser nterpretados peo processador.
* O tmo estgo a emnao de erros detectados no programa
na fase de teste. A correo normamente requer a repeto de todos os
passos, com observao atenta.

2.3.2.Regstradores da CPU.
Para o propsto ddtco, vamos focar regstradores de 16 bts. A CPU
possu 4 regstradores nternos, cada um de 16 bts. So ees AX, BX, CX e
DX. So regstradores de uso gera e tambm podem ser usados como
regstradores de 8 bts. Para tanto devemos referenc-os como, por
exempo, AH e AL, que so, respectvamente, o byte hgh e o ow do
regstrador AX. Esta nomencatura tambm se apca para os regstradores
BX,
CX e DX.
Os regstradores, segundo seus respectvos nomes:
AX Regstrador Acumuador
BX Regstrador Base
CX Regstrador Contador
DX Regstrador de Dados
DS Regstrador de Segmento de Dados
ES Regstrador de Segmento Extra
SS Regstrador de Segmento de Pha
CS Regstrador de Segmento de Cdgo
BP Regstrador Apontador da Base
SI Regstrador de ndce Fonte
DI Regstrador de ndce Destno
SP Regstrador Apontador de Pha
IP Regstrador Apontador da Prxma Instruo
F Regstrador de Fag

2.3.3.Programa Debug.
Para a crao de um programa em assember exstem 2 opes: usar o
TASM -
Turbo Assember da Borand, ou o DEBUGGER. Nesta prmera seo vamos
usar o
debug, uma vez que podemos encontr-o em quaquer PC com o MS-DOS.
Debug pode apenas crar arquvos com a extenso .COM, e por causa das
caracterstcas deste tpo de programa, ees no podem exceder os 64 Kb, e
tambm devem ncar no endereo de memra 0100H dentro do segmento
especfco. mportante observar sso, pos deste modo os programas .COM
no so reocves.
Os prncpas comandos do programa debug so:
A Montar nstrues smbcas em cdgo de mquna
D Mostrar o contedo de uma rea da memra
E Entrar dados na memra, ncando num endereo especfco
G Rodar um programa executve na memra
N Dar nome a um programa
P Proceder, ou executar um con|unto de nstrues reaconadas
O Sar do programa debug
R Mostrar o contedo de um ou mas regstradores
T Executar passo a passo as nstrues
U Desmontar o cdgo de mquna em nstrues smbcas
W Gravar um programa em dsco
possve vsuazar os vaores dos regstradores nternos da CPU usando o
programa Debug. Debug um programa que faz parte do pacote do DOS, e
pode
ser encontrado normamente no dretro C:\DOS. Para nc-o, basta
dgtar Debug na nha de comando:
C:/>Debug |Enter|
-
Voc notar ento a presena de um hfen no canto nferor esquerdo da
tea.
No se espante, este o prompt do programa. Para vsuazar o contedo
dos
regstradores, expermente:
-r|Enter|
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0100 NV UP EI PL NZ NA PO
NC
0D62:0100 2E CS:
0D62:0101 803ED3DF00 CMP BYTE PTR |DFD3|,00
CS:DFD3=03
mostrado o contedo de todos os regstradores nternos da CPU; um modo
aternatvo para vsuazar um nco regstrador usar o camando "r"
segudo do parmetro que faz refernca ao nome do regstrador:
-rbx
BX 0000
:
Esta nstruo mostrar o contedo do regstrador BX e mudar o ndcador
do
Debug de "-" para ":"
Ouando o prompt assm se tornar, sgnfca que possve, embora no
obrgatra, a mudana do vaor contdo no regstrador, bastando dgtar o
novo vaor e pressonar |Enter|. Se voc smpesmente pressonar |Enter| o
vaor antgo se mantm.
2.3.4.Estrutura Assemby.
Nas nhas do cdgo em Lnguagem Assemby h duas partes: a prmera
o
nome da nstruo a ser executada; a segunda, os parmetros do comando.
Por
exempo:
add ah bh
Aqu "add" o comando a ser executado, neste caso uma ado, e "ah"
bem
como "bh" so os parmetros.
Por exempo:
mov a, 25
No exempo acma, estamos usando a nstruo mov, que sgnfca mover o
vaor 25 para o regstrador a.
O nome das nstrues nesta nguagem consttudo de 2, 3 ou 4 etras.
Estas nstrues so chamadas mnemncos ou cdgos de operao,
representando a funo que o processador executar.
As vezes nstrues aparecem assm:
add a,|170|
Os cochetes no segundo parmetro ndca-nos que vamos trabahar com o
contedo da cua de memra de nmero 170, ou se|a, com o vaor
contdo no
endereo 170 da memra e no com o vaor 170, sto conhecdo como
"endereamento dreto".

2.3.5.Crando um programa smpes em assemby.
No nos responsabzaremos pea m execuo ou possves danos
causados por
quasquer exempos que de agora em dante aparecero, uma vez que os
mesmos,
apesar de testados, so de carter ddtco. Vamos, ento, crar um
programa
para ustrar o que vmos at agora. Adconaremos dos vaores:
O prmero passo ncar o Debug, o que | vmos como fazer
anterormente.
Para montar um programa no Debug, usado o comando "a" (assembe);
quando
usamos este comando, podemos especfcar um endereo nca para o
nosso
programa como o parmetro, mas opcona. No caso de omsso, o
endereo
nca o especfcado peos regstradores CS:IP, geramente 0100h, o
oca em que programas com extenso .COM devem ncar. E ser este o
oca
que usaremos, uma vez que o Debug s pode crar este tpo de programa.
Embora neste momento no se|a necessro darmos um parmetro ao
comando "a",
sso recomendve para evtar probemas, ogo:
a 100|enter|
mov ax,0002|enter|
mov bx,0004|enter|
add ax,bx|enter|
nop|enter||enter|
O que o programa faz? Move o vaor 0002 para o regstrador ax, move o
vaor
0004 para o regstrador bx, adcona o contedo dos regstradores ax e bx,
guardando o resutado em ax e fnamente a nstruo nop (nenhuma
operao)
fnaza o programa.
No programa debug, a tea se parecer com:
C:\>debug
-a 100
0D62:0100 mov ax,0002
0D62:0103 mov bx,0004
0D62:0106 add ax,bx
0D62:0108 nop
0D62:0109
Entramos com o comando "t" para executar passo a passo as nstrues:
-t
AX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0103 NV UP EI PL NZ NA PO
NC
0D62:0103 BB0400 MOV BX,0004
Vemos o vaor 0002 no regstrador AX. Tecamos "t" para executar a
segunda
nstruo:
-t
AX=0002 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0106 NV UP EI PL NZ NA PO
NC
0D62:0106 01D8 ADD AX,BX
Tecando "t" novamente para ver o resutado da nstruo add:
-t
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000
DI=0000
DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0108 NV UP EI PL NZ NA PE
NC
0D62:0108 90 NOP
A possbdade dos regstradores conterem vaores dferentes exste, mas
AX
e BX devem conter os mesmos vaores acma descrtos.
Para sar do Debug usamos o comando "q" (qut).

2.3.6.Armazenando e carregando os programas.
No sera prtco ter que dgtar o programa cada vez que ncssemos o
Debug. Ao nvs dsso, podemos armazen-o no dsco. S que o mas
nteressante nsso que um smpes comando de savar cra um arquvo
com a
extenso .COM, ou se|a, executve - sem precsarmos efetuar os processos
de
montagem e gao, como veremos posterormente com o TASM.
Es os passos para savar um programa que | este|a na memra:
* Obter o tamnho do programa subtrando o endereo fna do
endereo nca, naturamente que no sstema hexadecma.
* Dar um nome ao programa.
* Coocar o tamanho do programa no regstrador CX.
* Mandar o debug gravar o programa em dsco.
Usando como exempo o segunte programa, vamos carear a da de como
reazar os passos acma descrtos:
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 nt 20
0C1B:010A
Para obter o tamanho de um programa, o comando "h" usado, | que ee
nos
mostra a ado e subtrao de dos nmeros em hexadecma. Para obter o
tamanho do programa em questo, damos como parmetro o vaor do
endereo
fna do nosso programa (10A), e o endereo nca (100). O prmero
resutado mostra-nos a soma dos endereos, o segundo, a subtrao.
-h 10a 100
020a 000a
O comando "n" permte-nos nomear o programa.
-n test.com
O comando "rcx" permte-nos mudar o contedo do regstrador CX para o
vaor
obtdo como tamanho do arquvo com o comando "h", neste caso 000a.
-rcx
CX 0000
:000a
Fnamente, o comando "w" grava nosso programa no dsco, ndcando
quantos
bytes gravou.
-w
Wrtng 000A bytes
Para | savar um arquvo quando carreg-o, 2 passos so necessros:
Dar o nome do arquvo a ser carregado.
Carreg-o usando o comando "" (oad).
Para obter o resutado correto destes passos, necessro que o programa
acma | este|a crado.
Dentro do Debug, escrevemos o segunte:
-n test.com
-
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
O tmo comando "u" usado para verfcar que o programa fo carregado
na
memra. O que ee faz desmontar o cdgo e mostr-o em assemby. Os
parmetros ndcam ao Debug os endereos nca e fna a serem
desmontados.
O Debug sempre carrega os programas na memra no endereo 100h,
conforme |
comentamos.
*****************************************************************************
CAPTULO 3: PROGRAMAO ASSEMBLY

Contedo:
3.1.Construndo programas em Assemby
3.2.Processo Assemby
3.3.Pequenos programas em Assemby
3.4.Tpos de nstrues
--------------- // ---------------

3.1.Construndo programas em Assemby.
3.1.1.Software necessro
3.1.2.Programao Assemby

3.1.1.SOFTWARE NECESSARIO
Para que possamos crar um programa, precsamos de agumas
ferramentas:
Prmero de um edtor para crar o programa fonte. Segundo de um
montador,
um programa que r transformar nosso fonte num programa ob|eto. E,
tercero, de um nker (gador) que r gerar o programa executve a
partr do programa ob|eto.
O edtor pode ser quaquer um que dspusermos. O montador ser o TASM
macro
assember da Borand, e o nker ser o TLINK, tambm da Borand.
Ns devemos crar os programas fonte com a extenso .ASM para que o
TASM
reconhea e o transforme no programa ob|eto, um "formato ntermedro"
do
programa, assm chamado porque anda no um programa executve e
to
pouco um programa fonte. O nker gera a partr de um programa .OB|, ou
da
combnao de vros dees, um programa executve, cu|a extenso
normamente .EXE, embora possa ser .COM dependendo da forma como for
montado
e gado.

3.1.2.PROGRAMAO ASSEMBLY
Para construrmos os programas com o TASM, devemos estruturar o fonte
de
forma dferencada ao que fazamos com o programa debug.
mportante ncur as seguntes dretvas assemby:
.MODEL SMALL
Defne o meo de memra a usar em nosso programa
.CODE
Defne as nstrues do programa, reaconado ao segmento de cdgo
.STACK
Reserva espao de memra para as nstrues de programa na pha
END
Fnaza um programa assemby
Vamos programar
Prmero passo
Use quaquer edtor para crar o programa fonte. Entre com as seguntes
nhas:
Prmero exempo
; use ; para fazer comentros em programas assemby
.MODEL SMALL ;modeo de memra
.STACK ;espao de memra para nstrues do programa na pha
.CODE ;as nhas seguntes so nstrues do programa
mov ah,01h ;move o vaor 01h para o regstrador ah
mov cx,07h ;move o vaor 07h para o regstrador cx
nt 10h ;nterrupo 10h
mov ah,4ch ;move o vaor 4ch para o regstrador ah
nt 21h ;nterrupo 21h
END ;fnaza o cdgo do programa
Este programa assemby muda o tamanho do cursor.
Segundo passo
Savar o arquvo com o segunte nome: exam1.asm
No esquecer de sav-o no formato ASCII.
Tercero passo
Usar o programa TASM para construr o programa ob|eto.
Exempo:
C:\>tasm exam1.asm
Turbo Assember Verson 2.0 Copyrght (c) 1988, 1990 Borand
Internatona
Assembng fe: exam1.asm
Error messages: None
Warnng messages: None
Passes: 1
Remanng memory: 471k
O TASM s pode crar programas no formato .OB|, que anda no pode ser
executado...
Ouarto passo
Usar o programa TLINK para crar o programa executve.
Exempo:
C:\>tnk exam1.ob|
Turbo Lnk Verson 3.0 Copyrght (c) 1987, 1990 Borand Internatona
C:\>
Onde exam1.ob| o nome do programa ntermedro, .OB|. O comando
acma
gera dretamente o arquvo com o nome do programa ntermedro e a
extenso
.EXE. opcona a coocao da extenso .ob| no comando.
Ounto passo
Executar o programa executve crado.
C:\>exam1|enter|
Lembre-se, este programa assemby muda o tamanho do cursor no DOS.
--------------- // ---------------

3.2.Processo Assemby.
3.2.1.Segmentos
3.2.2.Tabea de equvanca

3.2.1.SEGMENTOS
A arqutetura dos processadores x86 fora-nos a usar segmentos de
memra
para gerencar a nformao, o tamanho destes segmentos de 64Kb.
A razo de ser destes segmentos que, consderando que o tamanho
mxmo de
um nmero que o processador pode gerencar dado por uma paavra de
16 bts
ou regstrador, assm no sera possve acessar mas do que 65536 ocas
da
memra usando apenas um destes regstradores. Mas agora, se a memra
do PC
dvdda em grupos de segmentos, cada um com 65536 ocas, e podemos
usar
um endereo ou regstrador excusvo para encontrar cada segmento, e
anda
fazemos cada endereo de um especfco sot com dos regstradores, nos
possve acessar a quantdade de 4294967296 bytes de memra, que ,
atuamente, a maor memra que podemos nstaar num PC.
Desta forma, para que o montador se|a capaz de gerencar os dados, se faz
necessro que cada nformao ou nstruo se encontre na rea
correspondente ao seu segmento. O endereo do segmento fornecdo ao
montador peos regstradores DS, ES, SS e CS. Lembrando um programa no
Debug, observe:
1CB0:0102 MOV AX,BX
O prmero nmero 1CB0, corresponde ao segmento de memra que est
sendo
usado, o segundo uma refernca ao endereo dentro do segmento, um
desocamento dentro do segmento offset.
O modo usado para ndcar ao montador com quas segmentos vamos
trabahar
fazendo uso das dretvas .CODE, .DATA e .STACK.
O montador a|usta o tamanho dos segmentos tomando como base o
nmero de
bytes que cada nstruo assemby precsa, | que sera um desperdco de
memra usar segmentos nteros. Por exempo, se um programa precsa de
apenas 10Kb para armazenar dados, o segmento de dados sera apenas de
10Kb e
no de 64Kb, como podera acontecer se feto manuamente.

3.2.2.TABELAS DE EOUIVALENCIA
Cada uma das partes numa nha de cdgo assemby conhecda como
token,
por exempo:
MOV AX,Var
Aqu temos trs tokens, a nstruo MOV, o operador AX e o operador VAR.
O
que o montador faz para gerar o cdgo OB| er cada um dos tokens e
procurar a equvanca em cdgo de mquna em tabeas correspondentes,
se|a de paavras reservadas, tabea de cdgos de operao, tabea de
smboos, tabea de teras, onde o sgnfcado dos mnemncos e os
endereos dos smboos que usamos sero encontrados.
A maora dos montadores so de duas passagens. Em sntese na prmera
passagem temos a defno dos smboos, ou se|a, so assocados
endereos a
todas as nstrues do programa. Segundo este processo, o assember
MOV
e procura-o na tabea de cdgos de operao para encontrar seu
equvaente
na nguagem de mquna. Da mesma forma ee AX e encontra-o na
tabea
correspondente como sendo um regstrador. O processo para Var um
pouco
dferencado, o montador verfca que ea no uma paavra reservada,
ento
procura na tabea de smboos, encontrando-a ee desgna o endereo
correspondente, mas se no encontrou ee a nsere na tabea para que ea
possa receber um endereo na segunda passagem. Anda na prmera
passagem
executado parte do processamento das dretvas, mportante notar que as
dretvas no cram cdgo ob|eto. Na passagem dos so montadas as
nstrues, traduzndo os cdgos de operao e procurando os endereos, e

gerado o cdgo ob|eto.


H smboos que o montador no consegue encontrar, uma vez que podem
ser
decaraes externas. Neste caso o nker entra em ao para crar a
estrutura necessra a fm de gar as dversas possves partes de cdgo,
dzendo ao oader que o segmento e o token em questo so defndos
quando o
programa carregado e antes de ser executado.
--------------- // ---------------

3.3.Mas programas.
Outro exempo
Prmero passo
Use quaquer edtor e cre o segunte:
;exempo2
.mode sma
.stack
.code
mov ah,2h ;move o vaor 2h para o regstrador ah
mov d,2ah ;move o vaor 2ah para o regstrador d
;( o vaor ASCII do caractere *)
nt 21h ;nterrupo 21h
mov ah,4ch ;funo 4ch, sa para o sstema operacona
nt 21h ;nterrupo 21h
end ;fnaza o programa
Segundo passo
Savar o arquvo com o nome: exam2.asm
No esquecer de savar em formato ASCII.
Tercero passo
Usar o programa TASM para construr o programa ob|eto.
C:\>tasm exam2.asm
Turbo Assember Verson 2.0 Copyrght (c) 1988, 1990 Borand
Internatona
Assembng fe: exam2.asm
Error messages: None
Warnng messages: None
Passes: 1
Remanng memory: 471k
Ouarto passo
Usar o programa TLINK para crar o programa executve.
C:\>tnk exam2.ob|
Turbo Lnk Verson 3.0 Copyrght (c) 1987, 1990 Borand Internatona
C:\>
Ounto passo
Executar o programa:
C:\>exam2|enter|
*
C:\>
Este programa mprme o caracter * na tea.
Cque aqu para obter mas programas
--------------- // ---------------

3.4.Tpos de nstrues.
3.4.1.Movmento de dados
3.4.2.Operaes gcas e artmtcas
3.4.3.Satos, aos e procedmentos

3.4.1.MOVIMENTO DE DADOS
Em quaquer programa h necessdade de se mover dados na memra e
em
regstradores da CPU; h vros modos de se faz-o: pode-se copar os
dados
da memra para agum regstrador, de regstrador para regstrador, de um
regstrador para a pha, da pha para um regstrador, transmtr dados
para um dspostvo externo e vce-versa.
Este movmento de dados su|eto a regras e restres, entre eas:
*No possve mover dados de um oca da memra para outro
dretamente;
necessro prmero mover o dado do oca de orgem para um regstrador e
ento do regstrador para o oca de destno.
*No possve mover uma constante dretamente para um regstrador de
segmento; prmero deve-se mover para um regstrador.
possve mover bocos de dados atravs de nstrues movs, que copa
uma
cadea de bytes ou paavras; movsb copa n bytes de um oca para outro; e
movsw copa n paavras. A tma das duas nstrues toma os vaores dos
endereos defndos por DS:SI como o grupo de dados a mover e ES:DI como
a
nova ocazao dos dados.
Para mover dados h tambm estruturas chamadas phas, onde o dado
ntroduzdo com a nstruo push e extrado com a nstruo pop
Numa pha o prmero dado a entrar o tmo a sar, por exempo:
PUSH AX
PUSH BX
PUSH CX
Para retornar os vaores da pha referentes cada regstrador necessro
segur-se a ordem:
POP CX
POP BX
POP AX
Para a comuncao com dspostvos externos o comando de sada usado
para
o envo de nformaes a uma porta e o comando de entrada usado para
receber nformao de uma porta.
A sntaxe do comando de sada:
OUT DX,AX
Onde DX contm o vaor da porta que ser usada para a comuncao e AX
contm a nformao que ser envada.
A sntaxe do comando de entrada:
IN AX,DX
Onde AX o regstrador onde a nformao ser armazenada e DX contm o
endereo da porta de onde chegar a nformao.

3.4.2.OPERAES LOGICAS E ARITMTICAS
As nstrues de operaes gcas so: and, not, or e xor. Eas trabaham a
nve de bts em seus operadores.
Para verfcar o resutado das operaes usamos as nstrues cmp e test.
As nstrues usadas para operaes agbrcas so: para ado add, para
subtrao sub, para mutpcao mu e para dvso dv.
Ouase todas as nstrues de comparao so baseadas na nformao
contda
no regstrador de fag. Normamente os fags do regstrador que podem ser
manuseados dretamente peo programador so os da dreo de dados DF,
usado
para defnr as operaes sobre cadeas. Uma outro que pode tambm ser
manuseado o fag IF atravs das nstrues st e c, para atvar e
desatvar as nterrupes.

3.4.3.SALTOS, LOOPS E PROCEDIMENTOS
Satos ncondconas na escrta de programas em nguagem assemby so
dados pea nstruo |mp; um sato usado para modfcar a seqnca da
execuo das nstrues de um programa, envando o controe ao endereo
ndcado, ou se|a, o regstrador contador de programa recebe este novo
endereo.
Um oop, tambm conhecdo como nterao, a repeto de um processo
um
certo nmero de vezes at atngr a condo de parada.
*****************************************************************************
CAPTULO 4: INSTRUES ASSEMBLY
Contedo:
4.1.Instrues de operao de dados
4.2.Instrues gcas e artmtcas
4.3.Instrues de controe de processos
--------------- // ---------------

4.1. Instrues de operao de dados
Contedo:
4.1.1.Instrues de transfernca
4.1.2.Instrues de carga
4.1.3.Instrues de pha

4.1.1.Instrues de transfernca.
So usadas para mover o contedo dos operadores. Cada nstruo pode
ser
usada com dferentes modos de endereamento.
MOV
MOVS (MOVSB) (MOVSW)

INSTRUO MOV
Propsto: Transfernca de dados entre cuas de memra, regstradores e
o acumuador.
Sntaxe:
MOV Destno,Fonte
Destno o ugar para onde o dado ser movdo e Fonte o ugar onde o
dado
est.
Os dferentes movmentos de dados permtdos para esta nstruo so:
*Destno: memra. Fonte: acumuador
*Destno: acumuador. Fonte: memra
*Destno: regstrador de segmento. Fonte: memra/regstrador
*Destno: memra/regtrador. Fonte: regstrador de segmento
*Destno: regstrador. Fonte: regstrador
*Destno: regstrador. Fonte: memra
*Destno: memra. Fonte: regstrador
*Destno: regstrador. Fonte: dado medato
*Destno: memra. Fonte: dado medato
Exempo:
MOV AX,0006h
MOV BX,AX
MOV AX,4C00h
INT 21h
Este pequeno programa move o vaor 0006h para o regstrador AX, ento
ee
move o contedo de AX (0006h) para o regstrador BX, e fnamente move o
vaor 4C00h para o regstrador AX para termnar a execuo com a opo
4C da
nterrupo 21h.

INSTRUES MOVS (MOVSB) (MOVSW)
Propsto: Mover byte ou cadeas de paavra da fonte, endereada por SI,
para o destno endereado por DI.
Sntaxe:
MOVS
Este comando no necessta de parmetros uma vez que toma como
endereo
fonte o contedo do regstrador SI e como destno o contedo de DI. A
segunte seqnca de nstrues ustra sso:
MOV SI, OFFSET VAR1
MOV DI, OFFSET VAR2
MOVS
Prmero ncazamos os vaores de SI e DI com os endereos das varves
VAR1 e VAR2 respectvamente, ento aps a execuo de MOVS o contedo
de
VAR1 copado para VAR2.
As nstrues MOVSB e MOVSW so usadas do mesmo modo que MOVS, a
prmera
move um byte e a segunda move uma paavra.

Instrues de carga.
So nstrues especfcas para regstradores, usadas para carregar bytes
ou
cadeas de bytes num regstrador.
LODS (LODSB) (LODSW)
LAHF
LDS
LEA
LES

INSTRUES LODS (LODSB) (LODSW)
Propsto: Carregar cadeas de um byte ou uma paavra para o acumuador.
Sntaxe:
LODS
Esta nstruo toma a cadea encontrada no endereo especfcado por SI, a
carrega para o regstrador AL (ou AX) e adcona ou subtra, dependendo do
estado de DF, para SI se uma transfernca de bytes ou de paavras.
MOV SI, OFFSET VAR1
LODS
Na prmera nha vemos a carga do endereo de VAR1 em SI e na segunda

tomado o contedo daquee oca para o regustrador AL.


Os comandos LODSB e LODSW so usados do mesmo modo, o prmero
carrega um
byte e o segundo uma paavra (usa todo o regstrador AX).

INSTRUO LAHF
Propsto: Transferr o contedo dos fags para o regstrador AH.
Sntaxe:
LAHF
Esta nstruo t para verfcar o estado dos fags durante a execuo
do nosso programa.
Os fags so dexados na segunte ordem dentro do regstrador:
SF ZF ?? AF ?? PF ?? CF
O "??" sgnfca que haver um vaor ndefndo naquees bts.

INSTRUO LDS
Propsto: Carregar o regstrador de segmento de dados.
Sntaxe:
LDS destno,fonte
O operador fonte deve ser uma doube word na memra. A paavra
assocada
com o maor endereo transferda para DS, em outras paavras sto
tomado
como o endereo de segmento. A paavra assocada com o menor endereo
o
endereo de desocamento e depostada no regstrador ndcado como
destno.

INSTRUO LEA
Propsto: Carregar o endereo do operador fonte.
Sntaxe:
LEA destno,fonte
O operador fonte deve estar ocazado na memra, e seu desocamento
coocado no regstrador de ndce ou pontero especfcado no destno.
Para ustrar uma das facdades que temos com este comando, ve|amos:
MOV SI,OFFSET VAR1
equvaente a:
LEA SI,VAR1
muto provve que para o programador muto mas fc crar
programas
grandes usando este tmo formato.

INSTRUO LES
Propsto: Carregar o regstrador de segmento extra
Sntaxe:
LES destno,fonte
O operador fonte deve ser uma paavra dupa na memra. O contedo da
paavra com endereo maor nterpretado como o endereo do segmento
e
coocado em ES. A paavra com endereo menor o endereo do
desocamento e
coocada no regstrador especfcado no parmetro de destno.

Instrues de manpuao da pha.
Estas nstrues permtem usar a pha para armazenar ou recuperar dados.
POP
POPF
PUSH
PUSHF

INSTRUO POP
Propsto: Recuperar uma parte de nformao da pha.
Sntaxe:
POP destno
Esta nstruo transfere o tmo vaor armazenado na pha para o operador
de destno, e ncrementa de 2 o regstrador SP.
Este ncremento dupo peo fato de que a pha do mas ato endereo de
memra para o mas baxo, e a pha trabaha apenas com paavras, 2
bytes,
ogo deve ser 2 o ncremento de SP, na readade 2 est sendo subtrado do
tamanho rea da pha.

INSTRUO POPF
Propsto: Extrar os fags armazenados na pha.
Sntaxe:
POPF
Este comando transfere os bts da paavra armazenada na parte mas ata
da
pha para regstrador de fag.
O modo da transfernca como se segue:
BIT FLAG
0 CF
2 PF
4 AF
6 ZF
7 SF
8 TF
9 IF
10 DF
11 OF
Os ocas dos bts so os mesmos para o uso da nstruo PUSHF.
Uma vez feta a transfernca o regstrador SP ncrementado de 2,
conforme
vmos anterormente.

INSTRUO PUSH
Propsto: Cooca uma paavra na pha.
Sntaxe:
PUSH fonte
A nstruo PUSH decrementa de dos o vaor de SP e ento transfere o
contedo do operador fonte para o novo endereo desutante no regstrador
recm modfcado.
O decremento no endereo dupo peo fato de que quando os vaores so
adconados pha, que cresce do maor para o menor endereo, ogo
quando
subramos de 2 o regstrador SP o que fazemos ncrementar o tamanho da
pha em dos bytes, que a nca quantdade de nformao que a pha
pode
manusear em cada entrada e sada.

INSTRUO PUSHF
Propsto: Coocar os vaores dos fags na pha.
Sntaxe:
PUSHF
Este comando decrementa de 2 o vaor do regstrador SP e ento o
contedo do
regstrador de fag transferdo para a pha, no endereo ndcado por SP.
Os fags so armazenados na memra da mesma forma que o comando
POPF.
--------------- // ---------------

4.2. Instrues gcas e artmtcas
Contedo:
4.2.1.Instrues gcas
4.2.2.Instrues artmtcas

4.2.1.Instrues gcas
So usadas para reazar operaes gcas nos operadores.
AND
NEG
NOT
OR
TEST
XOR

INSTRUO AND
Propsto: Reaza a con|uno de operadores bt a bt.
Sntaxe:
AND destno,fonte
Com esta nstruo a operao gca "y" para ambos os operadores
usada
como na tabea:
Fonte Destno | Destno
-----------------------------
1 1 | 1
1 0 | 0
0 1 | 0
0 0 | 0
O resutado desta operao armazenado no operador de destno.

INSTRUO NEG
Propsto: Gera o compemento de 2.
Sntaxe:
NEG destno
Esta nstruo gera o compemento de 2 do operador destno e o armazena
no
mesmo operador. Por exempo, f AX armazena o vaor 1234H, ento:
NEG AX
Isto far com o que o vaor EDCCH fque armazenado no regstrador AX.

INSTRUO NOT
Propsto: Faz a negao do operador de destno bt a bt.
Sntaxe:
NOT destno
O resutado armazenado no mesmo operador de destno.

INSTRUO OR
Propsto: Reaza um OU gco.
Sntaxe:
OR destno,fonte
A nstruo OR, faz uma ds|uno gca bt a bt dos dos operadores:
Fonte Destno | Destno
-----------------------------------
1 1 | 1
1 0 | 1
0 1 | 1
0 0 | 0

INSTRUO TEST
Propsto: Compara ogcamente os operadores.
Sntaxe:
TEST destno,fonte
Reaza uma con|uno, bt a bt, dos operadores, mas dfere da nstruo
AND, uma vez que no cooca o resutado no operador de destno. Tem
efeto
sobre o regstrador de fag.

INSTRUO XOR
Propsto: Reaza um OU excusvo.
Sntaxe:
XOR destno,fonte
Esta nstruo reazxa uma ds|uno excusva de dos operadores bt a
bt.
Fonte Destno | Destno
-----------------------------------
1 1 | 0
0 0 | 1
0 1 | 1
0 0 | 0

4.2.2.Instrues artmtcas.
So usadas para reazar operaes artmtcas nos operadores.
ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB

INSTRUO ADC
Propsto: Efetuar a soma entre dos operandos com carry.
Sntaxe:
ADC destno,fonte
Esta nstruo efetua a soma entre dos operandos, mas o vaor do fag CF,
exstente antes da operao. Apenas o operando destno e os fags so
afetados.
O resutado armazenado no operador de destno.

INSTRUO ADD
Propsto: Ado de dos operadores.
Sntaxe:
ADD destno,fonte
Esta nstruo adcona dos operadores e armazena o resutado no
operador
destno.

INSTRUO DIV
Propsto: Dvso sem sna.
Sntaxe:
DIV fonte
O dvsor pode ser um byte ou uma paavra e o operador que dado na
nstruo.
Se o dvsor de 8 bts, o regstrador AX de 16 bts tomado como
dvdendo e se o dvsor de 16 bts, o par de regstradores DX:AX ser
tomado como dvdendo, tomando a paavra ata de DX e a baxa de AX.
Se o dvsor for um byte, ento o quocente ser armazenado no regstrador
AL e o resto em AH. Se for uma paavra, ento o quocente armazenado
em AX
e o resto em DX.

INSTRUO IDIV
Propsto: Dvso com sna.
Sntaxe:
IDIV fonte
Consste bascamente como a nstruo DIV, dferenca-se apenas por
reazar
a operao com sna.
Para os resutados so usados os mesmos regstradores da nstruo DIV.

INSTRUO MUL
Propsto: Mutpcao com sna.
Sntaxe:
MUL fonte
Esta nstruo reaza uma mutpcao no snazada entre o contedo do
acumuador AL ou AX peo operando-fonte, devovendo o resutado no
acumuador AX caso a operao tenha envovdo AL com um operando de 8
bts,
ou em DX e AX caso a operao tenha envovdo AX e um operando de 16
bts.

INSTRUO IMUL
Propsto: Mutpco de dos nmeros nteros com sna.
Sntaxe:
IMUL fonte
Esta nstruo faz o mesmo que a anteror, dfere apenas pea ncuso do
sna.
Os resutados so mantdos nos mesmos regstradores usados pea
nstruo
MUL.

INSTRUO SBB
Propsto: Subtrao com carry.
Sntaxe:
SBB destno,fonte
Esta nstruo subtra os operadores e subtra um do resutado se CF est
atvado. O operador fonte sempre subtrado do destno.
Este tpo de subtrao usado quando se trabaha com quantdades de 32
bts.

INSTRUO SUB
Propsto: Subtrao.
Sntaxe:
SUB destno,fonte
Esta nstruo subtra o operador fonte do destno.

--------------- // ---------------
4.3.Instrues de controe de processos

Contedo:
4.3.1.Instrues de sato
4.3.2.Instrues de aos: oop
4.3.3.Instrues de contagem
4.3.4.Instrues de comparao
4.3.5.Instrues de fag

4.3.1.Instrues de sato.
Usadas para transferr o processo de execuo do programa para o
operador
ndcado.
|MP
|A (|NBE)
|AE (|NBE)
|B (|NAE)
|BE (|NA)
|E (|Z)
|NE (|NZ)
|G (|NLE)
|GE (|NL)
|L (|NGE)
|LE (|NG)
|C
|NC
|NO
|NP (|PO)
|NS
|O
|P (|PE)
|S

INSTRUO |MP
Propsto: Sato ncondcona.
Sntaxe:
|MP destno
Esta nstruo usada par adesvar o curso do programa sem tomar em
conta
as condes atuas dos fags ou dos dados.

INSTRUO |A (|NBE)
Propsto: Sato condcona.
Sntaxe:
|A smboo
Aps uma comparao este comando sata se no gua.
Isto quer dzer que o sato s feto se o fag CF ou o fag ZF esto
desatvados, ou se|a, se um dos dos for zero.

INSTRUO |AE (|NB)
Propsto: Sato condcona.
Sntaxe:
|AE smboo
A nstruo sata se est up, se est equa ou se est not down.
O sato feto se CF est desatvado.

INSTRUO |B (|NAE)
Propsto: Sato condcona.
Sntaxe:
|B smboo
A nstruo sata se est down, se est not up ou se est equa.
O sato feto se CF est atvado.

INSTRUO |BE (|NA)
Propsto: Sato condcona.
Sntaxe:
|BE smboo
A nstruo sata se est down, se est equa ou se est not up.
O sato feto se CF ou ZF esto atvados, ou se|a, se um dees for 1.

INSTRUO |E (|Z)
Propsto: Sato condcona.
Sntaxe:
|E smboo
A nstruo sata se est equa ou se est zero.
O sato feto se ZF est atvado.

INSTRUO |NE (|NZ)
Propsto: Sato condcona.
Sntaxe:
|NE smboo
A nstruo sata se est not equa ou se est zero.
O sato feto se ZF est desatvado.

INSTRUO |G (|NLE)
Propsto: Sato condcona, e o sna tomado.
Sntaxe:
|G smboo
A nstruo sata se est arger, se est not arger ou se est equa.
O sato ocorre se ZF = 0 ou se OF = SF.

INSTRUO |GE (|NL)
Propsto: Sato condcona, e o sna tomado.
Sntaxe:
|GE smboo
A nstruo sata se est arger, se est ess than ou se est equa.
O sato feto se SF = OF.

INSTRUO |L (|NGE)
Propsto: Sato condcona, e o sna tomado.
Sntaxe:
|L smboo
A nstruo sata se est ess than, se est not arger than ou se est
equa.
O sato feto se SF dferente de OF.

INSTRUO |LE (|NG)
Propsto: Sato condcona, e o sna tomado.
Sntaxe:
|LE smboo
A nstruo sata se est ess than, se est equa ou se est not arger.
O sato feto se ZF = 1 ou se SF dferente de OF.

INSTRUO |C
Propsto: Sato condcona, e os fags so tomados.
Sntaxe:
|C smboo
A nstruo sata se h carry.
O sato feto se CF = 1.

INSTRUO |NC
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|NC smboo
A nstruo sata se no h carry.
O sato feto se CF = 0.

INSTRUO |NO
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|NO smboo
A nstruo sata se no h overfow
O sato feto se OF = 0.

INSTRUO |NP (|PO)
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|NP smboo
A nstruo sata se no h pardade ou se a pardade mpar.
O sato feto se PF = 0.

INSTRUO |NS
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|NP smboo
A nstruo sata se o sna est desatvado.
O sato feto se SF = 0.

INSTRUO |O
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|O smboo
A nstruo sata se h overfow.
O sato feto se OF = 1.

INSTRUO |P (|PE)
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|P smboo
A nstruo sata se h pardade ou se a pardade par.
O sato feto se PF = 1.

INSTRUO |S
Propsto: Sato condcona, e o estado dos fags tomado.
Sntaxe:
|S smboo
A nstruo sata se o sna est atvado.
O sato feto se SF =1.
--------------- // ---------------

4.3.2.Instrues para aos: LOOP.
Estas nstrues transferem a execuo do processo, condcona ou
ncondconamente, para um destno, repetndo a ao at o contador ser
zero.
LOOP
LOOPE
LOOPNE

INSTRUO LOOP
Propsto: Gerar um ao no programa.
Sntaxe:
LOOP smboo
A nstruo LOOP decrementa CX de 1 e transfere a execuo do programa
para
o smboo que dado como operador, caso CX anda no se|a 1.

INSTRUO LOOPE
Propsto: Gerar um ao no programa, consderando o estado de ZF.
Sntaxe:
LOOPE smboo
Esta nstruo decrementa CX de 1. Se CX dferente de zero e ZF gua a
1, ento a execuo do programa transferda para o smboo ndcado
como
operador.

INSTRUO LOOPNE
Propsto: Gerar um ao no programa, consderando o estado de ZF.
Sntaxe:
LOOPNE smboo
Esta nstruo decrementa CX de 1 e transfere a execuo do programa
apenas
se ZF dferente de 0.

--------------- // ---------------
4.3.3.Instrues contadoras.
Estas nstrues so usadas para decrementar ou ncrementar o contedo
de
contadores.
DEC
INC

DEC INSTRUCTION
Propsto: Decrementar o operador.
Sntaxe:
DEC destno
Esta nstruo subtra 1 do operador destno e armazena o novo vaor no
mesmo operador.

INSTRUO INC
Propsto: Incrementar o operador.
Sntaxe:
INC destno
Esta nstruo adcona 1 ao operador destno e mantm o resutado no
mesmo
operador.
--------------- // ---------------

4.3.4.Instrues de comparao.
Estas nstrues so usadas para comparar os operadores, e eas afetam o
contedo dos fags.
CMP
CMPS (CMPSB) (CMPSW)

INSTRUO CMP
Propsto: Comparar os operadores.
Sntaxe:
CMP destno,fonte
Esta nstruo subtra o operador fonte do destno, mas no armazena o
resutado da operao, apenas afeta o estado dos fags.

INSTRUO CMPS (CMPSB) (CMPSW)
Propsto: Comparar cadeas de um byte ou uma paavra.
Sntaxe:
CMP destno,fonte
Esta nstruo compara efetuando uma subtrao entre o byte ou paavra
endereado por DI, dentro do segmento extra de dados, e o byte ou paavra
endereado por SI dentro do segmento de dados, afetando o regstrador de
fags, mas sem devover o resutado da subtrao.
A nstruo automatcamente ncrementa ou decrementa os regstradores
de
ndce SI e DI, dependendo do vaor do fag DF, de modo a ndcar os
prxmos dos eementos a serem comparados. O vaor de ncremento ou
decremento uma de uma ou duas undades, dependendo da natureza da
operao.
Dante desta nstruo, pode-se usar um prefxo para repeto, de modo a
comparar dos bocos de memra entre s, repetndo a nstruo de
comparao at que ambos se tornem guas ou desguas.

--------------- // ---------------
4.3.5.Instrues de fag.
Estas nstrues afetam dretamente o contedo dos fags.
CLC
CLD
CLI
CMC
STC
STD
STI

INSTRUO CLC
Propsto: Lmpar o fag de carry.
Sntaxe:
CLC
Esta nstruo desga o bt correspondente ao fag de carry. Em outras
paavras, ea o a|usta para zero.

INSTRUO CLD
Propsto: Lmpar o fag de endereo.
Sntaxe:
CLD
Esta nstruo desga o bt correspondente ao fag de endereo.

INSTRUO CLI
Propsto: Lmpar o fag de nterrupo.
Sntaxe:
CLI
Esta nstruo desga o fag de nterrupes, desabtando, deste modo,
nterrupes mascarves.
Uma nterrupo mascarve aquea cu|as funes so desatvadas
quando
IF=0.

INSTRUO CMC
Propsto: Compementar o fag de carry.
Sntaxe:
CMC
Esta nstruo compementa o estado do fag CF. Se CF = 0 a nstruo o
guaa a 1. Se CF = 1, a nstruo o guaa a 0.
Poderamos dzer que ea apenas nverte o vaor do fag.

INSTRUO STC
Propsto: Atvar o fag de carry.
Sntaxe:
STC
Esta nstruo a|usta para 1 o fag CF.

INSTRUO STD
Propsto: Atvar o fag de endereo.
Sntaxe:
STD
Esta nstruo a|usta para 1 o fag DF.

INSTRUO STI
Propsto: Atvar o fag de nsterrupo.
Sntaxe:
STI
Esta nstruo atva o fag IF, e habta nterrupes externas mascarves
(que s funconam quando IF = 1).

*****************************************************************************
CAPTULO 5: INTERRUPES E GERENCIA DE AROUIVOS


Contedo:
5.1.Interrupes
5.2.Gerencamento de arquvos
--------------- // ---------------

Contedo
5.1.1.Interrupes de hardware nterno
5.1.2.Interrupes de hardware externo
5.1.3.Interrupes de software
5.1.4.Interrupes mas comuns

5.1.1.Interrupes de hardware nterno
Interrupes nternas so geradas por certos eventos que ocorrem durante
a
execuo de um programa.
Este tpo de nterrupes so gerencadas, na sua totadade, peo hardware
e no possve modfc-as.
Um exempo caro deste tpo de nterrupes a que atuaza o contador do
cock nterno do computador, o hardware chama esta nterrupo mutas
vezes
durante um segundo.
No nos permtdo gerencar dretamente esta nterrupo, uma vez que
no
se pode controar a hora atuazada por software. Mas podemos usar seus
efetos no computador para o nosso benefco, por exempo para crar um
vrtua cock atuazado contnuamente peo contador nterno de cock. Para
tanto, precsamos apenas er o vaor atua do contador e o transformar num
formato compreensve peo usuro.
--------------- // ---------------

5.1.2.Interrupes de hardware externo
Interrupes externas so geradas atravs de dspostvos perfrcos, tas
como tecados, mpressoras, pacas de comuncao, entre outros. So
tambm
geradas por co-processadores.
No possve desatvar nterrupes externas.
Estas nterrupes no so envadas dretamente para a CPU, mas, de uma
forma mehor, so envadas para um crcuto ntegrado cu|a funo
excusva
manusear este tpo de nterrupo. O crcuto, chamado PIC8259A,
controado pea CPU atravs de uma sre de comuncao chamada paths.
--------------- // ---------------

5.1.3.Interrupes de software
Interrupes de software podem ser atvadas dretamente por nossos
programas
assemby, nvocando o nmero da nterrupo dese|ada com a nstruo
INT.
O uso das nterrupes facta muto a crao dos programas, torna-os
menores. Am dsso, fc compreend-as e geram boa performance.
Este tpo de nterrupes podem ser separadas em duas categoras:
Interrupes do Sstema Operacona DOS e nterrupes do BIOS.
A dferena entre ambas que as nterrupes do sstema operacona so
mas fces de usar, mas tambm so mas entas, uma vez que acessam os
servos do BIOS. Por outro ado, nterrupes do BIOS so muto mas
rpdas, mas possuem a desvantagem de serem parte do hardware, o que
sgnfca serem especfcas arqutetura do computador em questo.
A escoha sobre qua o tpo de nterrupo usar r depender somente das
caracterstcas que voc dese|a dar ao seu programa: veocdade (use BIOS),
portabdade (use DOS).
--------------- // ---------------

5.1.4.Interrupes mas comuns


Contedo
5.1.4.1.Int 21H (Interrupo do DOS)
Mtpas chamadas funes DOS.
5.1.4.2.Int 10H (Interrupo do BIOS)
Entrada e Sada de Vdeo.
5.1.4.3.Int 16H (Interrupo do BIOS)
Entrada e Sada do Tecado.
5.1.4.4.Int 17H (Interrupo do BIOS)
Entrada e Sada da Impressora.

--------------- // ---------------
5.1.4.1.Interrupo 21H
Propsto: Chamar uma dversdade de funes DOS.
Sntaxe:
Int 21H
Nota: Ouando trabahamos com o programa TASM necessro especfcar
que o
vaor que estamos usando est em hexadecma.
Esta nterrupo tem mutas funes, para acessar cada uma deas
necessro que o nmero correspondente da funo este|a no regstrador
AH no
momento da chamada da nterrupo.
Funes para mostrar nformaes no vdeo.
02H Exbe um caracter
09H Exbe uma cadea de caracteres
40H Escreve num dspostvo/arquvo
Funes para er nformaes do tecado.
01H Entrada do tecado
0AH Entrada do tecado usando buffer
3FH Letura de um dspostvo/arquvo
Funes para trabahar com arquvos.
Nesta seo so apenas especfcadas as tarefas de cada funo, para uma
refernca acerca dos concetos usados, ve|a Introduo ao gerencamento
de
arquvos.
Mtodo FCB
0FH Abertura de arquvo
14H Letura seqenca
15H Escrta seqenca
16H Crao de arquvo
21H Letura randmca
22H Escrta randmca
Handes
3CH Crao de arquvo
3DH Abertura de arquvo
3EH Fechamento de arquvo
3FH Letura de arquvo/dspostvo
40H Escrta de arquvo/dspostvo
42H Move pontero de etura/escrta num arquvo

FUNO 02H
Uso:
Mostra um caracter na tea.
Regstradores de chamada:
AH = 02H
DL = Vaor de caracter a ser mostrado.
Regstradores de retorno:
Nenhum.
Esta funo mostra o caracter cu|o cdgo hexadecma corresponde ao
vaor
armazenado no regstrador DL, e no modfca nenhum regstrador.
O uso da funo 40H recomendado ao nvs desta funo.

FUNO 09H
Uso:
Mostra uma cadea de caracteres na tea.
Regstradores de chamada:
AH = 09H
DS:DX = Endereo de nco da cadea de caracteres.
Regstradores de retorno:
Nenhum.
Esta funo mostra os caracteres, um por um, a partr do endereo ndcado
nos regstradores DS:DX at encontrar um caracter $, que nterpretado
como
fm da cadea.
recomendado usar a funo 40H ao nvs desta.

FUNO 40H
Uso:
Escrever num dspostvo ou num arquvo.
Regstradores de chamada:
AH = 40H
BX = Nmero do hande
CX = Ouantdade de bytes a gravar
DS:DX = Area onde est o dado
Regstradores de retorno:
CF = 0 se no houve erro
AX = Nmero de bytes escrto
CF = 1 se houve erro
AX = Cdgo de erro
Para usar esta funo para mostrar a nformao na tea, faa o regstrador
BX ser gua a 1, que o vaor defaut para o vdeo no DOS.

FUNO 01H
Uso:
Ler um caracter do tecado e mostr-o.
Regstradores de chamada
AH = 01H
Regstradores de retorno:
AL = Caracter do
muto fc er um caracter do tecado com esta funo, o cdgo
hexadecma do caracter do armazenado no regstrador AL. Nos caso de
tecas especas, como as de funo F1, F2, am de outras, o regstrador AL
conter o vaor 1, sendo necessro chamar a funo novamente para obter
o
cdgo daquee caracter.

FUNO 0AH
Uso:
Ler caracteres do tecado e armazen-os num buffer.
Regstradores de chamada:
AH = 0AH
DS:DX = Endereo nca da rea de armazenamento
BYTE 0 = Ouantdade de bytes na rea
BYTE 1 = Ouantdade de bytes dos
do BYTE 2 at BYTE 0 + 2 = caracteres dos
Regstradores de retorno:
Nenhum.
Os caracteres so dos e armazenados num espao de memra que fo
defndo. A estrutura deste espao ndca que o prmero byte representar a
quantdade mxma de caracteres que pode ser da. O segundo, a
quantdade
de caracteres dos e, no tercero byte, o nco onde ees so armazenados.
Ouando se atnge a quantdade mxma permtda, ouve-se o som do
speaker e
quaquer caracter adcona gnorado. Para fnazar a entrada, basta
dgtar |ENTER|.

FUNO 3FH
Uso:
Ler nformao de um dspostvo ou de um arquvo.
Regstradores de chamada:
AH = 3FH
BX = Nmero do hande
CX = Nmero de bytes a er
DS:DX = Area para receber o dado
Regstradores de retorno:
CF = 0 se no h erro e AX = nmero de bytes dos.
CF = 1 se h erro e AX conter o cdgo de erro.

FUNO 0FH
Uso:
Abrr um arquvo FCB.
Regstradores de chamada:
AH = 0FH
DS:DX = Pontero para um FCB
Regstradores de retorno:
AL = 00H se no h probemas, de outra forma retorna 0FFH

FUNO 14H
Uso:
Letura sequenca num arquvo FCB.
Regstradores de chamada:
AH = 14H
DS:DX = Pontero para um FCB | aberto.
Regstradores de retorno:
AL = 0 se no h erros, de outra forma o cdgo correspondente de erro
retornar:
1 erro no fm do arquvo, 2 erro na estrutura FCB e 3 erro de etura parca.
O que esta funo faz er o prxmo boco de nformaes do endereo
dado
por DS:DX, e atuazar este regstro.

FUNO 15H
Uso:
Escrta sequenca e arquvo FCB.
Regstradores de chamada:
AH = 15H
DS:DX = Pontero para um FCB |a aberto.
Regstradores de retorno:
AL = 00H se no h erros, de outra forma conter o cdgo de erro: 1 dsco
cheo ou
arquvo somente de etura, 2 erro na formao ou na especfcao do FCB.
A funo 15H atuaza o FCB aps a escrta do regstro para o presente
boco.

FUNO 16H
Uso:
Crar um arquvo FCB. Regstradores de chamada:
AH = 16H
DS:DX = Pontero para um FCB | aberto.
Regstradores de retorno:
AL = 00H se no h erros, de outra forma conter o vaor 0FFH.
baseada na nformao advnda de um FCB para crar um arquvo num
dsco.

FUNO 21H
Uso:
Ler de modo randmco um arquvo FCB.
Regstradores de chamada:
AH = 21H
DS:DX = Pontero para FCB aberto.
Regstradores de retorno:
A = 00H se no h erro, de outra forma AH conter o cdgo de erro:
1 se o fm do arquvo, 2 se h um erro de especfcao no FCB e 3 se um
regstro fo
do parcamente ou o pontero de arquvo est no fm do mesmo.
Esta funo o regstro especfcado peos campos do boco atua e
regstro de um FCB aberto e cooca a nformao na DTA, Area de
Transfernca do Dsco.

FUNO 22H
Uso:
Escrta randmca num arquvo FCB.
Regstradores de chamada:
AH = 22H
DS:DX = Pontero para um FCB aberto.
Regstradores de retorno:
AL = 00H se no h erro, de outra forma conter o cdgo de erro:
1 se o dsco est cheo ou o arquvo apenas de etura e 2 se h um erro
na especfcao FCB.
Escreve o regstro especfcado peos campos do boco atua e regstro de
um
FCB aberto. Esta nformao do contedo da DTA.

FUNO 3CH
Uso:
Crar um arquvo se no exste ou dex-o com comprmento 0 se exste.
Regstradores de chamada:
AH = 3CH
CH = Atrbuto do arquvo
DS:DX = Nome do arquvo, no formato ASCII.
Regstradores de retorno:
CF = 0 e AX nforma o nmero do hande se no h erro. Se caso houver
erro,
CF ser 1 e AX conter o cdgo de erro: 3 camnho no encontrado, 4 no
h handes dsponves
e 5 acesso negado.
Esta funo substtu a funo 16H. O nome do arquvo especfcado numa
cadea ASCII de bytes termnados peo caracter 0.
O arquvo crado conter os atrbutos defndos no regstrador CX, do
segunte modo:
Vaor Atrbutos
00H Norma
02H Hdden
04H System
06H Hdden e System
O arquvo crado com permsso de etura e escrta. No possve a
crao de dretros atravs desta funo.

FUNO 3DH
Uso:
Abre um arquvo e retorna um hande.
Regstradores de chamada:
AH = 3DH
AL = modo de acesso
DS:DX = Nome do arquvo, no formato ASCII.
Regstradores de retorno:
CF = 0 e AX = nmero do hande se no h erros, de outra forma CF = 1 e
AX = cdgo de erro:
01H se a funo no vda, 02H se o arquvo no fo encontrado, 03H se o
camnho no fo
encontrado, 04H se no h handes dsponves, 05H acesso negado, e 0CH
se o cdgo de
acesso no vdo.
O hande retornado de 16 bts.
O cdgo de acesso especfcado da segunte manera:
BITS
7 6 5 4 3 2 1
. . . . 0 0 0 Apenas etura
. . . . 0 0 1 Apenas escrta
. . . . 0 1 0 Letura/Escrta
. . . x . . . RESERVADO

FUNO 3EH
Uso:
Fecha um arquvo (hande).
Regstradores de chamada:
AH = 3EH
BX = Nmero do hande assocado
Regstradores de retorno:
CF = 0 se no h erros, ou CF ser 1 e AX conter o cdgo de erro: 06H se
o hande nvdo.
Esta funo atuaza o arquvo e bera o hande que estava usando.
FUNO 3FH
Uso:
Ler uma quantdade especfca de bytes de um arquvo aberto e armazen-
os
num buffer especfco.
--------------- // ---------------

5.1.4.2.Interrupo 10h
Propsto: Chamar uma dversdade de funes do BIOS
Sntaxe:
Int 10H
Esta nterrupo tem vras funes, todas para entrada e sada de vdeo.
Para acessar cada uma deas necessro coocar o nmero da funo
correspondente no regstrador AH.
Veremos apenas as funes mas comuns da nterrupo 10H.
Funo 02H, seecona a poso do cursor
Funo 09H, exbe um caracter e o atrbuto na poso do cursor
Funo 0AH, exbe um caracter na poso do cursor
Funo 0EH, modo afanumrco de exbo de caracteres

Funo 02h
Uso:
Move o cursor na tea do computador usando o modo texto.
Regstradores de chamada:
AH = 02H
BH = Pgna de vdeo onde o cursor est posconado.
DH = nha
DL = couna
Regstradores de retorno:
Nenhum.
A poso do cursor defnda peas suas coordenadas, ncando-se na
poso 0,0 at a poso 79,24. Logo os vaores possves para os
regstradores DH e DL so: de 0 a 24 para nhas e de 0 a 79 para counas.

Funo 09h
Uso:
Mostra um determnado caracter vras vezes na tea do computador com
um
atrbuto defndo, ncando pea poso atua do cursor.
Regstradores de chamada:
AH = 09H
AL = Caracter a exbr
BH = Pgna de vdeo, onde o caracter ser mostrado
BL = Atrbuto do caracter
CX = Nmero de repetes.
Regstradores de retorno:
Nenhum
Esta funo mostra um caracter na tea vras vezes, de acordo com o
nmero
especfcado no regstrador CX, mas sem mudar a poso do cursor na tea.

Funo 0Ah
Uso:
Exbe um caracter na poso atua do cursor.
Regstradores de chamada:
AH = 0AH
AL = Caracter a exbr
BH = Pgna de vdeo onde o caracter ser exbdo
BL = Cor do caracter (apenas em modo grfco)
CX = Nmero de repetes
Regstradores de retorno:
Nenhum.
A prncpa dferena entre esta funo e a anteror permtr mudana nos
atrbutos, bem como mudar a poso do cursor.

Funo 0EH
Uso:
Exbr um caracter na tea do computador atuazando a poso do cursor.
Regstradores de chamada:
AH = 0EH
AL = Caracter a exbr
BH = Pgna de vdeo onde o caracter ser exbdo
BL = Cor a usar (apenas em modo grfco)
Regstradores de retorno:
Nenhum
--------------- // ---------------

5.1.4.3.Interrupo 16H
Veremos duas funes da nterrupo 16H. A exempo das demas
nterrupes,
usa-se o regstrador AH para cham-as.

Funes da nterrupo 16h
Funo 00H, um caracter do tecado.
Funo 01H, o estado atua do tecado.
Funo 00H Uso:
Ler um caracter do tecado.
Regstradores de chamada:
AH = 00H
Regstradores de retorno:
AH = Cdgo da teca pressonada
AL = Vaor ASCII do caracter
Ouando se usa esta nterrupo, os programas executam at que uma teca
se|a
pressonada. Se um vaor ASCII, armazenado no regstrador AH. Caso
contrro, o cdgo armazenado no regstrador AL e AH=0.
Este vaor de AL pode ser utzado quando queremos detectar tecas que
no
esto dretamente representadas peo seu vaor ASCII, tas como
|ALT||CONTROL|.

Funo 01h
Uso:
Ler o estado do tecado
Regstradores de chamada:
AH = 01H
Regstradores de retorno:
Se o regstrador de fag zero, sgnfca que h nformao no buffer de
tecado na memra. Caso contrro, o buffer est vazo. Portanto o vaor do
regstrador AH ser o vaor da teca armazenada no buffer.
--------------- // ---------------

5.1.4.4.Interrupo 17H
Propsto: Manusear a entrada e sada da mpressora.
Sntaxe:
Int 17H
Esta nterrupo usada para envar caracteres, setar ou er o estado de
uma mpressora.
Funes da nterrupo 17h
Funo 00H, mprme um vaor ASCII
Funo 01H, seta a mpressora
Funo 02H, estado da mpressora
Funo 00H
Uso:
Imprmr um caracter numa mpressora.
Regstradores de chamada:
AH = 00H
AL = Caracter a mprmr
DX = Porta de conexo
Regstradores de retorno:
AH = Estado da mpressora
Os vaores da porta a coocar no regstrador DX so:
LPT1 = 0, LPT2 = 1, LPT3 = 2 ...
O estado da mpressora codfcado bt a bt como segue:
BIT 1/0 SIGNIFICADO
----------------------------------------
0 1 Estado de tme-out
1 -
2 -
3 1 Erro de entrada e sada
4 1 Impressora seeconada
5 1 Fm de pape
6 1 Reconhecmento de comuncao
7 1 A mpressora est pronta para o uso
Os bts 1 e 2 bts no so reevantes
A maora dos BIOS suportam 3 portas paraeas, havendo aguns que
suportam
4.
Funo 01h
Uso:
Setar uma porta paraea.
Regstradores de chamada:
AH = 01H
DX = Porta
Regstradores de retorno:
AH = Status da mpressora
A porta defnda no regstrador DX pode ser: LPT1=0, LPT2=1, assm por
dante.
O estado da mpressora codfcado bt a bt como segue:
BIT 1/0 SIGNIFICADO
----------------------------------------
0 1 Estado de tme-out
1 -
2 -
3 1 Erro de entrada e sada
4 1 Impressora seeconada
5 1 Fm de pape
6 1 Reconhecmento de comuncao
7 1 A mpressora est pronta para o uso
Os bts 1 e 2 bts no so reevantes
Funo 02h
Uso:
Obter o status da mpressora.
Regstradores de chamada:
AH = 01H
DX = Porta
Regstradores de retorno
AH = Status da mpressora
A porta defnda no regstrador DX pode ser: LPT1=0, LPT2=1, assm por
dante.
O estado da mpressora codfcado bt a bt como segue:
BIT 1/0 SIGNIFICADO
----------------------------------------
0 1 Estado de tme-out
1 -
2 -
3 1 Erro de entrada e sada
4 1 Impressora seeconada
5 1 Fm de pape
6 1 Reconhecmento de comuncao
7 1 A mpressora est pronta para o uso
Os bts 1 e 2 bts no so reevantes
--------------- // ---------------

5.2. Gerencamento de Arquvos

Contedo:
5.2.1.Modos de trabahar com arquvos
5.2.2.Mtodo FCB
5.2.3.Mtodos de canas de comuncao

5.2.1.Modos de trabahar com arquvos.
H dos modos de trabahar com arquvos. O prmero atravs de FCB (
bocos de controe de arquvo), o segundo atravs de canas de
comuncao, tambm conhecdos como handes.
O prmero modo de manusear arquvos tem sdo usado desde o sstema
operacona CPM, predecessor do DOS, ogo permte certas compatbdades
com mutos arquvos vehos do CPM bem como com a verso 1.0 do DOS,
am
deste mtodo permtr-nos ter um nmero mtado de arquvos abertos ao
mesmo tempo. Se voc quser crar um voume para o dsco, a nca forma

atravs deste mtodo.


Depos de consderarmos as vantagens de FCB, o uso do mtodo de Canas
de
Comuncao muto smpes e permte-nos um mehor manuseo de erros.
Para uma mehor facdade, daqu por dante nos referremos aos Bocos de
Controe de Arquvo como FCBs e aos Canas de Comuncao como
handes.
--------------- // ---------------

5.2.2.Mtodo FCB.
5.2.2.1.Introduo
5.2.2.2.Abertura de arquvo
5.2.2.3.Crar um novo arquvo
5.2.2.4.Escrta seqenca
5.2.2.5.Letura seqenca
5.2.2.6.Letura e escrta randmca
5.2.2.7.Fechar um arquvo
--------------- // ---------------
5.2.2.1.INTRODUO
H dos tpos de FCB, o norma, cu|o comprmento 37 bytes, e o extenddo,
com 44 bytes. Neste tutora remos assumr o prmero, ou se|a, quando
faarmos em FCB, estaremos fazendo refernca ao tpo norma (37 bytes).
O FCB composto de nformaes dadas peo programador e por
nformaes que
ee toma dretamente do sstema operacona. Ouando estes tpos de
arquvos
so usados, s possve se trabahar no dretro corrente, pos FCBs no
fornecem suporte ao sstema de organzao de arquvos atravs de
dretros
do DOS.
FCB composto peos seguntes campos:
POSIO COMPRIMENTO SIGNIFICADO
00H 1 Byte Drve
01H 8 Bytes Nome do arquvo
09H 3 Bytes Extenso
0CH 2 Bytes Nmero do boco
0EH 2 Bytes Tamanho do regstro
10H 4 Bytes Tamanho do arquvo
14H 2 Bytes Data de crao
16H 2 Bytes Hora de crao
18H 8 Bytes Reservado
20H 1 Bytes Regstro corrente
21H 4 Bytes Regstro randmco
Para seeconar o drve de trabaho, assuma: drve A = 1; drve B = 2; etc.
Se for usado 0, o drve que est sendo usado no momento ser tomado
como
opo.
O nome do arquvo deve ser |ustfcado esquerda e necessro preencher
com espaos os bytes remanescentes, a extenso coocada do mesmo
modo.
O boco corrente e o regstro corrente dzem ao computador que regstro
ser
acessado nas operaes de etura e escrta. Um boco um grupo de 128
regstros. O prmero boco de arquvo o boco 0. O prmero regstro o
regstro 0, ogo o tmo regstro do prmero boco deve ser o 127, uma vez
que a numerao ncada com 0 e o boco pode conter 128 regstradores
no
tota.
--------------- // ---------------

5.2.2.2.ABERTURA DE AROUIVO
Para abrr um arquvo FCB usada a funo 0FH da nterrupo 21h.
A undade, o nome e a extenso do arquvo devem ser ncazadas antes da
abertura.
O regstrador DX deve apontar para o boco. Se o vaor FFH retornado no
regstrador AH quando da chamada da nterrupo, ento o arquvo no fo
encontrado. Se tudo der certo, o vaor 0 retornado.
Se o arquvo aberto, ento o DOS ncaza o boco corrente em 0, o
tamanho do regstro para 128 bytes. O tamanho do arquvo e a sua data so
preenchdos com as nformaes encontradas no dretro.
--------------- // ---------------

5.2.2.3.CRIAR UM NOVO AROUIVO
Para a crao de arquvos usada a funo 16H da nterrupo 21h.
O regstrador DX deve apontar para uma estrutura de controe cu|o os
requstos so de que peo menos a undade gca, o nome e a extenso do
arquvo se|am defndas.
Caso ocorra probema, o vaor FFH deve retornar em AL, de outra forma este
regstrador conter o vaor 0.
--------------- // ---------------

5.2.2.4.ESCRITA SEOENCIAL
Antes de consegurmos reazar escrta para o dsco, necessro defnr a
rea de transfernca de dados usando, para tanto, a funo 1AH da
nterrupo 21h.
A funo 1AH no retorna quaquer estado do dsco nem da operao. Mas a
funo 15H, que usaremos para escrever para o dsco, faz sso no
regstrador
AL. Se este for gua a zero, ento no h erro e os campos de regstro
corrente e de boco so atuazados.

--------------- // ---------------
5.2.2.5.LEITURA SEOENCIAL
Antes de tudo, devemos defnr a rea de transfernca de arquvo ou DTA.
Para a etura seqenca usaremos a funo 14H da nterrupo 21h.
O regstro a ser do defndo peos campos regstro e boco corrente. O
regstrador AL retorna o estado da operao. Se AL contm o vaor 1 ou 3,
sgnfca que fo atngdo o fm do arquvo. Um vaor 2, por sua vez,
sgnfca que o FCB est estruturado erroneamente.
Caso no ocorra erro, AL conter o vaor 0 e os campos de regstro e boco
corrente so atuazados.
--------------- // ---------------

5.2.2.6.LEITURA E ESCRITA RANDOMICA
A funo 21H e a funo 22H da nsterrupo 21h so usadas reazao,
respectvamente, da escrta e etura randmca.
O nmero de regstro randmco e o boco corrente so usados para cacuar
a
poso reatva do regstro a ser do ou escrto.
O regstrador AL retorna a mesma nformao do que par a escrta e etura
seqenca. A nformao a ser da ser retornada na rea de transfernca
do dsco, bem como a nformao a ser escrta retorna na DTA.
--------------- // ---------------

5.2.2.7.FECHAR UM AROUIVO
Para fechar um arquvo usamos a funo 10H da nterrupo 21h.
Se aps nvocar esta funo, o regsatrador AL conter o vaor FFH, sgnfca
que o arquvo fo mudado de poso, o dsco fo mudado ou h erro de
acesso
a dsco.
--------------- // ---------------

5.2.3.Canas de comuncao.
5.2.3.1.Trabahando com handes
5.2.3.2.Funes para usar handes

5.2.3.1.TRABALHANDO COM HANDLES
O uso de handes para gerencar arquvos traz grandes facdades na
crao
de arquvos e o programador pode concentrar-se em outros aspectos da
programao sem preocupar-se com detahes que podem ser manuseados
peo
sstema operacona.
A facdade dos handes consste em que para operarmos sobre um arquvo

apenas necessro defnrmos o nome do mesmo e o nmero de hande a


usar,
todo o resto da nformao manuseada nternamente peo DOS.
Ouando usamos este mtodo para trabahar com arquvos, no h dstno
entre acesso seqenca ou randmco, o arquvo smpesmente tomado
como
uma rede de bytes.
--------------- // ---------------

5.2.3.2.FUNES PARA USAR HANDLES
As funes usadas para o manuseo de arquvos atravs de handes so
descrtas na pgna sobre: Interrupes, na seo dedcada nterrupo
21h.

*****************************************************************************
CAPTULO 6: MACROS E PROCEDIMENTOS
Contedo
6.1.Procedmentos
6.2.Macros

6.1.Procedmentos
6.1.1.Defno de procedmento
6.1.2.Sntaxe de um procedmento
--------------- // ---------------

6.1.1.Defno de um procedmento
Um procedmento uma coeo de nstrues para as quas possve
dreconar o curso de nosso programa, e uma vez que a execuo destas
nstrues do procedmento tenha acabado, o controe retorna para nha
que
segue que chamou o procedmento.
Procedmentos nos a|udam a crar programas egves e fces de modfcar.
Ouando se nvoca um procedmento, o endereo da prxma nstruo do
programa mantdo na pha, de onde recuperado quando do retorno do
procedmento.
--------------- // ---------------

6.1.2.Sntaxe de um procedmento
H dos tpos de procedmentos, os ntrasegments, que se ocazam no
mesmo
segmento da nstruo que o chama, e os nter segments, que podem se
ocazar em dferentes segmentos de memra.
Ouando os procedmentos ntrasegments so usados, o vaor de IP
armazenado
na pha e quando os procedmentos nter segments so usados o vaor de
CS:IP armazenado. Lembre-se que o regstrador CS ndca qua o
segmento de
cdgo.
A dretva que chama um procedmento como segue:
CALL NomedoProcedmento
As partes que compem um procedmento so as seguntes:
Decarao do procedmento
Cdgo do procedmento
Dretva de retorno
Trmno do procedmento
Por exempo, se qusermos uma rotna que soma dos bytes armazenados
em AH e
AL, e o resutado da soma em BX:
Soma Proc Near ; Decarao do Procedmento
Mov BX, 0 ; Contedo do Procedmento...
Mov BL, AH
Mov AH, 00
Add BX, AX
Ret ; Dretva de retorno
Soma EndP ; Fm do Procedmento
Na decarao, a prmera paavra, Soma, corresponde ao nome do
procedmento. Proc decara-o e a paavra Near ndca que o procedmento
do
tpo ntrasegment, ou se|a, no mesmo segmento. A dretva Ret carrega IP
com
o endereo armazenado na pha para retornar ao programa que chamou.
Fnamente, Soma EndP ndca o fm do procedmento.
Para decarar um procedmento nter segment, basta substtur a paavra
Near
para FAR.
A chamada deste procedmento feto de modo dntco:
Ca Soma
Macros oferecem uma grande fexbdade na programao, comparadas
aos
procedmentos.
--------------- // ---------------

6.2.Macros
6.2.1.Defno de uma Macro
6.2.2.Sntaxe de uma Macro
6.2.3.Bbotecas de Macros
6.2.1.Defno de uma Macro
Uma macro um grupo de nstrues repettvas em um programa que so
codfcadas apenas uma vez e, assm, poupam espao, podendo ser
utzadas
tantas vezes quantas forem necessro.
A prncpa dferena entre uma macro e um procedmento que numa
macro
possve a passagem de parmetros e num procedmento no. No momento
em que
a macro executada, cada parmetro substtudo peo nome ou vaor
especfcado na hora da chamada.
Podemos dzer, desta forma, que um procedmento uma extenso de um
determnado programa, enquanto que uma macro um mduo que
especfca
funes que podem ser utzadas por dferentes programas.
Uma outra dferena entre uma macro e um procedmento o modo de
chamada de
cada um. Para chamar um procedmento, se faz necessro a dretva CALL,
por
outro ado, para chamada de macros feta com se fosse uma nstruo
norma
da nguagem assemby.
--------------- // ---------------
6.2.2.Sntaxe de uma Macro
As partes que compem uma macro so as seguntes:
Decarao da macro
Cdgo da macro
Dretva de trmno da macro
A decarao da macro feta como se segue:
NomeMacro MACRO |parmetro1, parmetro2...|
Do mesmo modo que temos a funconadade dos parmetros, possve
tambm a
crao de uma macro que no os possua.
A dretva de trmno da macro : ENDM
Um exempo de uma macro para coocar o cursor numa determnada
poso da
tea:
Pos MACRO Lnha, Couna
PUSH AX
PUSH BX
PUSH DX
MOV AH, 02H
MOV DH, Lnha
MOV DL, Couna
MOV BH, 0
INT 10H
POP DX
POP BX
POP AX
ENDM
Para usar uma macro basta cham-a peo seu nome, ta como se fosse
quaquer
nstruo na nguagem assemby:
Pos 8, 6
--------------- // ---------------

6.2.3.Bboteca de Macros
Uma das facdades oferecdas peo uso de macros a crao de
bbotecas, que so grupo de macros, podendo ser ncudas num programa
orgnras de arquvos dferentes.
A crao destas bbotecas muto smpes. Cramos um arquvo com todas
as macros que sero necessras e o savamos como um arquvo texto.
Para ncur uma bboteca num programa, basta coocar a segunte
nstruo
Incude NomedoArquvo na parte nca do programa, antes da decarao
do
modeo de memra.
Supondo que o arquvo de macros tenha sdo savo com o nome de
MACROS.TXT, a
nstruo Incude sera utzada do segunte modo:
;Inco do programa
Incude MACROS.TXT
.MODEL SMALL
.DATA
;Os dados vo aqu
.CODE
Inco:
;O cdgo do programa comea aqu
.STACK
;A pha decarada
End Inco
;Fm do programa
*****************************************************************************
CAPTULO 7: EXEMPLOS DE PROGRAMAS


Contedo:
7.1.Exempos de Programas com Debug
7.2.Exempos de Programas com TASM
--------------- // ---------------
7.1.Exempos de Programas com Debug
Nesta seo forneceremos aguns programas fetos no debug do DOS.
Voc pode executar cada programa assemby usando o comando "g" (go),
para
ver o que cada programa faz.
Procedmento
Prmero passo
Carregar o programa exempo
Por exempo:
C:\>debug
-n one.com
-
-u 100 109
0D80:0100 B80600 MOV AX,0006
0D80:0103 BB0400 MOV BX,0004
0D80:0106 01D8 ADD AX,BX
0D80:0108 CD20 INT 20
-
Nota:
-n one.com
Dar nome ao programa a ser carregado
-
Carreg-o
-u 100 109
Desmontar o cdgo do endereo nca ao fna especfcado
Segundo passo
Dgte o comando g
Por exempo:
-g
Program termnated normay
-

Exempos de programas no Debug
Prmero exempo
-a0100
297D:0100 MOV AX,0006 ;Pe o vaor 0006 no regstrador AX
297D:0103 MOV BX,0004 ;Pe o vaor 0004 no regstrador BX
297D:0106 ADD AX,BX ;Adcona BX ao contedo de AX
297D:0108 INT 20 ;Fnaza o Programa
A nca cosa que este programa faz savar dos vaores em dos
regstradores e adconar o vaor de um ao outro.
Segundo exempo
- a100
0C1B:0100 |mp 125 ;Sata para o endereo 125h
0C1B:0102 |Enter|
- e 102 'Heo, How are you ?' 0d 0a '$'
- a125
0C1B:0125 MOV DX,0102 ;Copa a strng para regstrador DX
0C1B:0128 MOV CX,000F ;Ouantas vezes a strng ser mostrada
0C1B:012B MOV AH,09 ;Copa o vaor 09 para regstrador AH
0C1B:012D INT 21 ;Mostra a strng
0C1B:012F DEC CX ;Subtra 1 de CX
0C1B:0130 |CXZ 0134 ;Se CX gua a 0 sata para o endereo 0134
0C1B:0132 |MP 012D ;Sata ao endereo 012D
0C1B:0134 INT 20 ;Fnaza o programa
Este programa mostra 15 vezes na tea a strng de caracteres.
Tercero exempo
-a100
297D:0100 MOV AH,01 ;Funo para mudar o cursor
297D:0102 MOV CX,0007 ;Formata o cursor
297D:0105 INT 10 ;Chama nterrupo do BIOS
297D:0107 INT 20 ;Fnaza o programa
Este programa muda o formato do cursor.
Ouarto exempo
-a100
297D:0100 MOV AH,01 ;Funo 1 ( caractere do tecado)
297D:0102 INT 21 ;Chama nterrupo do DOS
297D:0104 CMP AL,0D ;Compara se o caractere do um ENTER
297D:0106 |NZ 0100 ;Se no , um outro caractere
297D:0108 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:010A MOV DL,AL ;Character to wrte on AL
297D:010C INT 21 ;Chama nterrupo do DOS
297D:010E INT 20 ;Fnaza o programa
Este programa usa a nterrupo 21h do DOS. Usa duas funes da mesma:
a
prmera um caractere do tecado (funo 1) e a segundo escreve um
caractere na tea. O programa caracteres do tecado at encontrar um
ENTER.
Ounto exempo
-a100
297D:0100 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:0102 MOV CX,0008 ;Pe o vaor 0008 no regstrador CX
297D:0105 MOV DL,00 ;Pe o vaor 00 no regstrador DL
297D:0107 RCL BL,1 ;Rotacona o byte em BL um bt para a
esquerda
297D:0109 ADC DL,30 ;Converte o regstrador de fag para 1
297D:010C INT 21 ;Chama nterrupo do DOS
297D:010E LOOP 0105 ;Sata se CX > 0 para o endereo 0105
297D:0110 INT 20 ;Fnaza o programa
Este programa mostra na tea um nmero bnro atravs de um cco
condcona (LOOP) usando a rotao do byte.
Sexto exempo
-a100
297D:0100 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:0102 MOV DL,BL ;Pe o vaor de BL em DL
297D:0104 ADD DL,30 ;Adcona o vaor 30 a DL
297D:0107 CMP DL,3A ;Compara o vaor 3A com o contedo de DL
sem afet-o
;seu vaor apenas modfca o estado do fag de carry
297D:010A |L 010F ;sata ao endereo 010f, se for menor
297D:010C ADD DL,07 ;Adcona o vaor 07 a DL
297D:010F INT 21 ;Chama nterrupo do DOS
297D:0111 INT 20 ;Fnaza o programa
Este programa mprme um vaor zero em dgtos hexadecmas.
Stmo exempo
-a100
297D:0100 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:0102 MOV DL,BL ;Pe o vaor de BL em DL
297D:0104 AND DL,0F ;Transporta fazendo AND dos nmeros bt a
bt
297D:0107 ADD DL,30 ;Adcona 30 a D
297D:010A CMP DL,3A ;Compara D com 3A
297D:010D |L 0112 ;Sata ao endereo 0112, se menor
297D:010F ADD DL,07 ;Adcona 07 a DL
297D:0112 INT 21 ;Chama nterrupo do DOS
297D:0114 INT 20 ;Fnaza o programa
Este programa usado para mprmr dos dgtos hexadecmas.
Otavo exempo
-a100
297D:0100 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:0102 MOV DL,BL ;Pe o vaor de BL em DL
297D:0104 MOV CL,04 ;Pe o vaor 04 em CL
297D:0106 SHR DL,CL ;Desoca os 4 bts mas atos do nmero ao
nbbe mas dreta
297D:0108 ADD DL,30 ;Adcona 30 a DL
297D:010B CMP DL,3A ;Compara D com 3A
297D:010E |L 0113 ;Sata ao endereo 0113, se menor
297D:0110 ADD DL,07 ;Adcona 07 a DL
297D:0113 INT 21 ;Chama nterrupo do DOS
297D:0115 INT 20 ;Fnaza o programa
Este programa mprme o prmero de dos dgtos hexadecmas.
Nono exempo
-a100
297D:0100 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:0102 MOV DL,BL ;Pe o vaor de BL em DL
297D:0104 MOV CL,04 ;Pe o vaor 04 em CL
297D:0106 SHR DL,CL ;Desoca os 4 bts mas atos do nmero ao
nbbe mas dreta
297D:0108 ADD DL,30 ;Adcona 30 a DL
297D:010B CMP DL,3A ;Compara D com 3A
297D:010E |L 0113 ;Sata ao endereo 0113, se menor
297D:0110 ADD DL,07 ;Adcona 07 a DL
297D:0113 INT 21 ;Chama nterrupo do DOS
297D:0115 MOV DL,BL ;Pe o vaor de BL em DL
297D:0117 AND DL,0F ;Transporta fazendo AND dos nmeros bt a bt
297D:011A ADD DL,30 ;Adcona 30 a DL
297D:011D CMP DL,3A ;Compara D com 3A
297D:0120 |L 0125 ;Sata ao endereo 0125, se menor
297D:0122 ADD DL,07 ;Adcona 07 a DL
297D:0125 INT 21 ;Chama nterrupo do DOS
297D:0127 INT 20 ;Fnaza o programa
Este programa mprme o segundo de dos dgtos hexadecmas.
Dcmo exempo
-a100
297D:0100 MOV AH,01 ;Funo 1 ( caractere do tecado)
297D:0102 INT 21 ;Chama nterrupo do DOS
297D:0104 MOV DL,AL ;Pe o vaor de AL em DL
297D:0106 SUB DL,30 ;Subtra 30 de DL
297D:0109 CMP DL,09 ;Compara DL com 09
297D:010C |LE 0111 ;Sata ao endereo 0111, se menor ou gua
297D:010E SUB DL,07 ;Subtra 07 de DL
297D:0111 MOV CL,04 ;Pe o vaor 04 em CL
297D:0113 SHL DL,CL ;Insere zeros dreta
297D:0115 INT 21 ;Chama nterrupo do DOS
297D:0117 SUB AL,30 ;Subtra 30 de AL
297D:0119 CMP AL,09 ;Compara AL com 09
297D:011B |LE 011F ;Sata ao endereo 011f, se menor ou gua
297D:011D SUB AL,07 ;Subtra 07 de AL
297D:011F ADD DL,AL ;Adcona AL a DL
297D:0121 INT 20 ;Fnaza o programa
Este programa pode er dos dgtos hexadecmas.
Dcmo prmero exempo
-a100
297D:0100 CALL 0200 ;Chama um procedmento
297D:0103 INT 20 ;Fnaza o programa
-a200
297D:0200 PUSH DX ;Pe o vaor de DX na pha
297D:0201 MOV AH,08 ;Funo 8
297D:0203 INT 21 ;Chama nterrupo do DOS
297D:0205 CMP AL,30 ;Compara AL com 30
297D:0207 |B 0203 ;Sata se CF atvado ao endereo 0203
297D:0209 CMP AL,46 ;Compara AL com 46
297D:020B |A 0203 ;Sata ao endereo 0203, se dferente
297D:020D CMP AL,39 ;Compara AL com 39
297D:020F |A 021B ;Sata ao endereo 021B, se dferente
297D:0211 MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:0213 MOV DL,AL ;Pe o vaor de AL em DL
297D:0215 INT 21 ;Chama nterrupo do DOS
297D:0217 SUB AL,30 ;Subtra 30 de AL
297D:0219 POP DX ;Extra o vaor de DX da pha
297D:021A RET ;Retorna o controe ao programa prncpa
297D:021B CMP AL,41 ;Compara AL com 41
297D:021D |B 0203 ;Sata se CF atvado ao endereo 0203
297D:021F MOV AH,02 ;Funo 2 (escreve um caractere na tea)
297D:022 MOV DL,AL ;Pe o vaor AL em DL
297D:0223 INT 21 ;Chama nterrupo do DOS
297D:0225 SUB AL,37 ;Subtra 37 de AL
297D:0227 POP DX ;Extra o vaor de DX da pha
297D:0228 RET ;Retorna o controe ao programa prncpa
Este programa se mantm endo caracteres at receber um que possa ser
convertdo para um nmero hexadecma.
--------------- // ---------------
7.2.Exempos de Programas com TASM
Nesta seo forneceremos a voc vros exempos de programas a serem
montados fazendo uso do TASM da Borand.
Procedmento:
Para mont-os, sga os seguntes passos:
Prmero passo
Montar o programa
Por exempo:
C:\>tasm one.asm
Turbo Assember Verson 2.0 Copyrght (c) 1988, 1990 Borand
Internatona
Assembng fe: one.asm
Error messages: None
Warnng messages: None
Passes: 1
Remanng memory: 471k
C:\>
Isto crar um programa ob|eto com o mesmo nome do fonte, neste caso:
one.ob|
Segundo passo
Crar o programa executve
Por exempo:
C:\>tnk one.ob|
Turbo Lnk Verson 3.0 Copyrght (c) 1987, 1990 Borand Internatona
C:\>
Isto cra o programa executve com o mesmo nome do ob|eto e com
extenso
dferente, one.exe
Tercero passo
Rodar o programa executve. Basta dgtar o nome do programa crado.

Exempos de Programas Assemby
Prmero exempo
;nome do programa: one.asm
;
.mode sma
.stack
.code
mov AH,1h ;Funo 1 do DOS
Int 21h ; o caracter e returna o cdgo ASCII ao regstrador AL
mov DL,AL ;move o cdgo ASCII para o regstrador DL
sub DL,30h ;subtra de 30h para converter a um dgto de 0 a 9
cmp DL,9h ;compara se o dgto est entre 0 e 9
|e dgt1 ;se verdadero obtm o prmero nmero (4 bts)
sub DL,7h ;se faso, subtra de 7h para converter a uma etra A-F
dgt1:
mov CL,4h ;prepara para mutpcar por 16
sh DL,CL ;mutpca para converter dentro dos 4 bts mas atos
nt 21h ;obtm o prxmo caracter
sub AL,30h ;repete a operao de converso
cmp AL,9h ;compara o vaor 9h com o contedo do regstrador AL
|e dgt2 ;se verdadero, obtm o segundo dgto
sub AL,7h ;se faso, subtra de 7h
dgt2:
add DL,AL ;adcona o segundo dgto
mov AH,4Ch ;funo 4Ch do DOS (ext)
Int 21h ;nterrupo 21h
End ;fnaza o programa
Este programa dos caracteres e os mprme na tea
Segundo exempo
;nome do programa: two.asm
.mode sma
.stack
.code
PRINT_A_| PROC
MOV DL,'A' ;move o character A para o regstrador DL
MOV CX,10 ;move o vaor decma 10 para o regstrador CX
;este vaor usado para fazer ao com 10 nteraes
PRINT_LOOP:
CALL WRITE_CHAR ;Imprme o caracter em DL
INC DL ;Incrementa o vaor do regstrador DL
LOOP PRINT_LOOP ;Lao para mprmr 10 caracteres
MOV AH,4Ch ;Funo 4Ch, para sar ao DOS
INT 21h ;Interrupo 21h
PRINT_A_| ENDP ;Fnaza o procedmento
WRITE_CHAR PROC
MOV AH,2h ;Funo 2h, mprme caracter
INT 21h ;Imprme o caracter que est em DL
RET ;Retorna o controe ao procedmento que chamou
WRITE_CHAR ENDP ;Fnaza o procedmento
END PRINT_A_| ;Fnaza o programa
Este programa mostra os caracteres ABCDEFGHI| na tea.
Tercero exempo
;nome do programa: three.asm
.mode sma
.STACK
.code
TEST_WRITE_HEX PROC
MOV DL,3Fh ;Move o vaor 3Fh para o regstrador DL
CALL WRITE_HEX ;Chama a sub-rotna
MOV AH,4CH ;Funo 4Ch
INT 21h ;Retorna o controe ao DOS
TEST_WRITE_HEX ENDP ;Fnaza o procedmento
PUBLIC WRITE_HEX
;........................................................;
;Este procedmento converte para hexadecma o byte ;
;armazenado no regstrador DL e mostra o dgto ;
;Use:WRITE_HEX_DIGIT ;
;........................................................;
WRITE_HEX PROC
PUSH CX ;cooca na pha o vaor do regstrador CX
PUSH DX ;cooca na pha o vaor do regstrador DX
MOV DH,DL ;move o vaor do regstrador DL para o regstrador DH
MOV CX,4 ;move o vaor 4 para o regstrador CX
SHR DL,CL
CALL WRITE_HEX_DIGIT ;mostra na tea o prmero nmero hexadecma
MOV DL,DH ;move o vaor do regstrador DH para o regstrador DL
AND DL,0Fh
CALL WRITE_HEX_DIGIT ;mostra na tea o segundo nmero hexadecma
POP DX ;retra da pha o vaor do regstrador DX
POP CX ;retra da pha o vaor do regstrador CX
RET ;Retorna o controe ao procedmento que chamou
WRITE_HEX ENDP
PUBLIC WRITE_HEX_DIGIT
;......................................................................;
;Este procedento converte os 4 bts mas baxos do regstrador DL ;
;para um nmero hexadecma e o mostrana tea do computador ;
;Use: WRITE_CHAR ;
;......................................................................;
WRITE_HEX_DIGIT PROC
PUSH DX ;cooca na pha o vaor de DX
CMP DL,10 ;compara se o nmero de bts menor do que 10
|AE HEX_LETTER ;se no, sata para HEX_LETER
ADD DL,"0" ;se sm, converte para nmero
|MP Short WRITE_DIGIT ;escreve o caracter
HEX_LETTER:
ADD DL,"A"-10 ;converte um caracter para hexadecma
WRITE_DIGIT:
CALL WRITE_CHAR ;mprme o caracter na tea
POP DX ;Retorna o vaor nca do regstrador DX
;para o regstrador DL
RET ;Retorna o controe ao procedmento que chamou
WRITE_HEX_DIGIT ENDP
PUBLIC WRITE_CHAR
;......................................................................;
;Este procedmento mprme um caracter na tea usando o D.O.S. ;
;......................................................................;
WRITE_CHAR PROC
PUSH AX ;Cooca na pha o vaor do regstarador AX
MOV AH,2 ;Funo 2h
INT 21h ;Interrupo 21h
POP AX ;Extra da pha o vaor de AX
RET ;Retorna o controe ao procedmento que chamou
WRITE_CHAR ENDP
END TEST_WRITE_HEX ;Fnaza o programa
Ouarto exempo
;nome do programa: four.asm
.mode sma
.stack
.code
TEST_WRITE_DECIMAL PROC
MOV DX,12345 ;Move o vaor decma 12345 para o regstrador DX
CALL WRITE_DECIMAL ;Chama o procedmento
MOV AH,4CH ;Funo 4Ch
INT 21h ;Interrupo 21h
TEST_WRITE_DECIMAL ENDP ;Fnaza o procedmento
PUBLIC WRITE_DECIMAL
;.................................................................;
;Este procedmento escreve um nmero de 16 bt como um nmero ;
;sem sna em notao decma ;
;Use: WRITE_HEX_DIGIT ;
;.................................................................;
WRITE_DECIMAL PROC
PUSH AX ;Pe na pha o vaor do regstrador AX
PUSH CX ;Pe na pha o vaor do regstrador CX
PUSH DX ;Pe na pha o vaor do regstrador DX
PUSH SI ;Pe na pha o vaor do regstrador SI
MOV AX,DX ;move o vaor do regstrador DX para AX
MOV SI,10 ;move o vaor 10 para o regstrador SI
XOR CX,CX ;zera o regstrador CX
NON_ZERO:
XOR DX,DX ;zera o regstrador CX
DIV SI ;dvzo entre SI
PUSH DX ;Pe na pha o vaor do regstrador DX
INC CX ;ncrementa CX
OR AX,AX ;no zero
|NE NON_ZERO ;sata para NON_ZERO
WRITE_DIGIT_LOOP:
POP DX ;Retorna o vaor em modo reverso
CALL WRITE_HEX_DIGIT ;Chama o procedmento
LOOP WRITE_DIGIT_LOOP ;oop
END_DECIMAL:
POP SI ;retra da pha o vaor do regstrador SI
POP DX ;retra da pha o vaor do regstrador DX
POP CX ;retra da pha o vaor do regstrador CX
POP AX ;retra da pha o vaor do regstrador AX
RET ;Retorna o controe ao procedmento que chamou
WRITE_DECIMAL ENDP ;Fnaza o procedmento
PUBLIC WRITE_HEX_DIGIT
;......................................................................;
; ;
;Este procedmento converte os 4 bts mas baxos do regstrador DL ;
;num nmero hexadecma e os mprme ;
;Use: WRITE_CHAR ;
;......................................................................;
WRITE_HEX_DIGIT PROC
PUSH DX ;Pe na pha o vaor do regstrador DX
CMP DL,10 ;Compara o vaor 10 com o vaor do regstrador DL
|AE HEX_LETTER ;se no, sata para HEX_LETER
ADD DL,"0" ;se , converte em dgto numrco
|MP Short WRITE_DIGIT ;escreve o caracter
HEX_LETTER:
ADD DL,"A"-10 ;converte um caracter para um nmero hexadecma
WRITE_DIGIT:
CALL WRITE_CHAR ;mostra o caracter na tea
POP DX ;Retorna o vaor nca para o regstrador DL
RET ;Retorna o controe ao procedmento que chamou
WRITE_HEX_DIGIT ENDP
PUBLIC WRITE_CHAR
;......................................................................;
;Este procedmento mprme um caracter na tea usando uma funo D.O.S.;
;......................................................................;
WRITE_CHAR PROC
PUSH AX ;Pe na pha o vaor do regstrador AX
MOV AH,2h ;Funo 2h
INT 21h ;Interrupo 21h
POP AX ;Retra da pha o vaor nca do regstrador AX
RET ;Retorna o controe ao procedmento que chamou
WRITE_CHAR ENDP
END TEST_WRITE_DECIMAL ;fnaza o programa
Este programa mostra na tea os nmeros 12345
Ounto exempo
;nome do programa: fve.asm
.mode sma
.stack
.code
PRINT_ASCII PROC
MOV DL,00h ;move o vaor 00h para o regstrador DL
MOV CX,255 ;move o vaor decma 255 para o regstrador CX
;usado para fazer um ao com 255 nteraes
PRINT_LOOP:
CALL WRITE_CHAR ;Chama o procedmento que mprme
INC DL ;Incrementa o vaor do regstrador DL
LOOP PRINT_LOOP ;Loop para mprmr 10 caracteres
MOV AH,4Ch ;Funo 4Ch
INT 21h ;Interrupo 21h
PRINT_ASCII ENDP ;Fnaza o procedmento
WRITE_CHAR PROC
MOV AH,2h ;Funo 2h para mprmr um caracter
INT 21h ;Imprme o caracter que est em DL
RET ;Retorna o controe ao procedemento que chamou
WRITE_CHAR ENDP ;Fnaza o procedmento
END PRINT_ASCII ;Fnaza o programa
Este programa mostra na tea o vaor dos 256 caracteres do cdgo ASCII.
*****************************************************************************
CAPTULO 8: BIBLIOGRAFIA
Crdtos:
Monco Brseo C., Engenhero
Ida Orgna
Desenvovmento e Impementao da edo 1996
Hugo Eduardo Prez P.
Desenvovmento e Impementao da edo 1995
Vctor Hugo Ava B.
Verso Ingesa
|eferson Boteho do Amara
Verso Portuguesa
Ana Mara Peraza
Programadora de Lnguagem Assemby
Gracea Sacedo Manca
Programadora Tc/Tk
|uan Omos Monroy
Desgner Grfco

Referncas Bbogrfcas:
Assemby Language For IBM Mcrocomputers
|. Terry Godfrey
Prentce Ha Hspanoamercana, S.A.
Mexco
Basc Assember
A. Ro|as
Ed Computec Edtores S.A. de C.V.
Mexco
IBM Persona Computer Assemby Language Tutora
|oshua Auerbach
Yae Unversty
Organzao Estruturada de Computadores
Andrew S. Tanenbaum
Prentce Ha do Bras
Gua do Programador para as Pacas EGA e VGA
Rchard F. Ferraro
Ed. Cnca Moderna
Programando em Assember 8086/8088
|eremas R. D. Perera dos Santos
Edson Raymund |unor
McGraw-H
Assemby IBM PC - Tcncas de Programao
Aan R. Mer
EBRAS, Edtora Brasera
Lnguagem Assemby para IBM PC
Peter Norton
|ohn Socha
Edtora Campus
C - Caxa de Ferramentas
Caros Augusto P. Gomes
Antono Caros Barbosa
Edtora rca
Interrupes MS-DOS, ROM-BIOS
Eurco Soahero Brs
McGraw-H
Desenvovmento de Software Bsco
Leand L. Beck
Edtora Campus
Programao Assemby 80386 - Gua Prtco para Programadores
Ross P. Neson
McGraw-H

Vous aimerez peut-être aussi