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