Vous êtes sur la page 1sur 16

Page 1 of 16

University of Guadalajara Information Sistems General Coordination. Culture and Entertainment Web June 12th 1995 Copyright(C)1995-1996 ***************************************************************************** * Este tutorial foi traduzido para o Portugus por Jeferson Amaral. * * e-mail: amaral@inf.ufsm.br * ***************************************************************************** Este tutorial tem o intuito de apenas introduzir o leitor ao mundo da programacao em Linguagem Assembly, nao tem, portanto e de forma alguma, plano de esgotar o assunto. Copyright (C) 1995-1996, Hugo Perez Perez. Anyone may reproduce this document, in provided that: whole or in part,

(1) any copy or republication of the entire document must show University of Guadalajara as the source, and must include this notice; and (2) any other use of this material must reference this manual and University of Guadalajara, and the fact that the material is copyright by Hugo Perez and is used by permission. **************************************************************************** T U T O R I A L --------------D E --L I N G U A G E M ----------------Contedo: 1.Introduo 2.Conceitos B sicos 3.Programao Assembly 4.Instrues Assembly 5.Interrupes e gerncia de arquivos 6.Macros e procedimentos 7.Exemplos de programas 8.Bibliografia ***************************************************************************** CAPTULO 1: INTRODUO Contedo: 1.1.O que h de novo neste material 1.2.Apresentao 1.3.Por que aprender Assembly? 1.4.Ns precisamos da sua opinio --------------- // --------------1.1.O que h de novo neste material: A S S E M B L Y ---------------

Aps um ano da realizao da primeira verso do tutorial, e atravs das opinies recebidas por e-mail, resolvemos ter por disposio todos estes coment rios e sugestes. Esperamos que atravs deste novo material Assembly, as pessoas que se mostrarem interessadas possam aprender mais sobre o seu IBM PC. Esta nova edio do tutorial inclui:

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 2 of 16

Uma seo completa sobre como usar o programa debug. Mais exemplos de programas. Um motor de pesquisa, para qualquer tpico ou item relacionado esta nova verso. Consider vel reorganizao e reviso do material Assembly. Em cada seo, h um link para o Dicion rio On-line de Computao de Dennis Howe. 1.2.Apresentao: Este tutorial destina-se quelas pessoas que nunca tiveram contato com a Linguagem Assembly. O tutorial est completamente focado em computadores com processadores 80x86 da famlia Intel, e considerando que a base da linguagem o funcionamento dos recursos internos do processador, os exemplos descritos no so compatveis com qualquer outra arquitetura. As informaes esto dispostas em unidades ordenadas para permitir f cil acesso a cada tpico, bem como uma melhor navegao pelo tutorial. Na seo introdutria so mencionados alguns conceitos elementares sobre computadores e a Linguagem Assembly em si. 1.3.Por que aprender Assembly? A primeira razo para se trabalhar com o assembler a oportunidade de conhecer melhor o funcionamento do seu PC, o que permite o desenvolvimento de programas de forma mais consistente. A segunda razo que voc pode ter um controle total sobre o PC ao fazer uso do assembler. Uma outra razo que programas assembly so mais r pidos, menores e mais poderosos do que os criados com outras linguagens. Ultimamente, o assembler (montador) permite uma otimizao ideal nos programas, seja no seu tamanho ou execuo. 1.4.Ns precisamos da sua opinio: Nosso intuito oferecer um modo simples para que voc consiga aprender Assembly por si mesmo. Por tanto, qualquer coment rio ou sugesto ser bem-vinda. ***************************************************************************** CAPTULO 2: CONCEITOS BSICOS Contedo: 2.1.Descrio b sica de um sistema computacional. 2.2.Conceitos b sicos da Linguagem Assembly 2.3.Usando o programa debug --------------- // --------------Esta seo tem o propsito de fazer um breve coment rio a respeito dos principais componentes de um sistema computacional, o que ir permitir ao usu rio uma melhor compreenso dos conceitos propostos no decorrer do tutorial.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 3 of 16

2.1.DESCRIO DE UM SISTEMA COMPUTACIONAL Contedo: 2.1.1.Processador Central 2.1.2.Memria Principal 2.1.3.Unidades de Entrada e Sada 2.1.4.Unidades de Memria Auxiliar Sistema Computacional. Chamamos de Sistema Computacional a completa configurao de um computador, incluindo os perifricos e o sistema operacional. 2.1.1.Processador Central. tambm conhecido por CPU ou Unidade Central de Processamento, que por sua vez composta pela unidade de controle e unidade de lgica e aritmtica. Sua funo consiste na leitura e escrita do contedo das clulas de memria, regular o tr fego de dados entre as clulas de memria e registradores especiais, e decodificar e executar as instrues de um programa. O processador tem uma srie de clulas de memria usadas com freq ncia e, dessa forma, so partes da CPU. Estas clulas so conhecidas com o nome de registradores. Um processador de um PC possui cerca de 14 registradores. Como os PCs tem sofrido evoluo veremos que podemos manipular registradores de 16 ou 32 bits. A unidade de lgica e aritmtica da CPU realiza as operaes relacionadas ao c lculo simblico e numrico. Tipicamente estas unidades apenas so capazes de realizar operaes elementares, tais como: adio e subtrao de dois nmeros inteiros, multiplicao e diviso de nmero inteiro, manuseio de bits de registradores e comparao do contedo de dois registradores. Computadores pessoais podem ser classificados pelo que conhecido como tamanho da palavra, isto , a quantidade de bits que o processador capaz de manusear de uma s vez. 2.1.2.Memria Principal. um grupo de clulas, agora sendo fabricada com semi-condutores, usada para processamentos gerais, tais como a execuo de programas e o armazenamento de informaes para operaes. Cada uma das clulas pode conter um valor numrico e capaz de ser endereada, isto , pode ser identificada de forma singular em relao s outras clulas pelo uso de um nmero ou endereo. O nome genrico destas memrias Random Access Memory ou RAM. A principal desvantagem deste tipo de memria o fato de que seus circuitos integrados perdem a informao que armazenavam quando a energia eltrica for interrompida, ou seja, ela vol til. Este foi o motivo que levou criao de um outro tipo de memria cuja informao no perdida quando o sistema desligado. Estas memrias receberam o nome de Read Only Memory ou ROM. 2.1.3.Unidades de Entrada e Sada. Para que o computador possa ser til para ns se faz necess rio que o

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 4 of 16

processador se comunique com o exterior atravs de interfaces que permitem a entrada e a sada de informao entre ele e a memria. Atravs do uso destas comunicaes possvel introduzir informao a ser processada e mais tarde visualizar os dados processados. Algumas das mais comuns unidades de entrada so o teclado e o mouse. As mais comuns unidades de sada so a tela do monitor e a impressora. 2.1.4.Unidades de Memria Auxiliar. Considerando o alto custo da memria principal e tambm o tamanho das aplicaes atualmente, vemos que ela muito limitada. Logo, surgiu a necessidade da criao de dispositivos de armazenamento pr ticos e econmicos. Estes e outros inconvenientes deram lugar s unidades de memria auxiliar, perifricos. As mais comuns so as fitas e os discos magnticos. A informao ali armazenada ser dividida em arquivos. Um arquivo feito de um nmero vari vel de registros, geralmente de tamanho fixo, podendo conter informao ou programas. --------------- // --------------2.2.CONCEITOS BSICOS 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.Unidades de informao 2.2.1.2.Sistemas numricos 2.2.1.3.Convertendo nmeros bin rios para decimais 2.2.1.4.Convertendo nmeros decimais para bin rios 2.2.1.5.Sistema hexadecimal

2.2.1.1.Unidades de informao Para o PC processar a informao, necess rio que ela esteja em clulas especiais, chamadas registradores. Os registradores so grupos de 8 ou 16 flip-flops. Um flip-flop um dispositivo capaz de armazenar 2 nveis de voltagem, um baixo, geralmente 0.5 volts, e outro comumente de 5 volts. O nvel baixo de energia no flip-flop interpretado como desligado ou 0, e o nvel alto, como ligado ou 1. Estes estados so geralmente conhecidos como bits, que so a menor unidade de informao num computador. Um grupo de 16 bits conhecido como palavra; uma palavra pode ser dividida em grupos de 8 bits chamados bytes, e grupos de 4 bits chamados nibbles.

2.2.1.2.Sistemas numricos

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 5 of 16

O sistema numrico que ns usamos diariamente o decimal, mas este sistema no conveniente para m quinas, pois ali as informaes tm que ser codificadas de modo a interpretar os estados da corrente (ligado-desligado); este modo de cdigo faz com que tenhamos que conhecer o c lculo posicional que nos permitir expressar um nmero em qualquer base onde precisarmos dele. possvel representar um determinado nmero em qualquer base atravs da seguinte frmula: Onde n a posio do dgito, iniciando da direita para a esquerda e numerando de 0. D o dgito sobre o qual ns operamos e B a base numrica usada. 2.2.1.3.Convertendo nmeros bin rios para decimais Quando trabalhamos com a Linguagem Assembly encontramos por acaso a necessidade de converter nmeros de um sistema bin rio, que usado em computadores, para o sistema decimal usado pelas pessoas. O sistema bin rio baseado em apenas duas condies ou estados, estar ligado(1), ou desligado(0), portanto sua base dois. Para a converso, podemos usar a frmula de valor posicional: Por exemplo, se tivermos o nmero bin rio 10011, tomamos cada dgito da direita para a esquerda e o multiplicamos pela base, elevando potncia correspondente sua posio relativa: Binary: Decimal: = 1 1*2^0 1 1 0 0 1

+ 1*2^1 + 0*2^2 + 0*2^3 + 1*2^4 + 2 + 0 + 0 + 16 = 19 decimal.

O caracter ^ usado em computao como smbolo para potncia e * para a multiplicao. 2.2.1.4.Convertendo nmeros decimais para bin rio H v rios mtodos para se converter nmeros decimais para bin rio; apenas um ser analizado aqui. Naturalmente a converso com uma calculadora cientfica muito mais f cil, mas nem sempre podemos contar com isso, logo o mais conveniente , ao menos, sabermos uma frmula para faz-la. O mtodo resume-se na aplicao de divises sucessivas por 2, mantendo o resto como o dgito bin rio e o resultado como o prximo nmero a ser dividido. Tomemos como exemplo o nmero decimal 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 construir o equivalente bin rio de 43, vamos pegar os restos obtidos de baixo para cima, assim temos 101011. 2.2.1.5.Sistema hexadecimal Na base hexadecimal temos 16 dgitos, que vo de 0 a 9 e da letra A at a F,

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 6 of 16

estas letras 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 bin rios e hexadecimais f cil. A primeira coisa a fazer dividir o nmero bin rio em grupos de 4 bits, comeando da direita para a esquerda. Se no grupo mais direita sobrarem dgitos, completamos com zeros. Tomando como exemplo o nmero bin rio 101011, vamos dividi-lo em grupos de 4 bits: 10;1011 Preenchendo o ltimo grupo com zeros (o um mais esquerda): 0010;1011 A seguir, tomamos cada grupo como um nmero independente e consideramos o seu valor decimal: 0010=2;1011=11 Entretanto, observa-se que no podemos representar este nmero como 211, isto seria um erro, uma vez que os nmeros em hexa maiores que 9 e menores que 16 so representados pelas letras A,B,...,F. Logo, obtemos como resultado: 2Bh, onde o "h" representa a base hexadecimal. Para a converso de um nmero hexadecimal em bin rio apenas necess rio inverter os passos: tomamos o primeiro dgito hexadecimal e o convertemos para bin rio, a seguir o segundo, e assim por diante. --------------- // --------------2.2.2.Mtodos de representao de dados num computador. 2.2.2.1.Cdigo ASCII 2.2.2.2.Mtodo BCD 2.2.2.3.Representao de ponto flutuante

2.2.2.1.Cdigo ASCII ASCII significa American Standard Code for Information Interchange. Este cdigo contm as letras do alfabeto, dgitos decimais de 0 a 9 e alguns smbolos adicionais como um nmero bin rio de 7 bits, tendo o oitavo bit em 0, ou seja, desligado. Deste modo, cada letra, dgito ou caracter especial ocupa 1 byte na memria do computador. Podemos observar que este mtodo de representao de dados muito ineficiente no aspecto numrico, uma vez que no formato bin rio 1 byte no suficiente para representar nmeros de 0 a 255, com o ASCII podemos representar apenas um dgito. Devido a esta ineficincia, o cdigo ASCII usado, principalmente, para a representao de textos.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 7 of 16

2.2.2.2.Mtodo BCD BCD significa Binary Coded Decimal. Neste mtodo grupos de 4 bits so usados para representar cada dgito decimal de 0 a 9. Com este mtodo podemos representar 2 dgitos por byte de informao. Vemos que este mtodo vem a ser muito mais pr tico para representao numrica do que o cdigo ASCII. Embora ainda menos pr tico do que o bin rio, com o mtodo BCD podemos representar dgitos de 0 a 99. Com o bin rio, vemos que o alcance maior, de 0 a 255. Este formato (BCD) principalmente usado na representao de nmeros grandes, aplicaes comerciais, devido s suas facilidades de operao. 2.2.2.3.Representao de ponto flutuante Esta representao baseada em notao cientfica, isto , representar um nmero em 2 partes: sua base e seu expoente. Por exemplo o nmero decimal 1234000, representado como 1.234*10^6, observamos que o expoente ir indicar o nmero de casas que o ponto decimal deve ser movido para a direita, a fim de obtermos o nmero original. O expoente negativo, por outro lado, indica o nmero de casas que o ponto decimal deve se locomover para a esquerda.

--------------- // --------------2.3.PROGRAMA DEBUG Contedo: 2.3.1.Processo de criao de programas 2.3.2.Registradores da CPU 2.3.3.Programa debug 2.3.4.Estrutura Assembly 2.3.5.Criando um programa assembly simples 2.3.6.Armazenando e carregando os programas

2.3.1.Processo de criao de programas. Para a criao de programas so necess rios os seguintes passos: * Desenvolvimento do algoritmo, est gio em que o problema a ser solucionado estabelecido e a melhor soluo proposta, criao de diagramas esquem ticos relativos melhor soluo proposta. * Codificao do algoritmo, o que consiste em escrever o programa em alguma linguagem de programao; linguagem assembly neste caso especfico, tomando como base a soluo proposta no passo anterior. * A transformao para a linguagem de m quina, ou seja, a criao do programa objeto, escrito como uma seq ncia de zeros e uns que podem ser interpretados pelo processador. * O ltimo est gio a eliminao de erros detectados no programa na fase de teste. A correo normalmente requer a repetio de todos os passos, com observao atenta.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 8 of 16

2.3.2.Registradores da CPU. Para o propsito did tico, vamos focar registradores de 16 bits. A CPU possui 4 registradores internos, cada um de 16 bits. So eles AX, BX, CX e DX. So registradores de uso geral e tambm podem ser usados como registradores de 8 bits. Para tanto devemos referenci -los como, por exemplo, AH e AL, que so, respectivamente, o byte high e o low do registrador AX. Esta nomenclatura tambm se aplica para os registradores BX, CX e DX. Os registradores, segundo seus respectivos nomes: AX Registrador Acumulador BX Registrador Base CX Registrador Contador DX Registrador de Dados DS Registrador de Segmento de Dados ES Registrador de Segmento Extra SS Registrador de Segmento de Pilha CS Registrador de Segmento de Cdigo BP Registrador Apontador da Base SI Registrador de ndice Fonte DI Registrador de ndice Destino SP Registrador Apontador de Pilha IP Registrador Apontador da Prxima Instruo F Registrador de Flag

2.3.3.Programa Debug. Para a criao de um programa em assembler existem 2 opes: usar o TASM Turbo Assembler da Borland, ou o DEBUGGER. Nesta primeira seo vamos usar o debug, uma vez que podemos encontr -lo em qualquer PC com o MS-DOS. Debug pode apenas criar arquivos com a extenso .COM, e por causa das caractersticas deste tipo de programa, eles no podem exceder os 64 Kb, e tambm devem iniciar no endereo de memria 0100H dentro do segmento especfico. importante observar isso, pois deste modo os programas .COM no so reloc veis. Os principais comandos do programa debug so: A D E G N P Q R T U W Montar instrues simblicas em cdigo de m quina Mostrar o contedo de uma rea da memria Entrar dados na memria, iniciando num endereo especfico Rodar um programa execut vel na memria Dar nome a um programa Proceder, ou executar um conjunto de instrues relacionadas Sair do programa debug Mostrar o contedo de um ou mais registradores Executar passo a passo as instrues Desmontar o cdigo de m quina em instrues simblicas Gravar um programa em disco

possvel visualizar os valores dos registradores internos da CPU usando o programa Debug. Debug um programa que faz parte do pacote do DOS, e pode ser encontrado normalmente no diretrio C:\DOS. Para inici -lo, basta digitar Debug na linha de comando: C:/>Debug [Enter] -

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 9 of 16

Voc notar ento a presena de um hfen no canto inferior esquerdo da tela. No se espante, este o prompt do programa. Para visualizar o contedo dos registradores, experimente: -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 registradores internos da CPU; um modo alternativo para visualizar um nico registrador usar o camando "r" seguido do parmetro que faz referncia ao nome do registrador: -rbx BX 0000 : Esta instruo mostrar Debug de "-" para ":" o contedo do registrador BX e mudar o indicador do

Quando o prompt assim se tornar, significa que possvel, embora no obrigatria, a mudana do valor contido no registrador, bastando digitar o novo valor e pressionar [Enter]. Se voc simplesmente pressionar [Enter] o valor antigo se mantm. 2.3.4.Estrutura Assembly. Nas linhas do cdigo em Linguagem Assembly h duas partes: a primeira o nome da instruo a ser executada; a segunda, os parmetros do comando. Por exemplo: add ah bh Aqui "add" o comando a ser executado, neste caso uma adio, e "ah" bem como "bh" so os parmetros. Por exemplo: mov al, 25 No exemplo acima, estamos usando a instruo mov, que significa mover o valor 25 para o registrador al. O nome das instrues nesta linguagem constitudo de 2, 3 ou 4 letras. Estas instrues so chamadas mnemnicos ou cdigos de operao, representando a funo que o processador executar . s vezes instrues aparecem assim: add al,[170] Os colchetes no segundo parmetro indica-nos que vamos trabalhar com o contedo da clula de memria de nmero 170, ou seja, com o valor contido no endereo 170 da memria e no com o valor 170, isto conhecido como "endereamento direto".

2.3.5.Criando um programa simples em assembly.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 10 of 16

No nos responsabilizaremos pela m execuo ou possveis danos causados por quaisquer exemplos que de agora em diante aparecero, uma vez que os mesmos, apesar de testados, so de car ter did tico. Vamos, ento, criar um programa para ilustrar o que vimos at agora. Adicionaremos dois valores: O primeiro passo iniciar o Debug, o que j vimos como fazer anteriormente.

Para montar um programa no Debug, usado o comando "a" (assemble); quando usamos este comando, podemos especificar um endereo inicial para o nosso programa como o parmetro, mas opcional. No caso de omisso, o endereo inicial o especificado pelos registradores CS:IP, geralmente 0100h, o local em que programas com extenso .COM devem iniciar. E ser este o local que usaremos, uma vez que o Debug s pode criar este tipo de programa. Embora neste momento no seja necess rio darmos um parmetro ao comando "a", isso recomend vel para evitar problemas, logo: 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 valor 0002 para o registrador ax, move o valor 0004 para o registrador bx, adiciona o contedo dos registradores ax e bx, guardando o resultado em ax e finalmente a instruo nop (nenhuma operao) finaliza o programa. No programa debug, a tela se parecer C:\>debug -a 100 0D62:0100 0D62:0103 0D62:0106 0D62:0108 0D62:0109 com:

mov ax,0002 mov bx,0004 add ax,bx nop

Entramos com o comando "t" para executar passo a passo as instrues: -t AX=0002 BX=0000 DS=0D62 ES=0D62 0D62:0103 BB0400 CX=0000 DX=0000 SP=FFEE SS=0D62 CS=0D62 IP=0103 MOV BX,0004 BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC

Vemos o valor 0002 no registrador AX. Teclamos "t" para executar a segunda instruo: -t AX=0002 BX=0004 DS=0D62 ES=0D62 0D62:0106 01D8 CX=0000 DX=0000 SP=FFEE SS=0D62 CS=0D62 IP=0106 ADD AX,BX BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC

Teclando "t" novamente para ver o resultado da instruo add: -t AX=0006 BX=0004 DS=0D62 ES=0D62 0D62:0108 90 CX=0000 DX=0000 SS=0D62 CS=0D62 NOP SP=FFEE IP=0108 BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PE NC

A possibilidade dos registradores conterem valores diferentes existe, mas AX

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 11 of 16

e BX devem conter os mesmos valores acima descritos. Para sair do Debug usamos o comando "q" (quit).

2.3.6.Armazenando e carregando os programas. No seria pr tico ter que digitar o programa cada vez que inici ssemos o Debug. Ao invs disso, podemos armazen -lo no disco. S que o mais interessante nisso que um simples comando de salvar cria um arquivo com a extenso .COM, ou seja, execut vel - sem precisarmos efetuar os processos de montagem e ligao, como veremos posteriormente com o TASM. Eis os passos para salvar um programa que j esteja na memria:

* Obter o tamnho do programa subtraindo o endereo final do endereo inicial, naturalmente que no sistema hexadecimal. * Dar um nome ao programa. * Colocar o tamanho do programa no registrador CX. * Mandar o debug gravar o programa em disco. Usando como exemplo o seguinte programa, vamos clarear a idia de como realizar os passos acima descritos: 0C1B:0100 0C1B:0103 0C1B:0106 0C1B:0108 0C1B:010A mov mov add int ax,0002 bx,0004 ax,bx 20

Para obter o tamanho de um programa, o comando "h" usado, j que ele nos mostra a adio e subtrao de dois nmeros em hexadecimal. Para obter o tamanho do programa em questo, damos como parmetro o valor do endereo final do nosso programa (10A), e o endereo inicial (100). O primeiro resultado mostra-nos a soma dos endereos, o segundo, a subtrao. -h 10a 100 020a 000a O comando "n" permite-nos nomear o programa. -n test.com O comando "rcx" permite-nos mudar o contedo do registrador CX para o valor obtido como tamanho do arquivo com o comando "h", neste caso 000a. -rcx CX 0000 :000a Finalmente, o comando "w" grava nosso programa no disco, indicando quantos bytes gravou. -w Writing 000A bytes Para j salvar um arquivo quando carreg -lo, 2 passos so necess rios: Dar o nome do arquivo a ser carregado. Carreg -lo usando o comando "l" (load). Para obter o resultado correto destes passos, necess rio que o programa acima j esteja criado.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 12 of 16

Dentro do Debug, escrevemos o seguinte: -n test.com -l -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 ltimo comando "u" usado para verificar que o programa foi carregado na memria. O que ele faz desmontar o cdigo e mostr -lo em assembly. Os parmetros indicam ao Debug os endereos inicial e final a serem desmontados. O Debug sempre carrega os programas na memria no endereo 100h, conforme j comentamos. ***************************************************************************** CAPTULO 3: PROGRAMAO ASSEMBLY Contedo: 3.1.Construindo programas em Assembly 3.2.Processo Assembly 3.3.Pequenos programas em Assembly 3.4.Tipos de instrues --------------- // --------------3.1.Construindo programas em Assembly. 3.1.1.Software necess rio 3.1.2.Programao Assembly 3.1.1.SOFTWARE NECESSRIO Para que possamos criar um programa, precisamos de algumas ferramentas: Primeiro de um editor para criar o programa fonte. Segundo de um montador, um programa que ir transformar nosso fonte num programa objeto. E, terceiro, de um linker (ligador) que ir gerar o programa execut vel a partir do programa objeto. O editor pode ser qualquer um que dispusermos. O montador ser o TASM macro assembler da Borland, e o linker ser o TLINK, tambm da Borland. Ns devemos criar os programas fonte com a extenso .ASM para que o TASM reconhea e o transforme no programa objeto, um "formato intermedi rio" do programa, assim chamado porque ainda no um programa execut vel e to pouco um programa fonte. O linker gera a partir de um programa .OBJ, ou da combinao de v rios deles, um programa execut vel, cuja extenso normalmente .EXE, embora possa ser .COM dependendo da forma como for montado e ligado. 3.1.2.PROGRAMAO ASSEMBLY Para construirmos os programas com o TASM, devemos estruturar o fonte de forma diferenciada ao que fazamos com o programa debug.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 13 of 16

importante incluir as seguintes diretivas assembly: .MODEL SMALL Define o melo de memria a usar em nosso programa .CODE Define as instrues do programa, relacionado ao segmento de cdigo .STACK Reserva espao de memria para as instrues de programa na pilha END Finaliza um programa assembly Vamos programar Primeiro passo Use qualquer editor para criar o programa fonte. Entre com as seguintes linhas: Primeiro exemplo ; use ; para .MODEL SMALL .STACK .CODE mov ah,01h mov cx,07h int 10h mov ah,4ch int 21h END fazer coment rios em programas assembly ;modelo de memria ;espao de memria para instrues do programa na pilha ;as linhas seguintes so instrues do programa ;move o valor 01h para o registrador ah ;move o valor 07h para o registrador cx ;interrupo 10h ;move o valor 4ch para o registrador ah ;interrupo 21h ;finaliza o cdigo do programa

Este programa assembly muda o tamanho do cursor. Segundo passo Salvar o arquivo com o seguinte nome: exam1.asm No esquecer de salv -lo no formato ASCII. Terceiro passo Usar o programa TASM para construir o programa objeto. Exemplo: C:\>tasm exam1.asm Turbo Assembler Version 2.0 Assembling file: Error messages: Warning messages: Passes: Remaining memory: exam1.asm None None 1 471k Copyright (c) 1988, 1990 Borland International

O TASM s pode criar programas no formato .OBJ, que ainda no pode ser executado... Quarto passo Usar o programa TLINK para criar o programa execut vel.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 14 of 16

Exemplo: C:\>tlink exam1.obj Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International C:\> Onde exam1.obj o nome do programa intermedi rio, .OBJ. O comando acima gera diretamente o arquivo com o nome do programa intermedi rio e a extenso .EXE. opcional a colocao da extenso .obj no comando. Quinto passo Executar o programa execut vel criado. C:\>exam1[enter] Lembre-se, este programa assembly muda o tamanho do cursor no DOS. --------------- // --------------3.2.Processo Assembly. 3.2.1.Segmentos 3.2.2.Tabela de equivalncia 3.2.1.SEGMENTOS A arquitetura dos processadores x86 fora-nos a usar segmentos de memria para gerenciar a informao, o tamanho destes segmentos de 64Kb. A razo de ser destes segmentos que, considerando que o tamanho m ximo de um nmero que o processador pode gerenciar dado por uma palavra de 16 bits ou registrador, assim no seria possvel acessar mais do que 65536 locais da memria usando apenas um destes registradores. Mas agora, se a memria do PC dividida em grupos de segmentos, cada um com 65536 locais, e podemos usar um endereo ou registrador exclusivo para encontrar cada segmento, e ainda fazemos cada endereo de um especfico slot com dois registradores, nos possvel acessar a quantidade de 4294967296 bytes de memria, que , atualmente, a maior memria que podemos instalar num PC. Desta forma, para que o montador seja capaz de gerenciar os dados, se faz necess rio que cada informao ou instruo se encontre na rea correspondente ao seu segmento. O endereo do segmento fornecido ao montador pelos registradores DS, ES, SS e CS. Lembrando um programa no Debug, observe: 1CB0:0102 MOV AX,BX O primeiro nmero 1CB0, corresponde ao segmento de memria que est sendo usado, o segundo uma referncia ao endereo dentro do segmento, um deslocamento dentro do segmento offset. O modo usado para indicar ao montador com quais segmentos vamos trabalhar fazendo uso das diretivas .CODE, .DATA e .STACK. O montador ajusta o tamanho dos segmentos tomando como base o nmero de bytes que cada instruo assembly precisa, j que seria um desperdcio de memria usar segmentos inteiros. Por exemplo, se um programa precisa de apenas 10Kb para armazenar dados, o segmento de dados seria apenas de 10Kb e no de 64Kb, como poderia acontecer se feito manualmente.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 15 of 16

3.2.2.TABELAS DE EQUIVALNCIA Cada uma das partes numa linha de cdigo assembly conhecida como token, por exemplo: MOV AX,Var Aqui temos trs tokens, a instruo MOV, o operador AX e o operador VAR. O que o montador faz para gerar o cdigo OBJ ler cada um dos tokens e procurar a equivalncia em cdigo de m quina em tabelas correspondentes, seja de palavras reservadas, tabela de cdigos de operao, tabela de smbolos, tabela de literais, onde o significado dos mnemnicos e os endereos dos smbolos que usamos sero encontrados. A maioria dos montadores so de duas passagens. Em sntese na primeira passagem temos a definio dos smbolos, ou seja, so associados endereos a todas as instrues do programa. Seguindo este processo, o assembler l MOV e procura-o na tabela de cdigos de operao para encontrar seu equivalente na linguagem de m quina. Da mesma forma ele l AX e encontra-o na tabela correspondente como sendo um registrador. O processo para Var um pouco diferenciado, o montador verifica que ela no uma palavra reservada, ento procura na tabela de smbolos, l encontrando-a ele designa o endereo correspondente, mas se no encontrou ele a insere na tabela para que ela possa receber um endereo na segunda passagem. Ainda na primeira passagem executado parte do processamento das diretivas, importante notar que as diretivas no criam cdigo objeto. Na passagem dois so montadas as instrues, traduzindo os cdigos de operao e procurando os endereos, e gerado o cdigo objeto. H smbolos que o montador no consegue encontrar, uma vez que podem ser declaraes externas. Neste caso o linker entra em ao para criar a estrutura necess ria a fim de ligar as diversas possveis partes de cdigo, dizendo ao loader que o segmento e o token em questo so definidos quando o programa carregado e antes de ser executado. --------------- // --------------3.3.Mais programas. Outro exemplo Primeiro passo Use qualquer editor e crie o seguinte: ;exemplo2 .model small .stack .code mov ah,2h ;move o valor 2h para o registrador ah mov dl,2ah ;move o valor 2ah para o registrador dl ;( o valor ASCII do caractere *) int 21h ;interrupo 21h mov ah,4ch ;funo 4ch, sai para o sistema operacional int 21h ;interrupo 21h end ;finaliza o programa Segundo passo Salvar o arquivo com o nome: exam2.asm No esquecer de salvar em formato ASCII.

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Page 16 of 16

Terceiro passo Usar o programa TASM para construir o programa objeto. C:\>tasm exam2.asm Turbo Assembler Version 2.0 Assembling file: Error messages: Warning messages: Passes: Remaining memory: Quarto passo Usar o programa TLINK para criar o programa execut vel. C:\>tlink exam2.obj Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International C:\> Quinto passo Executar o programa: C:\>exam2[enter] * C:\> Este programa imprime o caracter * na tela. Clique aqui para obter mais programas --------------- // --------------3.4.Tipos de instrues. 3.4.1.Movimento de dados 3.4.2.Operaes lgicas e aritmticas 3.4.3.Saltos, laos e procedimentos 3.4.1.MOVIMENTO DE DADOS Em qualquer programa h necessidade de se mover dados na memria e em registradores da CPU; h v rios modos de se faz-lo: pode-se copiar os dados da memria para algum reg exam2.asm None None 1 471k Copyright (c) 1988, 1990 Borland International

http://www.b4silisco.com/ASMPOR.TXT

21/7/2009

Vous aimerez peut-être aussi