Anda di halaman 1dari 145

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.Bbograa


*****************************************************************************
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 congurao 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 decodcar 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 casscados 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 dentcada 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 tas e os dscos magntcos.
A nformao a armazenada ser dvdda em arquvos. Um arquvo feto de
um nmero varve de regstros, geramente de tamanho xo, 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 p-ops.
Um p-op 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 p-op 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
codcadas 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 centca
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 utuante

2.2.2.1.Cdgo ASCII
ASCII sgnca 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
necente no aspecto numrco, uma vez que no formato bnro 1 byte no
sucente para representar nmeros de 0 a 255, com o ASCII podemos
representar apenas um dgto.
Devdo a esta necnca, o cdgo ASCII usado, prncpamente, para a
representao de textos.

2.2.2.2.Mtodo BCD
BCD sgnca 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 utuante
Esta representao baseada em notao centca, 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 m 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.
* Codcao do agortmo, o que consste em escrever o programa
em aguma nguagem de programao; nguagem assemby neste caso
especco, 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
especco. 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 especco
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, sgnca 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 sgnca 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 especcar um endereo nca para o nosso
programa como o parmetro, mas opcona. No caso de omsso, o endereo
nca o especcado 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 namente a nstruo nop (nenhuma operao)
naza 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 na 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
na 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 vercar 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 na 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
Dene o meo de memra a usar em nosso programa
.CODE
Dene 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 ;naza 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 e: 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 especco 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 ohset.
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 sgncado 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 deno 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 verca 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 m de gar as dversas possves partes de cdgo,
dzendo ao oader que o segmento e o token em questo so dendos 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 ;naza 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 e: 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 dendos 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 vercar 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 ag. Normamente os ags do regstrador que podem ser
manuseados dretamente peo programador so os da dreo de dados DF,
usado
para denr as operaes sobre cadeas. Uma outro que pode tambm ser
manuseado o ag 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 modcar 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 namente 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 especcas 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 especcado 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 ags para o regstrador AH.
Sntaxe:
LAHF
Esta nstruo t para vercar o estado dos ags durante a execuo
do nosso programa.
Os ags so dexados na segunte ordem dentro do regstrador:
SF ZF ?? AF ?? PF ?? CF
O "??" sgnca que haver um vaor ndendo 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 especcado 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 especcado 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 ags armazenados na pha.
Sntaxe:
POPF
Este comando transfere os bts da paavra armazenada na parte mas ata da
pha para regstrador de ag.
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 modcado.
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 ags na pha.
Sntaxe:
PUSHF
Este comando decrementa de 2 o vaor do regstrador SP e ento o contedo do
regstrador de ag transferdo para a pha, no endereo ndcado por SP.
Os ags 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 ag.

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 ag CF,
exstente antes da operao. Apenas o operando destno e os ags 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 ag

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 ags 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 ag CF ou o ag 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 ags 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 ags 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 ags tomado.
Sntaxe:
|NO smboo
A nstruo sata se no h overow
O sato feto se OF = 0.

INSTRUO |NP (|PO)
Propsto: Sato condcona, e o estado dos ags 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 ags 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 ags tomado.
Sntaxe:
|O smboo
A nstruo sata se h overow.
O sato feto se OF = 1.

INSTRUO |P (|PE)
Propsto: Sato condcona, e o estado dos ags 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 ags 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 ags.
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 ags.

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
ags, mas sem devover o resutado da subtrao.
A nstruo automatcamente ncrementa ou decrementa os regstradores de
ndce SI e DI, dependendo do vaor do ag 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 prexo 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 ag.
Estas nstrues afetam dretamente o contedo dos ags.
CLC
CLD
CLI
CMC
STC
STD
STI

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

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

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

INSTRUO CMC
Propsto: Compementar o ag de carry.
Sntaxe:
CMC
Esta nstruo compementa o estado do ag 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 ag.

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

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

INSTRUO STI
Propsto: Atvar o ag de nsterrupo.
Sntaxe:
STI
Esta nstruo atva o ag 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 modc-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
sgnca serem especcas 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 especcar 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 buher
3FH Letura de um dspostvo/arquvo
Funes para trabahar com arquvos.
Nesta seo so apenas especcadas 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 modca 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
m 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 buher.
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
dendo. 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 nazar 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 m 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 especcao 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 m do arquvo, 2 se h um erro de especcao no FCB e 3 se um
regstro fo
do parcamente ou o pontero de arquvo est no m do mesmo.
Esta funo o regstro especcado 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
especcao FCB.
Escreve o regstro especcado 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 especcado numa
cadea ASCII de bytes termnados peo caracter 0.
O arquvo crado conter os atrbutos dendos 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 especcado 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 especca de bytes de um arquvo aberto e armazen-os
num buher especco.
--------------- // ---------------

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 denda 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 dendo, 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
especcado 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 grco)
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 grco)
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 ag zero, sgnca que h nformao no buher de
tecado na memra. Caso contrro, o buher est vazo. Portanto o vaor do
regstrador AH ser o vaor da teca armazenada no buher.
--------------- // ---------------

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 codcado 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 denda no regstrador DX pode ser: LPT1=0, LPT2=1, assm por
dante.
O estado da mpressora codcado 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 denda no regstrador DX pode ser: LPT1=0, LPT2=1, assm por
dante.
O estado da mpressora codcado 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 |ustcado 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 dendas.
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 denr 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 denr a rea de transfernca de arquvo ou DTA.
Para a etura seqenca usaremos a funo 14H da nterrupo 21h.
O regstro a ser do dendo peos campos regstro e boco corrente. O
regstrador AL retorna o estado da operao. Se AL contm o vaor 1 ou 3,
sgnca que fo atngdo o m do arquvo. Um vaor 2, por sua vez,
sgnca 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, sgnca
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 denrmos 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.Deno de procedmento
6.1.2.Sntaxe de um procedmento
--------------- // ---------------

6.1.1.Deno 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 modcar.
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 m 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 exbdade na programao, comparadas aos
procedmentos.
--------------- // ---------------

6.2.Macros
6.2.1.Deno de uma Macro
6.2.2.Sntaxe de uma Macro
6.2.3.Bbotecas de Macros
6.2.1.Deno de uma Macro
Uma macro um grupo de nstrues repettvas em um programa que so
codcadas 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
especcado na hora da chamada.
Podemos dzer, desta forma, que um procedmento uma extenso de um
determnado programa, enquanto que uma macro um mduo que especca
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 na especcado
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 ag 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 modca o estado do ag 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 e: 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 ;naza 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 ;naza o programa
Este programa mostra na tea os nmeros 12345
Ounto exempo
;nome do programa: ve.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 Grco

Referncas Bbogrcas:
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

Anda mungkin juga menyukai