Você está na página 1de 65

Tutorial da Linguagem Assembly

Conte�do:

1.Introdu��o

2.Conceitos B�sicos

3.Programa��o Assembly

4.Instru��es Assembly

5.Interrup��es e ger�ncia de arquivos

6.Macros e procedimentos

7.Exemplos de programas

8.Bibliografia

CAP�TULO 1: INTRODU��O

Voltar ao �ndice Geral

Conte�do:

1.1.O que h� de novo nest�e material

1.2.Apresenta��o

1.3.Por que aprender Assembly?

1.1.O que h� de novo nest�e material:

Voltar ao �ndice Geral

Ap�s um ano da realiza��o da primeira vers�o do tutorial, e atrav�s das


opini�es recebidas por e-mail, resolvemos ter por disposi��o todos est�es
coment�rios e sugest��es. Esperamos que atrav�s deste novo material Assembly, as
pessoas que se mostrarem interessadas possam aprender mais sobre o seu IBM PC. esta
nova edi��o do tutorial inclui:

Uma se��o completa sobre como usar o programa debug.

Mais exemplos de programas.

Um motor de pesquisa, para qualquer t�pico ou item relacionado a esta nova


vers�o.

Consider�vel reorganiza��o e revis�o do material Assembly.

Em cada se��o, h� um link para o Dicion�rio On-line de computa��o de Dennis


Howe.

1.2.Apresenta��o:

Voltar ao �ndice Geral

este tutorial dest�ina-se �quelas pessoas que nunca tiveram contato com a
Linguagem Assembly. O tutorial est�� completamente focado em computadores com
processadores 80x86 da fam�lia Intel, e considerando que a base da linguagem�o
funcionamento dos recursos internos do processador, os exemplos descritos n�o s�o
compat�veis com qualquer outra arquitetura. As informa��es est��o dispostas em
unidades ordenadas para permitir f�cil acesso a cada t�pico, bem como uma melhor
navega��o pelo tutorial.

Na se��o introdut�ria s�o mencionados alguns conceitos elementares sobre


computadores e a Linguagem Assembly em si.

1.3.Por que aprender Assembly?

Voltar ao �ndice Geral

A primeira raz�o 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 raz�o�que voc� pode ter um controle total sobre o PC ao fazer uso
do assembler.

Uma outra raz�o�que programas assembly s�o mais r�pidos, menores e mais
poderosos do que os criados com outras linguagens.

Ultimamente, o assembler (montador) permite uma otimiza��o ideal nos


programas, seja no seu tamanho ou execu��o.

CAP�TULO 2: CONCEITOS B�SICOS

Voltar ao �ndice Geral

Conte�do:

2.1.Descri��o b�sica de um sistema computacional.

Sistema Computacional

2.1.1.Processador Central

2.1.2.Mem�ria Principal

2.1.3.Unidades de Entrada e Sa�da

2.1.4.Unidades de Mem�ria Auxiliar

2.2.Conceitos b�sicos da Linguagem Assembly

2.3.Usando o programa debug

esta se��o tem o prop�sito de fazer um breve coment�rio a respeito dos principais
componentes de um sistema computacional, o que ir� permitir ao usu�rio uma melhor
compreens�o dos conceitos propostos no decorrer do tutorial.

2.1.DESCRI��O DE UM SISTEMA COMPUTACIONAL

Voltar ao �ndice Geral

Conte�do:

Sistema Computacional

2.1.1.Processador Central

2.1.2.Mem�ria Principal

2.1.3.Unidades de Entrada e Sa�da

2.1.4.Unidades de Mem�ria Auxiliar

Sistema Computacional.

Voltar ao �ndice Geral

Chamamos de Sistema Computacional a completa configura��o de um computador,


incluindo os perif�ricos e o sistema operacional.

2.1.1.Processador Central.

Voltar ao �ndice Geral

� tamb�m conhecido por CPU ou Unidade Central de Processamento, que por sua
vez�composta pela unidade de controle e unidade de l�gica e aritm�tica. Sua fun��o
consiste na leitura e escrita do conte�do das c�lulas de mem�ria, regular o tr fego
de dados entre as c�lulas de mem�ria e registradores especiais, e decodificar e
executar as instru��es de um programa.

O processador tem uma s�rie de c�lulas de mem�ria usadas com freq��ncia e,


dessa forma, s�o partes da CPU. estas c�lulas s�o conhecidas com o nome de
registradores. Um processador de um PC possui cerca de 14 registradores.

Como os PCs tem sofrido evolu��o veremos que podemos manipular


registradores de 16 ou 32 bits.

A unidade de l�gica e aritm�tica da CPU realiza as opera��es relacionadas


ao c�lculo simb�lico e num�rico. Tipicamente estas unidades apenas s�o capazes de
realizar opera��es elementares, tais como: adi��o e subtra��o de dois n�meros
inteiros, multiplica��o e divis�o de n�mero inteiro, manuseio de bits de
registradores e compara��o do conte�do 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.Mem�ria Principal.

Voltar ao �ndice Geral

� um grupo de c�lulas, agora sendo fabricada com semi-condutores, usada


para processamentos gerais, tais como a execu��o de programas e o armazenamento de
informa��es para opera��es.

Cada uma das c�lulas pode conter um valor num�rico e�capaz de ser
endere�ada, isto �, pode ser identificada de forma singular em rela��o �s outras
c�lulas pelo uso de um n�mero ou endere�o.

O nome gen�rico destas mem�rias�Random Access Memory ou RAM. A principal


desvantagem deste tipo de mem�ria�o fato de que seus circuitos integrados perdem a
informa��o que armazenavam quando a energia el�trica for interrompida, ou seja, ela
� vol�til. este foi o motivo que levou � cria��o de um outro tipo de mem�ria cuja
informa��o n�o � perdida quando o sistema � desligado. estas mem�rias receberam o
nome de Read Only Memory ou ROM.

2.1.3.Unidades de Entrada e Sa�da.

Voltar ao �ndice Geral

Para que o computador possa ser �til para n�s se faz necess�rio que o
processador se comunique com o exterior atrav�s de interfaces que permitem a
entrada e a sa�da de informa��o entre ele e a mem�ria. Atrav�s do uso destas
comunica��es � poss�vel introduzir informa��o a ser processada e mais tarde
visualizar os dados processados.

Algumas das mais comuns unidades de entrada s�o o teclado e o mouse. As


mais comuns unidades de sa�da s�o a tela do monitor e a impressora.

2.1.4.Unidades de Mem�ria Auxiliar.

Voltar ao �ndice Geral

Considerando o alto custo da mem�ria principal e tamb�m o tamanho das


aplica��es atualmente, vemos que ela � muito limitada. Logo, surgiu a necessidade
da cria��o de dispositivos de armazenamento pr�ticos e econ�micos.

est�es e outros inconvenientes deram lugar �s unidades de mem�ria auxiliar,


perif�ricos. As mais comuns s�o as fitas e os discos magn�ticos.

A informa��o ali armazenada ser dividida em arquivos. Um arquivo � feito


de um n�mero vari�vel de registros, geralmente de tamanho fixo, podendo conter
informa��o ou programas.

2.2.CONCEITOS B�SICOS

Voltar ao �ndice Geral

Conte�do:

2.2.1.Informa��o no computador:

2.2.1.1.Unidades de informa��o

2.2.1.2.Sistemas num�ricos

2.2.1.3.Convertendo n�meros bin�rios para decimais

2.2.1.4.Convertendo n�meros decimais para bin�rios

2.2.1.5.Sistema hexadecimal
2.2.2.m�todos de representa��o de dados num computador.

2.2.2.1.C�digo ASCII

2.2.2.2.m�todo BCD

2.2.2.3.Representa��o de ponto flutuante

2.2.1. INFORMA��O NO COMPUTADOR

Voltar ao �ndice Geral

2.2.1.1.Unidades de informa��o

Voltar ao �ndice Geral

Para o PC processar a informa��o, � necess�rio que ela est�eja em c�lulas


especiais, chamadas registradores.

Os registradores s�o grupos de 8 ou 16 flip-flops. Um flip-flop�um


dispositivo capaz de armazenar 2 n�veis de voltagem, um baixo, geralmente 0.5
volts, e outro comumente de 5 volts. O n�vel baixo de energia no flip-
flop�interpretado como desligado ou 0, e o n�vel alto, como ligado ou 1. est�es
estados s�o geralmente conhecidos como bits, que s�o a menor unidade de informa��o
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 num�ricos

Voltar ao �ndice Geral

O sistema num�rico que n�s usamos diariamente � o decimal, mas este sistema
n�o � conveniente para m�quinas, pois ali as informa��es t�m que ser codificadas de
modo a interpretar os estados da corrente (ligado-desligado); este modo de c�digo
faz com que tenhamos que conhecer o c�lculo posicional que nos permitir� expressar
um n�mero em qualquer base onde precisarmos dele.

� poss�vel representar um determinado n�mero em qualquer base atrav�s da


seguinte f�rmula:

Onde n � a posi��o do d�gito, iniciando da direita para a esquerda e


numerando de 0. D � o d�gito sobre o qual n�s operamos e B � a base num�rica usada.

2.2.1.3.Convertendo n�meros bin�rios para decimais

Voltar ao �ndice Geral

Quando trabalhamos com a Linguagem Assembly encontramos por acaso a


necessidade de converter n�meros de um sistema bin�rio, que � usado em
computadores, para o sistema decimal usado pelas pessoas.

O sistema bin�rio�baseado em apenas duas condi��es ou estados, est�ar


ligado(1), ou desligado(0), portanto sua base�dois.

Para a convers�o, podemos usar a f�rmula de valor posicional:

Por exemplo, se tivermos o n�mero bin�rio 10011, tomamos cada d�gito da


direita para a esquerda e o multiplicamos pela base, elevando � pot�ncia
correspondente � sua posi��o relativa:

Binary: 1 1 0 0 1

Decimal: 1*2^0 + 1*2^1 + 0*2^2 + 0*2^3 + 1*2^4= 1 + 2 + 0 + 0 + 16 = 19


decimal.

O caracter ^ � usado em computa��o como s�mbolo para pot�ncia e * para a


multiplica��o.

2.2.1.4.Convertendo n�meros decimais para bin�rio

Voltar ao �ndice Geral

H� v�rios m�todos para se converter n�meros decimais para bin�rio; apenas


um ser� analizado aqui. Naturalmente a convers�o com uma calculadora cient�fica �
muito mais f�cil, mas nem sempre podemos contar com isso, logo o mais conveniente
�, ao menos, sabermos uma f�rmula para faz�-la. O m�todo resume-se na aplica��o de
divis�es sucessivas por 2, mantendo o rest�o como o d�gito bin�rio e o resultado
como o pr�ximo n�mero a ser dividido.

Tomemos como exemplo o n�mero decimal 43.

43/2=21 e o rest�o�1;

21/2=10 e o rest�o�1;

10/2=5 e o rest�o�0;

5/2=2 e o rest�o�1;

2/2=1 e o rest�o�0;

1/2=0 e o rest�o�1.

Para construir o equivalente bin�rio de 43, vamos pegar os rest�os obtidos


de baixo para cima, assim temos 101011.

2.2.1.5.Sistema hexadecimal

Voltar ao �ndice Geral

Na base hexadecimal temos 16 d�gitos, que v�o de 0 a 9 e da letra A at� a


F, estas letras representam os n�meros de 10 a 15. Portanto contamos:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E, e F.

A convers�o entre n�meros bin�rios e hexadecimais � f�cil. A primeira coisa


a fazer � dividir o n�mero bin�rio em grupos de 4 bits, come�ando da direita para a
esquerda. Se no grupo mais � direita sobrarem d�gitos, completamos com zeros.

Tomando como exemplo o n�mero 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 n�mero independente e consideramos o
seu valor decimal:

0010=2;

1011=11

Entretanto, observa-se que n�o podemos representar este n�mero como 211,
isto seria um erro, uma vez que os n�meros em hexa maiores que 9 e menores que 16
s�o representados pelas letras A,B,...,F. Logo, obtemos como resultado:

2Bh, onde o "h" representa a base hexadecimal.

Para a convers�o de um n�mero hexadecimal em bin�rio � apenas necess�rio


inverter os passos: tomamos o primeiro d�gito hexadecimal e o convertemos para
bin�rio, a seguir o segundo, e assim por diante.

2.2.2. M�todos de representa��o de dados num computador.

2.2.2.1.C�digo ASCII

2.2.2.2.m�todo BCD

2.2.2.3.Representa��o de ponto flutuante

2.2.2.1.C�digo ASCII

Voltar ao �ndice Geral

ASCII significa American Standard Code for Information Interchange. este


c�digo cont�m as letras do alfabeto, d�gitos decimais de 0 a 9 e alguns s�mbolos
adicionais como um n�mero bin�rio de 7 bits, tendo o oitavo bit em 0, ou seja,
desligado.

deste modo, cada letra, d�gito ou caracter especial ocupa 1 byte na mem�ria
do computador.

Podemos observar que este m�todo de representa��o de dados�muito


ineficiente no aspecto num�rico, uma vez que no formato bin�rio 1 byte n�o �
suficiente para representar n�meros de 0 a 255, com o ASCII podemos representar
apenas um d�gito.

Devido a esta inefici�ncia, o c�digo ASCII � usado, principalmente, para a


representa��o de textos.

2.2.2.2.m�todo BCD

Voltar ao �ndice Geral

BCD significa Binary Coded Decimal. Nest�e m�todo grupos de 4 bits s�o
usados para representar cada d�gito decimal de 0 a 9. Com este m�todo podemos
representar 2 d�gitos por byte de informa��o.

Vemos que este m�todo vem a ser muito mais pr�tico para representa��o
num�rica do que o c�digo ASCII. Embora ainda menos pr�tico do que o bin�rio, com o
m�todo BCD podemos representar d�gitos de 0 a 99. Com o bin�rio, vemos que o
alcance � maior, de 0 a 255.
este formato (BCD) � principalmente usado na representa��o de n�meros
grandes, aplica��es comerciais, devido �s suas facilidades de opera��o.

2.2.2.3.Representa��o de ponto flutuante

Voltar ao �ndice Geral

esta representa��o � baseada em nota��o cient�fica, isto �, representar um


n�mero em 2 partes: sua base e seu expoente.

Por exemplo o n�mero decimal 1234000,� representado como 1.234*10^6, observamos que
o expoente ir indicar o n�mero de casas que o ponto decimal deve ser movido para a
direita, a fim de obtermos o n�mero original.

O expoente negativo, por outro lado, indica o n�mero de casas que o ponto
decimal deve se locomover para a esquerda.

2.3.PROGRAMA DEBUG

Voltar ao �ndice Geral

Conte�do:

2.3.1.Processo de cria��o de programas

2.3.2.Registradores da CPU

2.3.3.Programa debug

2.3.4.est�rutura Assembly

2.3.5.Criando um programa assembly simples

2.3.6.Armazenando e carregando os programas

2.3.1.Processo de cria��o de programas.

Voltar ao �ndice Geral

Para a cria��o de programas s�o necess�rios os seguintes passos:

* Desenvolvimento do algoritmo, est� gio em que o problema a ser


solucionado � est�abelecido e a melhor solu��o � proposta, cria��o de diagramas
esquem ticos relativos � melhor solu��o proposta.

* Codifica��o do algoritmo, o que consiste em escrever o programa em alguma


linguagem de programa��o; linguagem assembly nest�e caso espec�fico, tomando como
base a solu��o proposta no passo anterior.

* A transforma��o para a linguagem de m quina, ou seja, a cria��o do


programa objeto, escrito como uma seq��ncia de zeros e uns que podem ser
interpretados pelo processador.

* O �ltimo est� gio�a elimina��o de erros detectados no programa na fase de


test�e. A corre��o normalmente requer a repeti��o de todos os passos, com
observa��o atenta.

2.3.2.Registradores da CPU.
Voltar ao �ndice Geral

Para o prop�sito did tico, vamos focar registradores de 16 bits. A CPU


possui 4 registradores internos, cada um de 16 bits. S�o eles AX, BX, CX e DX. S�o
registradores de uso geral e tamb�m podem ser usados como registradores de 8 bits.
Para tanto devemos referenci�-los como, por exemplo, AH e AL, que s�o,
respectivamente, o byte high e o low do registrador AX. esta nomenclatura tamb�m 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 C�digo

BP Registrador Apontador da Base

SI Registrador de �ndice Fonte

DI Registrador de �ndice Dest�ino

SP Registrador Apontador de Pilha

IP Registrador Apontador da Pr�xima Instru��o

F Registrador de Flag

2.3.3.Programa Debug.

Voltar ao �ndice Geral

Para a cria��o de um programa em assembler existem 2 op��es: usar o TASM -


Turbo Assembler da Borland, ou o DEBUGGER. Nesta primeira se��o vamos usar o debug,
uma vez que podemos encontr�-lo em qualquer PC com o MS-DOS.

Debug pode apenas criar arquivos com a extens�o .COM, e por causa das
caracter�sticas deste tipo de programa, eles n�o podem exceder os 64 Kb, e tamb�m
devem iniciar no endere�o de mem�ria 0100H dentro do segmento espec�fico. �
importante observar isso, pois deste modo os programas .COM n�o s�o reloc�veis.

Os principais comandos do programa debug s�o:

A - Montar instru��es simb�licas em c�digo de m quina

D - Mostrar o conte�do de uma rea da mem�ria

E - Entrar dados na mem�ria, iniciando num endere�o espec�fico


G - Rodar um programa execut�vel na mem�ria

N - Dar nome a um programa

P - Proceder, ou executar um conjunto de instru��es relacionadas

Q - Sair do programa debug

R - Mostrar o conte�do de um ou mais registradores

T- Executar passo a passo as instru��es

U - Desmontar o c�digo de m quina em instru��es simb�licas

W - Gravar um programa em disco

� poss�vel 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 diret�rio C:\DOS. Para inici�-lo, basta digitar Debug na
linha de comando:

C:/>Debug [Enter]

Voc� notar� ent�o a presen�a de um h�fen no canto inferior esquerdo da


tela.

N�o se espante, est�e�o prompt do programa. Para visualizar o conte�do 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 conte�do de todos os registradores internos da CPU; um modo


alternativo para visualizar um �nico registrador � usar o camando "r" seguido do
par�metro que faz refer�ncia ao nome do registrador:

-rbx

BX 0000

esta instru��o mostrar� o conte�do do registrador BX e mudar o indicador


do Debug de "-" para ":"

Quando o prompt assim se tornar, significa que � poss�vel, embora n�o


obrigat�ria, a mudan�a do valor contido no registrador, bastando digitar o novo
valor e pressionar [Enter]. Se voc� simplesmente pressionar [Enter] o valor antigo
se mant�m.
2.3.4.est�rutura Assembly.

Voltar ao �ndice Geral

Nas linhas do c�digo em Linguagem Assembly h duas partes: a primeira � o


nome da instru��o a ser executada; a segunda, os par�metros do comando. Por
exemplo:

add ah bh

Aqui "add"�o comando a ser executado, nest�e caso uma adi��o, e "ah" bem
como "bh" s�o os par�metros. Por exemplo:

mov al, 25

No exemplo acima, est�amos usando a instru��o mov, que significa mover o


valor 25 para o registrador al.

O nome das instru��es Nesta linguagem�constitu�do de 2, 3 ou 4 letras.


estas instru��es s�o chamadas mnem�nicos ou c�digos de opera��o, representando a
fun��o que o processador executar .

�s vezes instru��es aparecem assim:

add al,[170]

Os colchetes no segundo par�metro indica-nos que vamos trabalhar com o


conte�do da c�lula de mem�ria de n�mero 170, ou seja, com o valor contido no
endere�o 170 da mem�ria e n�o com o valor 170, isto � conhecido como "endere�amento
direto".

2.3.5.Criando um programa simples em assembly.

Voltar ao �ndice Geral

N�o nos responsabilizaremos pela m� execu��o ou poss�veis danos causados


por quaisquer exemplos que de agora em diante aparecer�o, uma vez que os mesmos,
apesar de testados, s�o de car�ter did�tico. Vamos, ent�o, 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 endere�o inicial para o nosso programa
como o par�metro, mas � opcional. No caso de omiss�o, o endere�o inicial � o
especificado pelos registradores CS:IP, geralmente 0100h, o local em que programas
com extens�o .COM devem iniciar. E ser� este o local que usaremos, uma vez que o
Debug s� pode criar este tipo de programa.

Embora nest�e momento n�o seja necess�rio darmos um par�metro 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 conte�do dos registradores ax e bx,

guardando o resultado em ax e finalmente a instru��o nop (nenhuma opera��o)

finaliza o programa.

No programa debug, a tela 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 instru��es:

-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 valor 0002 no registrador AX. Teclamos "t" para executar a segunda

instru��o:

-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

Teclando "t" novamente para ver o resultado da instru��o 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 possibilidade dos registradores conterem valores diferentes existe, mas AX

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.

Voltar ao �ndice Geral

N�o seria pr�tico ter que digitar o programa cada vez que inici�ssemos o
Debug. Ao inv�s disso, podemos armazen�-lo no disco. S� que o mais interessante
nisso�que um simples comando de salvar cria um arquivo com a extens�o .COM, ou
seja, execut�vel - sem precisarmos efetuar os processos de montagem e liga��o,
como veremos posteriormente com o TASM.

Eis os passos para salvar um programa que j est�eja na mem�ria:

* Obter o tamanho do programa subtraindo o endere�o final do


endere�o 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 id�ia de como


realizar os passos acima descritos:

0C1B:0100 mov ax,0002

0C1B:0103 mov bx,0004

0C1B:0106 add ax,bx

0C1B:0108 int 20

0C1B:010A

Para obter o tamanho de um programa, o comando "h"�usado, j que


ele nos mostra a adi��o e subtra��o de dois n�meros em hexadecimal. Para obter o
tamanho do programa em quest�o, damos como par�metro o valor do endere�o final do
nosso programa (10A), e o endere�o inicial (100). O primeiro resultado mostra-nos a
soma dos endere�os, o segundo, a subtra��o.

-h 10a 100

020a 000a

O comando "n" permite-nos nomear o programa.

-n test�.com

O comando "rcx" permite-nos mudar o conte�do do registrador CX para o valor


obtido como tamanho do arquivo com o comando "h", nest�e 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 s�o necess�rios:

Dar o nome do arquivo a ser carregado.

Carreg�-lo usando o comando "l" (loa).

Para obter o resultado correto destes passos,�necess�rio que o programa


acima j� est�eja criado.

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


mem�ria. O que ele faz�desmontar o c�digo e mostr�-lo em assembly. Os par�metros
indicam ao Debug os endere�os inicial e final a serem desmontados.

O Debug sempre carrega os programas na mem�ria no endere�o 100h, conforme


j� comentamos.

CAP�TULO 3: PROGRAMA��O ASSEMBLY

Voltar ao �ndice Geral

Conte�do:

3.1.Construindo programas em Assembly

3.1.1.Software necess�rio

3.1.2.Programa��o Assembly

3.2.Processo Assembly
3.2.1.Segmentos

3.2.2.Tabela de equival�ncia

3.3.Pequenos programas em Assembly

3.4.Tipos de instru��es

3.1.1.SOFTWARE NECESS�RIO

Voltar ao �ndice Geral

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, tamb�m da Borland. N�s devemos criar
os programas fonte com a extens�o .ASM para que o TASM reconhe�a e o transforme no
programa objeto, um "formato intermedi�rio" do programa, assim chamado porque ainda
n�o�um programa execut�vel e t�o pouco um programa fonte. O linker gera a partir de
um programa .OBJ, ou da combina��o de v�rios deles, um programa execut�vel, cuja
extens�o � normalmente .EXE, embora possa ser .COM dependendo da forma como for
montado e ligado.

3.1.2.PROGRAMA��O ASSEMBLY

Voltar ao �ndice Geral

Para construirmos os programas com o TASM, devemos est�ruturar o fonte de


forma diferenciada ao que faz�amos com o programa debug.� importante incluir as
seguintes diretivas assembly:

.MODEL SMALL

Define o melo de mem�ria a usar em nosso programa

.CODE

Define as instru��es do programa, relacionado ao segmento de c�digo

.STACK

Reserva espa�o de mem�ria para as instru��es 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 fazer coment�rios em programas assembly

.MODEL SMALL ;modelo de mem�ria

.STACK ;espa�o de mem�ria para instru��es do programa na pilha

.CODE ;as linhas seguintes s�o instru��es do programa

mov ah,01h ;move o valor 01h para o registrador ah

mov cx,07h ;move o valor 07h para o registrador cx

int 10h ;interrup��o 10h

mov ah,4ch ;move o valor 4ch para o registrador ah

int 21h ;interrup��o 21h

END ;finaliza o c�digo do programa

este programa assembly muda o tamanho do cursor.

Segundo passo

Salvar o arquivo com o seguinte nome: exam1.asm

N�o 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 Copyright (c) 1988, 1990 Borland


International

Assembling file: exam1.asm

Error messages: None

Warning messages: None

Passes: 1

Remaining memory: 471k

O TASM s� pode criar programas no formato .OBJ, que ainda n�o pode ser
executado...

Quarto passo

Usar o programa TLINK para criar o programa execut�vel.

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
extens�o .EXE. � opcional a coloca��o da extens�o .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.

Voltar ao �ndice Geral

3.2.1.Segmentos

3.2.2.Tabela de equival�ncia

3.2.1.SEGMENTOS

Voltar ao �ndice Geral

A arquitetura dos processadores x86 for�a-nos a usar segmentos de mem�ria


para gerenciar a informa��o, o tamanho destes segmentos�de 64Kb.

A raz�o de ser destes segmentos�que, considerando que o tamanho m�ximo de


um n�mero que o processador pode gerenciar�dado por uma palavra de 16 bits ou
registrador, assim n�o seria poss�vel acessar mais do que 65536 locais da mem�ria
usando apenas um destes registradores. Mas agora, se a mem�ria do PC� dividida em
grupos de segmentos, cada um com 65536 locais, e podemos usar um endere�o ou
registrador exclusivo para encontrar cada segmento, e ainda fazemos cada endere�o
de um espec�fico slot com dois registradores, nos � poss�vel acessar a quantidade
de 4294967296 bytes de mem�ria, que � atualmente, a maior mem�ria que podemos
instalar num PC.

desta forma, para que o montador seja capaz de gerenciar os dados, se faz
necess�rio que cada informa��o ou instru��o se encontre na �rea correspondente ao
seu segmento. O endere�o 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 n�mero 1CB0, corresponde ao segmento de mem�ria que est� sendo


usado, o segundo�uma refer�ncia ao endere�o 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 n�mero de


bytes que cada instru��o assembly precisa, j que seria um desperd�cio de mem�ria
usar segmentos inteiros. Por exemplo, se um programa precisa de apenas 10Kb para
armazenar dados, o segmento de dados seria apenas de 10Kb e n�o de 64Kb, como
poderia acontecer se feito manualmente.

3.2.2.TABELAS DE EQUIVAL�NCIA

Voltar ao �ndice Geral

Cada uma das partes numa linha de c�digo assembly�conhecida como token, por
exemplo:

MOV AX,Var

Aqui temos tr�s tokens, a instru��o MOV, o operador AX e o operador VAR. O


que o montador faz para gerar o c�digo OBJ�ler cada um dos tokens e procurar a
equival�ncia em c�digo de m quina em tabelas correspondentes, seja de palavras
reservadas, tabela de c�digos de opera��o, tabela de s�mbolos, tabela de literais,
onde o significado dos mnem�nicos e os endere�os dos s�mbolos que usamos ser�o
encontrados.

A maioria dos montadores s�o de duas passagens. Em s�ntese na primeira


passagem temos a defini��o dos s�mbolos, ou seja, s�o associados endere�os a todas
as instru��es do programa. Seguindo este processo, o assembler l� MOV e procura-o
na tabela de c�digos de opera��o 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
n�o�uma palavra reservada, ent�o procura na tabela de s�mbolos, l encontrando-a
ele designa o endere�o correspondente, mas se n�o encontrou ele a insere na tabela
para que ela possa receber um endere�o na segunda passagem. Ainda na primeira
passagem � executado parte do processamento das diretivas,�importante notar que as
diretivas n�o criam c�digo objeto. Na passagem dois s�o montadas as instru��es,
traduzindo os c�digos de opera��o e procurando os endere�os, e � gerado o c�digo
objeto.

H� s�mbolos que o montador n�o consegue encontrar, uma vez que podem ser
declara��es externas. Nest�e caso o linker entra em a��o para criar a est�rutura
necess�ria a fim de ligar as diversas poss�veis partes de c�digo, dizendo ao loader
que o segmento e o token em quest�o s�o definidos quando o programa�carregado e
antes de ser executado.

3.3.Pequenos Programas em Assembly

Voltar ao �ndice Geral

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 ;interrup��o 21h

mov ah,4ch ;fun��o 4ch, sai para o sistema operacional

int 21h ;interrup��o 21h

end ;finaliza o programa

Segundo passo

Salvar o arquivo com o nome: exam2.asm

N�o esquecer de salvar em formato ASCII.

Terceiro passo

Usar o programa TASM para construir o programa objeto.

C:\>tasm exam2.asm

Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland


International

Assembling file: exam2.asm

Error messages: None

Warning messages: None

Passes: 1

Remaining memory: 471k

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.

3.4.Tipos de instru��es.

3.4.1.Movimento de dados

3.4.2.Opera��es l�gicas e aritm�ticas

3.4.3.Saltos, la�os e procedimentos

3.4.1.MOVIMENTO DE DADOS

Voltar ao �ndice Geral

Em qualquer programa h necessidade de se mover dados na mem�ria e em


registradores da CPU; h v�rios modos de se faz�-lo: pode-se copiar os dados da
mem�ria para algum registrador, de registrador para registrador, de um registrador
para a pilha, da pilha para um registrador, transmitir dados para um dispositivo
externo e vice-versa.

este movimento de dados � sujeito a regras e rest�ri��es, entre elas:

*N�o�poss�vel mover dados de um local da mem�ria para outro


diretamente; � necess�rio primeiro mover o dado do local de origem para um
registrador e ent�o do registrador para o local de dest�ino.

*N�o�poss�vel mover uma constante diretamente para um registrador


de segmento; primeiro deve-se mover para um registrador.

� poss�vel mover blocos de dados atrav�s de instru��es movs, que copia uma
cadeia de bytes ou palavras; movsb copia n bytes de um local para outro; e movsw
copia n palavras. A �ltima das duas instru��es toma os valores dos endere�os
definidos por DS:SI como o grupo de dados a mover e ES:DI como a nova localiza��o
dos dados.

Para mover dados h tamb�m est�ruturas chamadas pilhas, onde o dado �


introduzido com a instru��o push e�extra�do com a instru��o pop Numa pilha o
primeiro dado a entrar�o �ltimo a sair, por exemplo:

PUSH AX

PUSH BX

PUSH CX

Para retornar os valores da pilha referentes � cada registrador �


necess�rio seguir-se a ordem:

POP CX

POP BX

POP AX

Para a comunica��o com dispositivos externos o comando de sa�da�usado para


o envio de informa��es a uma porta e o comando de entrada�usado para receber
informa��o de uma porta.
A sintaxe do comando de sa�da:

OUT DX,AX

Onde DX cont�m o valor da porta que ser usada para a comunica��o e AX


cont�m a informa��o que ser enviada.

A sintaxe do comando de entrada:

IN AX,DX

Onde AX�o registrador onde a informa��o ser armazenada e DX cont�m o


endere�o da porta de onde chegar a informa��o.

3.4.2.OPERA��ES L�GICAS E ARITM�TICAS

Voltar ao �ndice Geral

As instru��es de opera��es l�gicas s�o: and, not, or e xor. Elas trabalham


a n�vel de bits em seus operadores.

Para verificar o resultado das opera��es usamos as instru��es cmp e test�.

As instru��es usadas para opera��es alg�bricas s�o: para adi��o add, para
subtra��o sub, para multiplica��o mul e para divis�o div.

Quase todas as instru��es de compara��o s�o baseadas na informa��o contida


no registrador de flag. Normalmente os flags do registrador que podem ser
manuseados diretamente pelo programador s�o os da dire��o de dados DF, usado para
definir as opera��es sobre cadeias. Uma outro que pode tamb�m ser manuseado�o flag
IF atrav�s das instru��es sti e cli, para ativar e desativar as interrup��es.

3.4.3.SALTOS, LOOPS E PROCEDIMENTOS

Voltar ao �ndice Geral

Saltos incondicionais na escrita de programas em linguagem assembly s�o


dados pela instru��o jmp; um salto�usado para modificar a seq��ncia da execu��o das
instru��es de um programa, enviando o controle ao endere�o indicado, ou seja, o
registrador contador de programa recebe este novo endere�o.

Um loop, tamb�m conhecido como intera��o,�a repeti��o de um processo um


certo n�mero de vezes at� atingir a condi��o de parada.

CAP�TULO 4: INSTRU��ES ASSEMBLY

Voltar ao �ndice Geral

Conte�do:

4.1.Instru��es de opera��o de dados

4.1.1.Instru��es de transfer�ncia

4.1.2.Instru��es de carga

4.1.3.Instru��es de pilha

4.2.Instru��es l�gicas e aritm�ticas


4.3.Instru��es de controle de processos

4.1.1.Instru��es de transfer�ncia.

Voltar ao �ndice Geral

S�o usadas para mover o conte�do dos operadores. Cada instru��o pode ser
usada com diferentes modos de endere�amento.

MOV

MOVS (MOVSB) (MOVSW)

INSTRU��O MOV

Prop�sito: Transfer�ncia de dados entre c�lulas de mem�ria, registradores e


o acumulador.

Sintaxe:

MOV Dest�ino,Fonte

Dest�ino�o lugar para onde o dado ser movido e Fonte�o lugar onde
o dado est� .

Os diferentes movimentos de dados permitidos para esta instru��o s�o:

*Dest�ino: mem�ria. Fonte: acumulador

*Dest�ino: acumulador. Fonte: mem�ria

*Dest�ino: registrador de segmento. Fonte: mem�ria/registrador

*Dest�ino: mem�ria/regitrador. Fonte: registrador de segmento

*Dest�ino: registrador. Fonte: registrador

*Dest�ino: registrador. Fonte: mem�ria

*Dest�ino: mem�ria. Fonte: registrador

*Dest�ino: registrador. Fonte: dado imediato

*Dest�ino: mem�ria. Fonte: dado imediato

Exemplo:

MOV AX,0006h

MOV BX,AX

MOV AX,4C00h

INT 21h

este pequeno programa move o valor 0006h para o registrador AX, ent�o ele
move o conte�do de AX (0006h) para o registrador BX, e finalmente move o valor
4C00h para o registrador AX para terminar a execu��o com a op��o 4C da interrup��o
21h.

INSTRU��ES MOVS (MOVSB) (MOVSW)

Prop�sito: Mover byte ou cadeias de palavra da fonte, endere�ada por SI,


para o dest�ino endere�ado por DI.

Sintaxe:

MOVS

este comando n�o necessita de par�metros uma vez que toma como endere�o
fonte o conte�do do registrador SI e como dest�ino o conte�do de DI. A seguinte
seq��ncia de instru��es ilustra isso:

MOV SI, OFFSET VAR1

MOV DI, OFFSET VAR2

MOVS

Primeiro inicializamos os valores de SI e DI com os endere�os das vari�veis


VAR1 e VAR2 respectivamente, ent�o ap�s a execu��o de MOVS o conte�do de
VAR1�copiado para VAR2.

As instru��es MOVSB e MOVSW s�o usadas do mesmo modo que MOVS, a primeira
move um byte e a segunda move uma palavra.

4.1.2 Instru��es de carga.

Voltar ao �ndice Geral

S�o instru��es espec�ficas para registradores, usadas para carregar bytes


ou cadeias de bytes num registrador.

LODS (LODSB) (LODSW)

LAHF

LDS

LEA

LES

INSTRU��ES LODS (LODSB) (LODSW)

Prop�sito: Carregar cadeias de um byte ou uma palavra para o acumulador.

Sintaxe:

LODS
esta instru��o toma a cadeia encontrada no endere�o especificado por SI, a
carrega para o registrador AL (ou AX) e adiciona ou subtrai, dependendo do estado
de DF, para SI se�uma transfer�ncia de bytes ou de palavras.

MOV SI, OFFSET VAR1

LODS

Na primeira linha vemos a carga do endere�o de VAR1 em SI e na segunda �


tomado o conte�do daquele local para o regiustrador AL. Os comandos LODSB e LODSW
s�o usados do mesmo modo, o primeiro carrega um byte e o segundo uma palavra (usa
todo o registrador AX).

INSTRU��O LAHF

Prop�sito: Transferir o conte�do dos flags para o registrador AH.

Sintaxe:

LAHF

esta instru��o��til para verificar o estado dos flags durante a execu��o do


nosso programa.

Os flags s�o deixados na seguinte ordem dentro do registrador:

SF ZF ?? AF ?? PF ?? CF

O "??" significa que haver um valor indefinido naqueles bits.

INSTRU��O LDS

Prop�sito: Carregar o registrador de segmento de dados.

Sintaxe:

LDS dest�ino,fonte

O operador fonte deve ser uma double word na mem�ria. A palavra associada
com o maior endere�o�transferida para DS, em outras palavras isto�tomado como o
endere�o de segmento. A palavra associada com o menor endere�o � o endere�o de
deslocamento e�depositada no registrador indicado como dest�ino.

INSTRU��O LEA

Prop�sito: Carregar o endere�o do operador fonte.

Sintaxe:

LEA dest�ino,fonte

O operador fonte deve est�ar localizado na mem�ria, e seu deslocamento �


colocado no registrador de �ndice ou ponteiro especificado no dest�ino.
Para ilustrar uma das facilidades que temos com este comando, vejamos:

MOV SI,OFFSET VAR1

� equivalente a:

LEA SI,VAR1

� muito prov�vel que para o programador�muito mais f�cil criar programas


grandes usando este �ltimo formato.

INSTRU��O LES

Prop�sito: Carregar o registrador de segmento extra

Sintaxe:

LES dest�ino,fonte

O operador fonte deve ser uma palavra dupla na mem�ria. O conte�do da


palavra com endere�o maior�interpretado como o endere�o do segmento e � colocado em
ES. A palavra com endere�o menor�o endere�o do deslocamento e� colocada no
registrador especificado no par�metro de dest�ino.

4.1.3 Instru��es de manipula��o da pilha.

Voltar ao �ndice Geral

estas instru��es permitem usar a pilha para armazenar ou recuperar dados.

POP

POPF

PUSH

PUSHF

INSTRU��O POP

Prop�sito: Recuperar uma parte de informa��o da pilha.

Sintaxe:

POP dest�ino

esta instru��o transfere o �ltimo valor armazenado na pilha para o operador


de dest�ino, e incrementa de 2 o registrador SP. este incremento�duplo pelo fato de
que a pilha do mais alto endere�o de mem�ria para o mais baixo, e a pilha trabalha
apenas com palavras, 2 bytes, logo deve ser 2 o incremento de SP, na realidade 2
est� sendo subtra�do do tamanho real da pilha.
INSTRU��O POPF

Prop�sito: Extrair os flags armazenados na pilha.

Sintaxe:

POPF

este comando transfere os bits da palavra armazenada na parte mais alta da


pilha para registrador de flag.

O modo da transfer�ncia�como se segue:

BIT FLAG

0 CF

2 PF

4 AF

6 ZF

7 SF

8 TF

9 IF

10 DF

11 OF

Os locais dos bits s�o os mesmos para o uso da instru��o PUSHF.

Uma vez feita a transfer�ncia o registrador SP�incrementado de 2, conforme


vimos anteriormente.

INSTRU��O PUSH

Prop�sito: Coloca uma palavra na pilha.

Sintaxe:

PUSH fonte

A instru��o PUSH decrementa de dois o valor de SP e ent�o transfere o


conte�do do operador fonte para o novo endere�o desultante no registrador rec�m
modificado.

O decremento no endere�o�duplo pelo fato de que quando os valores s�o


adicionados � pilha, que cresce do maior para o menor endere�o, logo quando
subra�mos de 2 o registrador SP o que fazemos�incrementar o tamanho da pilha em
dois bytes, que�a �nica quantidade de informa��o que a pilha pode manusear em cada
entrada e sa�da.
INSTRU��O PUSHF

Prop�sito: Colocar os valores dos flags na pilha.

Sintaxe:

PUSHF

este comando decrementa de 2 o valor do registrador SP e ent�o o conte�do


do registrador de flag�transferido para a pilha, no endere�o indicado por SP.

Os flags s�o armazenados na mem�ria da mesma forma que o comando POPF.

4.2. Instru��es l�gicas e aritm�ticas

Voltar ao �ndice Geral

Conte�do:

4.2.1.Instru��es l�gicas

4.2.2.Instru��es aritm�ticas

4.2.1.Instru��es l�gicas

Voltar ao �ndice Geral

S�o usadas para realizar opera��es l�gicas nos operadores.

AND

NEG

NOT

OR

Test�

XOR

INSTRU��O AND

Prop�sito: Realiza a conjun��o de operadores bit a bit.

Sintaxe:

AND dest�ino,fonte

Com esta instru��o a opera��o l�gica "y" para ambos os operadores � usada
como na tabela:

Fonte Dest�ino Dest�ino


1 1 1
1 0 0
0 1 0
0 0 0
O resultado desta opera��o � armazenado no operador de dest�ino.

INSTRU��O NEG

Prop�sito: Gera o complemento de 2.

Sintaxe:

NEG dest�ino

esta instru��o gera o complemento de 2 do operador dest�ino e o armazena no


mesmo operador. Por exemplo, if AX armazena o valor 1234H, ent�o:

NEG AX

Isto far� com o que o valor EDCCH fque armazenado no registrador AX.

INSTRU��O NOT

Prop�sito: Faz a nega��o do operador de dest�ino bit a bit.

Sintaxe:

NOT dest�ino

O resultado � armazenado no mesmo operador de dest�ino.

INSTRU��O OR

Prop�sito: Realiza um OU l�gico.

Sintaxe:

OR dest�ino,fonte

A instru��o OR, faz uma disjun��o l�gica bit a bit dos dois operadores:

Fonte Dest�ino Dest�ino


1 1 1
1 0 1
0 1 1
0 0 0

INSTRU��O Test�

Prop�sito: Compara logicamente os operadores.

Sintaxe:

Test� dest�ino,fonte
Realiza uma conjun��o, bit a bit, dos operadores, mas difere da instru��o
AND, uma vez que n�o coloca o resultado no operador de dest�ino. Tem efeito sobre o
registrador de flag.

INSTRU��O XOR

Prop�sito: Realiza um OU exclusivo.

Sintaxe:

XOR dest�ino,fonte

esta instru��o realizxa uma disjun��o exclusiva de dois operadores bit a


bit.

Fonte Dest�ino Dest�ino


1 1 0
1 0 1
0 1 1
0 0 0
4.2.2.Instru��es aritm�ticas.

Voltar ao �ndice Geral

S�o usadas para realizar opera��es aritm�ticas nos operadores.

ADC

ADD

DIV

IDIV

MUL

IMUL

SBB

SUB

INSTRU��O ADC

Prop�sito: Efetuar a soma entre dois operandos com carry.

Sintaxe:

ADC dest�ino,fonte

esta instru��o efetua a soma entre dois operandos, mais o valor do flag CF,
existente antes da opera��o. Apenas o operando dest�ino e os flags s�o afetados.

O resultado � armazenado no operador de dest�ino.


INSTRU��O ADD

Prop�sito: Adi��o de dois operadores.

Sintaxe:

ADD dest�ino,fonte

esta instru��o adiciona dois operadores e armazena o resultado no operador


dest�ino.

INSTRU��O DIV

Prop�sito: Divis�o sem sinal.

Sintaxe:

DIV fonte

O divisor pode ser um byte ou uma palavra e�o operador que�dado na


instru��o.

Se o divisor�de 8 bits, o registrador AX de 16 bits�tomado como dividendo e


se o divisor�de 16 bits, o par de registradores DX:AX ser tomado como dividendo,
tomando a palavra alta de DX e a baixa de AX.

Se o divisor for um byte, ent�o o quociente ser armazenado no registrador


AL e o rest�o em AH. Se for uma palavra, ent�o o quociente�armazenado em AX e o
rest�o em DX.

INSTRU��O IDIV

Prop�sito: Divis�o com sinal.

Sintaxe:

IDIV fonte

Consiste basicamente como a instru��o DIV, diferencia-se apenas por


realizar a opera��o com sinal.

Para os resultados s�o usados os mesmos registradores da instru��o DIV.

INSTRU��O MUL

Prop�sito: Multiplica��o com sinal.

Sintaxe:

MUL fonte
esta instru��o realiza uma multiplica��o n�o sinalizada entre o conte�do do
acumulador AL ou AX pelo operando-fonte, devolvendo o resultado no acumulador AX
caso a opera��o tenha envolvido AL com um operando de 8 bits, ou em DX e AX caso a
opera��o tenha envolvido AX e um operando de 16 bits.

INSTRU��O IMUL

Prop�sito: Multiplic��o de dois n�meros inteiros com sinal.

Sintaxe:

IMUL fonte

esta instru��o faz o mesmo que a anterior, difere apenas pela inclus�o do
sinal.

Os resultados s�o mantidos nos mesmos registradores usados pela instru��o


MUL.

INSTRU��O SBB

Prop�sito: Subtra��o com carry.

Sintaxe:

SBB dest�ino,fonte

esta instru��o subtrai os operadores e subtrai um do resultado se CF est��


ativado. O operador fonte�sempre subtra�do do dest�ino.

este tipo de subtra��o�usado quando se trabalha com quantidades de 32 bits.

INSTRU��O SUB

Prop�sito: Subtra��o.

Sintaxe:

SUB dest�ino,fonte

esta instru��o subtrai o operador fonte do dest�ino.

4.3.Instru��es de controle de processos

Voltar ao �ndice Geral

Conte�do:

4.3.1.Instru��es de salto

4.3.2.Instru��es de la�os: loop

4.3.3.Instru��es de contagem
4.3.4.Instru��es de compara��o

4.3.5.Instru��es de flag

4.3.1.Instru��es de salto.

Voltar ao �ndice Geral

Usadas para transferir o processo de execu��o do programa para o operador


indicado.

JMP

JA (JNBE)

JAE (JNBE)

JB (JNAE)

JBE (JNA)

JE (JZ)

JNE (JNZ)

JG (JNLE)

JGE (JNL)

JL (JNGE)

JLE (JNG)

JC

JNC

JNO

JNP (JPO)

JNS

JO

JP (JPE)

JS

INSTRU��O JMP

Prop�sito: Salto incondicional.

Sintaxe:

JMP dest�ino
esta instru��o�usada par adesviar o curso do programa sem tomar em conta as
condi��es atuais dos flags ou dos dados.

INSTRU��O JA (JNBE)

Prop�sito: Salto condicional.

Sintaxe:

JA s�mbolo

Ap�s uma compara��o este comando salta se n�o�igual.

Isto quer dizer que o salto s��feito se o flag CF ou o flag ZF est��o


desativados, ou seja, se um dos dois for zero.

INSTRU��O JAE (JNB)

Prop�sito: Salto condicional.

Sintaxe:

JAE s�mbolo

A instru��o salta se est� up, se est� equal ou se est� not down.

O salto � feito se CF est� desativado.

INSTRU��O JB (JNAE)

Prop�sito: Salto condicional.

Sintaxe:

JB s�mbolo

A instru��o salta se est� down, se est� not up ou se est�� equal. O


salto � feito se CF est� ativado.

INSTRU��O JBE (JNA)

Prop�sito: Salto condicional.

Sintaxe:

JBE s�mbolo

A instru��o salta se est� down, se est� equal ou se est� not up.

O salto � feito se CF ou ZF est��o ativados, ou seja, se um deles for 1.


INSTRU��O JE (JZ)

Prop�sito: Salto condicional.

Sintaxe:

JE s�mbolo

A instru��o salta se est� equal ou se est� zero.

O salto � feito se ZF est� ativado.

INSTRU��O JNE (JNZ)

Prop�sito: Salto condicional.

Sintaxe:

JNE s�mbolo

A instru��o salta se est� not equal ou se est� zero.

O salto � feito se ZF est� desativado.

INSTRU��O JG (JNLE)

Prop�sito: Salto condicional, e o sinal � tomado.

Sintaxe:

JG s�mbolo

A instru��o salta se est� larger, se est� not larger ou se est� equal.

O salto ocorre se ZF = 0 ou se OF = SF.

INSTRU��O JGE (JNL)

Prop�sito: Salto condicional, e o sinal�tomado.

Sintaxe:

JGE s�mbolo

A instru��o salta se est� larger, se est� less than ou se est� equal.

O salto � feito se SF = OF.


INSTRU��O JL (JNGE)

Prop�sito: Salto condicional, e o sinal � tomado.

Sintaxe:

JL s�mbolo

A instru��o salta se est� less than, se est� not larger than ou se est�
equal.

O salto � feito se SF � diferente de OF.

INSTRU��O JLE (JNG)

Prop�sito: Salto condicional, e o sinal�tomado.

Sintaxe:

JLE s�mbolo

A instru��o salta se est� less than, se est� equal ou se est� not larger.

O salto � feito se ZF = 1 ou se SF � diferente de OF.

INSTRU��O JC

Prop�sito: Salto condicional, e os flags s�o tomados.

Sintaxe:

JC s�mbolo

A instru��o salta se h� carry.

O salto � feito se CF = 1.

INSTRU��O JNC

Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:

JNC s�mbolo

A instru��o salta se n�o h� carry.

O salto � feito se CF = 0.

INSTRU��O JNO
Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:

JNO s�mbolo

A instru��o salta se n�o h� overflow

O salto � feito se OF = 0.

INSTRU��O JNP (JPO)

Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:

JNP s�mbolo

A instru��o salta se n�o h paridade ou se a paridade � �mpar.

O salto � feito se PF = 0.

INSTRU��O JNS

Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:

JNP s�mbolo

A instru��o salta se o sinal est� desativado.

O salto � feito se SF = 0.

INSTRU��O JO

Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:

JO s�mbolo

A instru��o salta se h� overflow.

O salto � feito se OF = 1.

INSTRU��O JP (JPE)

Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:
JP s�mbolo

A instru��o salta se h paridade ou se a paridade�par.

O salto � feito se PF = 1.

INSTRU��O JS

Prop�sito: Salto condicional, e o estado dos flags � tomado.

Sintaxe:

JS s�mbolo

A instru��o salta se o sinal est� ativado.

O salto � feito se SF =1.

4.3.2.Instru��es para la�os: LOOP.

Voltar ao �ndice Geral

Estas instru��es transferem a execu��o do processo, condicional ou


incondicionalmente, para um dest�ino, repetindo a a��o at� o contador ser zero.

LOOP

LOOPE

LOOPNE

INSTRU��O LOOP

Prop�sito: Gerar um la�o no programa.

Sintaxe:

LOOP s�mbolo

A instru��o LOOP decrementa CX de 1 e transfere a execu��o do programa para


o s�mbolo que � dado como operador, caso CX ainda n�o seja 1.

INSTRU��O LOOPE

Prop�sito: Gerar um la�o no programa, considerando o estado de ZF.

Sintaxe:

LOOPE s�mbolo

Esta instru��o decrementa CX de 1. Se CX�diferente de zero e ZF � igual a


1, ent�o a execu��o do programa�transferida para o s�mbolo indicado como operador.
INSTRU��O LOOPNE

Prop�sito: Gerar um la�o no programa, considerando o estado de ZF.

Sintaxe:

LOOPNE s�mbolo

Esta instru��o decrementa CX de 1 e transfere a execu��o do programa apenas


se ZF � diferente de 0.

4.3.3.Instru��es contadoras.

Voltar ao �ndice Geral

Estas instru��es s�o usadas para decrementar ou incrementar o conte�do


decontadores.

DEC

INC

DEC INSTRUCTION

Prop�sito: Decrementar o operador.

Sintaxe:

DEC dest�ino

Esta instru��o subtrai 1 do operador dest�ino e armazena o novo valor no


mesmo operador.

INSTRU��O INC

Prop�sito: Incrementar o operador.

Sintaxe:

INC dest�ino

Esta instru��o adiciona 1 ao operador dest�ino e mant�m o resultado no


mesmo operador.

4.3.4.Instru��es de compara��o.

Voltar ao �ndice Geral

Estas instru��es s�o usadas para comparar os operadores, e elas afetam o


conte�do dos flags.

CMP
CMPS (CMPSB) (CMPSW)

INSTRU��O CMP

Prop�sito: Comparar os operadores.

Sintaxe:

CMP dest�ino,fonte

Esta instru��o subtrai o operador fonte do dest�ino, mas n�o armazena o


resultado da opera��o, apenas afeta o estado dos flags.

INSTRU��O CMPS (CMPSB) (CMPSW)

Prop�sito: Comparar cadeias de um byte ou uma palavra.

Sintaxe:

CMP dest�ino,fonte

Esta instru��o compara efetuando uma subtra��o entre o byte ou palavra


endere�ado por DI, dentro do segmento extra de dados, e o byte ou palavra
endere�ado por SI dentro do segmento de dados, afetando o registrador de flags, mas
sem devolver o resultado da subtra��o.

A instru��o automaticamente incrementa ou decrementa os registradores de


�ndice SI e DI, dependendo do valor do flag DF, de modo a indicar os pr�ximos dois
elementos a serem comparados. O valor de incremento ou decremento � uma de uma ou
duas unidades, dependendo da natureza da opera��o.

Diante desta instru��o, pode-se usar um prefixo para repeti��o, de modo a


comparar dois blocos de mem�ria entre si, repetindo a instru��o de compara��o at�
que ambos se tornem iguais ou desiguais.

4.3.5.Instru��es de flag.

Voltar ao �ndice Geral

Estas instru��es afetam diretamente o conte�do dos flags.

CLC

CLD

CLI

CMC

STC

STD

STI
INSTRU��O CLC

Prop�sito: Limpar o flag de carry.

Sintaxe:

CLC

Esta instru��o desliga o bit correspondente ao flag de carry. Em outras


palavras, ela o ajusta para zero.

INSTRU��O CLD

Prop�sito: Limpar o flag de endere�o.

Sintaxe:

CLD

Esta instru��o desliga o bit correspondente ao flag de endere�o.

INSTRU��O CLI

Prop�sito: Limpar o flag de interrup��o.

Sintaxe:

CLI

Esta instru��o desliga o flag de interrup��es, desabilitando, deste modo,


interrup��es mascar�veis.

Uma interrup��o mascar�vel � aquela cujas fun��es s�o desativadas quando


IF=0.

INSTRU��O CMC

Prop�sito: Complementar o flag de carry.

Sintaxe:

CMC

Esta instru��o complementa o estado do flag CF. Se CF = 0 a instru��o o


iguala a 1. Se CF = 1, a instru��o o iguala a 0.

Poder�amos dizer que ela apenas inverte o valor do flag.


INSTRU��O STC

Prop�sito: Ativar o flag de carry.

Sintaxe:

STC

Esta instru��o ajusta para 1 o flag CF.

INSTRU��O STD

Prop�sito: Ativar o flag de endere�o.

Sintaxe:

STD

Esta instru��o ajusta para 1 o flag DF.

INSTRU��O STI

Prop�sito: Ativar o flag de insterrup��o.

Sintaxe:

STI

Esta instru��o ativa o flag IF, e habilita interrup��es externas mascar


veis (que s� funcionam quando IF = 1).

CAP�TULO 5: INTERRUP��ES E GER�NCIA DE ARQUIVOS

Voltar ao �ndice Geral

Conte�do:

5.1.Interrup��es

5.1.1.Interrup��es de hardware interno

5.1.2.Interrup��es de hardware externo

5.1.3.Interrup��es de software

5.1.4.Interrup��es mais comuns

5.2.Gerenciamento de arquivos

5.1.1.Interrup��es de hardware interno

Voltar ao �ndice Geral

Interrup��es internas s�o geradas por certos eventos que ocorrem durante a
execu��o de um programa.
Este tipo de interrup��es s�o gerenciadas, na sua totalidade, pelo hardware
e n�o � poss�vel modific�-las. Um exemplo claro deste tipo de interrup��es�a que
atualiza o contador do clock interno do computador, o hardware chama esta
interrup��o muitas vezes durante um segundo.

N�o nos � permitido gerenciar diretamente esta interrup��o, uma vez que n�o
se pode controlar a hora atualizada por software. Mas podemos usar seus efeitos no
computador para o nosso benef�cio, por exemplo para criar um virtual clock
atualizado continuamente pelo contador interno de clock. Para tanto, precisamos
apenas ler o valor atual do contador e o

5.1.2.Interrup��es de hardware externo

Voltar ao �ndice Geral

Interrup��es externas s�o geradas atrav�s de dispositivos perif�ricos, tais


como teclados, impressoras, placas de comunica��o, entre outros. S�o tamb�m geradas
por co-processadores.

N�o � poss�vel desativar interrup��es externas. Estas interrup��es n�o s�o


enviadas diretamente para a CPU, mas, de uma forma melhor, s�o enviadas para um
circuito integrado cuja fun��o exclusiva � manusear este tipo de interrup��o. O
circuito, chamado PIC8259A, � controlado pela CPU atrav�s de uma s�rie de
comunica��o chamada paths.

5.1.3.Interrup��es de software

Voltar ao �ndice Geral

Interrup��es de software podem ser ativadas diretamente por nossos


programas assembly, invocando o n�mero da interrup��o desejada com a instru��o INT.

O uso das interrup��es facilita muito a cria��o dos programas, torna-os


menores. Al�m disso,�f�cil compreend�-las e geram boa performance. Este tipo de
interrup��es podem ser separadas em duas categorias:

Interrup��es do Sistema Operacional DOS e interrup��es do BIOS.

A diferen�a entre ambas�que as interrup��es do sistema operacional s�o mais


f ceis de usar, mas tamb�m s�o mais lentas, uma vez que acessam os servi�os do
BIOS. Por outro lado, interrup��es do BIOS s�o muito mais r�pidas, mas possuem a
desvantagem de serem parte do hardware, o que significa serem espec�ficas �
arquitetura do computador em quest�o.

A escolha sobre qual o tipo de interrup��o usar ir depender somente das


caracter�sticas que voc� deseja dar ao seu programa: velocidade (use BIOS),
portabilidade (use DOS).

5.1.4.Interrup��es mais comuns

Voltar ao �ndice Geral

Conte�do

5.1.4.1.Int 21H (Interrup��o do DOS)

M�ltiplas chamadas � fun��es DOS.


5.1.4.2.Int 10H (Interrup��o do BIOS)

Entrada e Sa�da de V�deo.

5.1.4.3.Int 16H (Interrup��o do BIOS)

Entrada e Sa�da do Teclado.

5.1.4.4.Int 17H (Interrup��o do BIOS)

Entrada e Sa�da da Impressora.

5.1.4.1.Interrup��o 21H

Voltar ao �ndice Geral

Prop�sito: Chamar uma diversidade de fun��es DOS.

Sintaxe:

Int 21H

Nota: Quando trabalhamos com o programa TASM�necess�rio especificar que o


valor que est�amos usando est� em hexadecimal.

Esta interrup��o tem muitas fun��es, para acessar cada uma delas �
necess�rio que o n�mero correspondente da fun��o est�eja no registrador AH no
momento da chamada da interrup��o.

Fun��es para mostrar informa��es no v�deo.

02H Exibe um caracter

09H Exibe uma cadeia de caracteres

40H Escreve num dispositivo/arquivo

Fun��es para ler informa��es do teclado.

01H Entrada do teclado

0AH Entrada do teclado usando buffer

3FH Leitura de um dispositivo/arquivo

Fun��es para trabalhar com arquivos.

Nesta se��o s�o apenas especificadas as tarefas de cada fun��o, para uma
refer�ncia acerca dos conceitos usados, veja Introdu��o ao gerenciamento de
arquivos.

m�todo FCB

0FH Abertura de arquivo

14H Leitura seq�encial

15H Escrita seq�encial


16H Cria��o de arquivo

21H Leitura rand�mica

22H Escrita rand�mica

Handles

3CH Cria��o de arquivo

3DH Abertura de arquivo

3EH Fechamento de arquivo

3FH Leitura de arquivo/dispositivo

40H Escrita de arquivo/dispositivo

42H Move ponteiro de leitura/escrita num arquivo

FUN��O 02H

Uso:

Mostra um caracter na tela.

Registradores de chamada:

AH = 02H

DL = Valor de caracter a ser mostrado.

Registradores de retorno:

Nenhum.

Esta fun��o mostra o caracter cujo c�digo hexadecimal corresponde ao valor


armazenado no registrador DL, e n�o modifica nenhum registrador. O uso da fun��o
40H�recomendado ao inv�s desta fun��o.

FUN��O 09H

Uso:

Mostra uma cadeia de caracteres na tela.

Registradores de chamada:

AH = 09H

DS:DX = Endere�o de in�cio da cadeia de caracteres.

Registradores de retorno:

Nenhum.
Esta fun��o mostra os caracteres, um por um, a partir do endere�o indicado
nos registradores DS:DX at� encontrar um caracter $, que�interpretado como fim da
cadeia.

� recomendado usar a fun��o 40H ao inv�s desta.

FUN��O 40H

Uso:

Escrever num dispositivo ou num arquivo.

Registradores de chamada:

AH = 40H

BX = N�mero do handle

CX = Quantidade de bytes a gravar

DS:DX = �rea onde est� o dado

Registradores de retorno:

CF = 0 se n�o houve erro

AX = N�mero de bytes escrito

CF = 1 se houve erro

AX = C�digo de erro

Para usar esta fun��o para mostrar a informa��o na tela, fa�a o registrador
BX ser igual a 1, que�o valor default para o v�deo no DOS.

FUN��O 01H

Uso:

Ler um caracter do teclado e mostr�-lo.

Registradores de chamada

AH = 01H

Registradores de retorno:

AL = Caracter lido

� muito f�cil ler um caracter do teclado com esta fun��o, o c�digo


hexadecimal do caracter lido�armazenado no registrador AL. Nos caso de teclas
especiais, como as de fun��o F1, F2, al�m de outras, o registrador AL conter o
valor 1, sendo necess�rio chamar a fun��o novamente para obter o c�digo daquele
caracter.
FUN��O 0AH

Uso:

Ler caracteres do teclado e armazen -los num buffer.

Registradores de chamada:

AH = 0AH

DS:DX = Endere�o inicial da rea de armazenamento

BYTE 0 = Quantidade de bytes na �rea

BYTE 1 = Quantidade de bytes lidos do BYTE 2 at� BYTE 0 + 2 =


caracteres lidos

Registradores de retorno:

Nenhum.

Os caracteres s�o lidos e armazenados num espa�o de mem�ria que foi


definido. A est�rutura deste espa�o indica que o primeiro byte representar a
quantidade m xima de caracteres que pode ser lida. O segundo, a quantidade de
caracteres lidos e, no terceiro byte, o inicio onde eles s�o armazenados.

Quando se atinge a quantidade m xima permitida, ouve-se o som do speaker e


qualquer caracter adicional�ignorado. Para finalizar a entrada, basta digitar
[ENTER].

FUN��O 3FH

Uso:

Ler informa��o de um dispositivo ou de um arquivo.

Registradores de chamada:

AH = 3FH

BX = N�mero do handle

CX = N�mero de bytes a ler

DS:DX = �rea para receber o dado

Registradores de retorno:

CF = 0 se n�o h erro e AX = n�mero de bytes lidos.

CF = 1 se h erro e AX conter o c�digo de erro.


FUN��O 0FH

Uso:

Abrir um arquivo FCB.

Registradores de chamada:

AH = 0FH

DS:DX = Ponteiro para um FCB

Registradores de retorno:

AL = 00H se n�o h problemas, de outra forma retorna 0FFH

FUN��O 14H

Uso:

Leitura sequencial num arquivo FCB.

Registradores de chamada:

AH = 14H

DS:DX = Ponteiro para um FCB j aberto.

Registradores de retorno:

AL = 0 se n�o h erros, de outra forma o c�digo correspondente de


erro retornar :

1 erro no fim do arquivo, 2 erro na est�rutura FCB e 3 erro de


leitura parcial.

O que esta fun��o faz�ler o pr�ximo bloco de informa��es do endere�o dado


por DS:DX, e atualizar este registro.

FUN��O 15H

Uso:

Escrita sequencial e arquivo FCB.

Registradores de chamada:

AH = 15H

DS:DX = Ponteiro para um FCB ja aberto.

Registradores de retorno:

AL = 00H se n�o h erros, de outra forma conter o c�digo de erro:


1 disco cheio ou arquivo somente de leitura, 2 erro na forma��o ou na especifica��o
do FCB.

A fun��o 15H atualiza o FCB ap�s a escrita do registro para o presente


bloco.

FUN��O 16H

Uso:

Criar um arquivo FCB. Registradores de chamada:

AH = 16H

DS:DX = Ponteiro para um FCB j aberto.

Registradores de retorno:

AL = 00H se n�o h erros, de outra forma conter o valor 0FFH.

� baseada na informa��o advinda de um FCB para criar um arquivo num disco.

FUN��O 21H

Uso:

Ler de modo rand�mico um arquivo FCB.

Registradores de chamada:

AH = 21H

DS:DX = Ponteiro para FCB aberto.

Registradores de retorno:

A = 00H se n�o h erro, de outra forma AH conter o c�digo de erro:

1 se � o fim do arquivo, 2 se h um erro de especifica��o no FCB e


3 se um registro foi lido parcialmente ou o ponteiro de arquivo est� no fim do
mesmo.

Esta fun��o l� o registro especificado pelos campos do bloco atual e


registro de um FCB aberto e coloca a informa��o na DTA, �rea de Transfer�ncia do
Disco.

FUN��O 22H

Uso:

Escrita rand�mica num arquivo FCB.

Registradores de chamada:
AH = 22H

DS:DX = Ponteiro para um FCB aberto.

Registradores de retorno:

AL = 00H se n�o h erro, de outra forma conter o c�digo de erro:

1 se o disco est� cheio ou o arquivo�apenas de leitura e 2 se h


um erro na especifica��o FCB.

Escreve o registro especificado pelos campos do bloco atual e registro de


um FCB aberto. esta informa��o�do conte�do da DTA.

FUN��O 3CH

Uso:

Criar um arquivo se n�o existe ou deix -lo com compirmento 0 se existe.

Registradores de chamada:

AH = 3CH

CH = Atributo do arquivo

DS:DX = Nome do arquivo, no formato ASCII.

Registradores de retorno:

CF = 0 e AX informa o n�mero do handle se n�o h erro. Se caso


houver erro,

CF ser 1 e AX conter o c�digo de erro: 3 caminho n�o encontrado,


4 n�o h handles dispon�veis e 5 acesso negado.

Esta fun��o substitui a fun��o 16H. O nome do arquivo�especificado numa


cadeia ASCII de bytes terminados pelo caracter 0.

O arquivo criado conter os atributos definidos no registrador CX, do


seguinte modo:

Valor Atributos

00H Normal

02H Hidden

04H System

06H Hidden e System

O arquivo�criado com permiss�o de leitura e escrita. N�o�poss�vel a cria��o


de diret�rios atrav�s desta fun��o.
FUN��O 3DH

Uso:

Abre um arquivo e retorna um handle.

Registradores de chamada:

AH = 3DH

AL = modo de acesso

DS:DX = Nome do arquivo, no formato ASCII.

Registradores de retorno:

CF = 0 e AX = n�mero do handle se n�o h erros, de outra forma CF =


1 e AX = c�digo de erro:

01H se a fun��o n�o�v lida, 02H se o arquivo n�o foi encontrado,


03H se o caminho n�o foi encontrado, 04H se n�o h handles dispon�veis, 05H acesso
negado, e 0CH se o c�digo de acesso n�o � v�lido.

O handle retornado � de 16 bits.

O c�digo de acesso�especificado da seguinte maneira:

BITS

7 6 5 4 3 2 1

. . . . 0 0 0 Apenas leitura

. . . . 0 0 1 Apenas escrita

. . . . 0 1 0 Leitura/Escrita

. . . x . . . RESERVADO

FUN��O 3EH

Uso:

Fecha um arquivo (handle).

Registradores de chamada:

AH = 3EH

BX = N�mero do handle associado

Registradores de retorno:

CF = 0 se n�o h erros, ou CF ser 1 e AX conter o c�digo de erro:


06H se o handle � inv�lido.

Esta fun��o atualiza o arquivo e libera o handle que est�ava usando.


FUN��O 3FH

Uso:

Ler uma quantidade espec�fica de bytes de um arquivo aberto e armazen -los


num buffer espec�fico.

5.1.4.2.Interrup��o 10h

Voltar ao �ndice Geral

Prop�sito: Chamar uma diversidade de fun��es do BIOS

Sintaxe:

Int 10H

Esta interrup��o tem v rias fun��es, todas para entrada e sa�da de v�deo.

Para acessar cada uma delas�necess�rio colocar o n�mero da fun��o


correspondente no registrador AH.

Veremos apenas as fun��es mais comuns da interrup��o 10H.

Fun��o 02H, seleciona a posi��o do cursor

Fun��o 09H, exibe um caracter e o atributo na posi��o do cursor

Fun��o 0AH, exibe um caracter na posi��o do cursor

Fun��o 0EH, modo alfanum�rico de exibi��o de caracteres

Fun��o 02h

Uso:

Move o cursor na tela do computador usando o modo texto.

Registradores de chamada:

AH = 02H

BH = P gina de v�deo onde o cursor est� posicionado.

DH = linha

DL = coluna

Registradores de retorno:

Nenhum.

A posi��o do cursor�definida pelas suas coordenadas, iniciando-se na


posi��o 0,0 at� a posi��o 79,24. Logo os valores poss�veis para os registradores DH
e DL s�o: de 0 a 24 para linhas e de 0 a 79 para colunas.

Fun��o 09h

Uso:

Mostra um determinado caracter v rias vezes na tela do computador com um


atributo definido, iniciando pela posi��o atual do cursor.

Registradores de chamada:

AH = 09H

AL = Caracter a exibir

BH = P gina de v�deo, onde o caracter ser mostrado

BL = Atributo do caracter

CX = N�mero de repeti��es.

Registradores de retorno:

Nenhum

Esta fun��o mostra um caracter na tela v rias vezes, de acordo com o n�mero
especificado no registrador CX, mas sem mudar a posi��o do cursor na tela.

Fun��o 0Ah

Uso:

Exibe um caracter na posi��o atual do cursor.

Registradores de chamada:

AH = 0AH

AL = Caracter a exibir

BH = P�gina de v�deo onde o caracter ser� exibido

BL = Cor do caracter (apenas em modo gr fico)

CX = N�mero de repeti��es

Registradores de retorno:

Nenhum.

A principal diferen�a entre esta fun��o e a anterior�permitir mudan�a nos


atributos, bem como mudar a posi��o do cursor.
Fun��o 0EH

Uso:

Exibir um caracter na tela do computador atualizando a posi��o do cursor.

Registradores de chamada:

AH = 0EH

AL = Caracter a exibir

BH = P gina de v�deo onde o caracter ser exibido

BL = Cor a usar (apenas em modo gr fico)

Registradores de retorno:

Nenhum

5.1.4.3.Interrup��o 16H

Voltar ao �ndice Geral

Veremos duas fun��es da interrup��o 16H. A exemplo das demais interrup��es,


usa-se o registrador AH para cham�-las.

Fun��es da interrup��o 16h

Fun��o 00H, l� um caracter do teclado.

Fun��o 01H, l� o estado atual do teclado.

Fun��o 00H Uso:

Ler um caracter do teclado.

Registradores de chamada:

AH = 00H

Registradores de retorno:

AH = C�digo da tecla pressionada

AL = Valor ASCII do caracter

Quando se usa esta interrup��o, os programas executam at� que uma tecla
seja pressionada. Se�um valor ASCII, � armazenado no registrador AH. Caso
contr�rio, o c�digo � armazenado no registrador AL e AH=0.

Este valor de AL pode ser utilizado quando queremos detectar teclas que n�o
est�o diretamente representadas pelo seu valor ASCII, tais como [ALT][CONTROL].

Fun��o 01h

Uso:
Ler o estado do teclado

Registradores de chamada:

AH = 01H

Registradores de retorno:

Se o registrador de flag�zero, significa que h informa��o no


buffer de teclado na mem�ria. Caso contr rio, o buffer est� vazio. Portanto o
valor do registrador AH ser o valor da tecla armazenada no buffer.

5.1.4.4.Interrup��o 17H

Voltar ao �ndice Geral

Prop�sito: Manusear a entrada e sa�da da impressora.

Sintaxe:

Int 17H

Esta interrup��o�usada para enviar caracteres, setar ou ler o estado de uma


impressora.

Fun��es da interrup��o 17h

Fun��o 00H, imprime um valor ASCII

Fun��o 01H, seta a impressora

Fun��o 02H, l� estado da impressora

Fun��o 00H

Uso:

Imprimir um caracter numa impressora.

Registradores de chamada:

AH = 00H

AL = Caracter a imprimir

DX = Porta de conex�o

Registradores de retorno:

AH = estado da impressora

Os valores da porta a colocar no registrador DX s�o:

LPT1 = 0, LPT2 = 1, LPT3 = 2 ...

O estado da impressora � codificado bit a bit como segue:

BIT 1/0 SIGNIFICADO


0 1 estado de time-out

1 -

2 -

3 1 Erro de entrada e sa�da

4 1 Impressora selecionada

5 1 Fim de papel

6 1 Reconhecimento de comunica��o

7 1 A impressora est� pronta para o uso

Os bits 1 e 2 bits n�o s�o relevantes

A maioria dos BIOS suportam 3 portas paralelas, havendo alguns que suportam
4.

Fun��o 01h

Uso:

Setar uma porta paralela.

Registradores de chamada:

AH = 01H

DX = Porta

Registradores de retorno:

AH = Status da impressora

A porta definida no registrador DX pode ser: LPT1=0, LPT2=1, assim por


diante.

O estado da impressora�codificado bit a bit como segue:

BIT 1/0 SIGNIFICADO

0 1 estado de time-out

1 -

2 -

3 1 Erro de entrada e sa�da

4 1 Impressora selecionada

5 1 Fim de papel

6 1 Reconhecimento de comunica��o
7 1 A impressora est� pronta para o uso

Os bits 1 e 2 bits n�o s�o relevantes

Fun��o 02h

Uso:

Obter o status da impressora.

Registradores de chamada:

AH = 01H

DX = Porta

Registradores de retorno

AH = Status da impressora

A porta definida no registrador DX pode ser: LPT1=0, LPT2=1, assim


por diante.

O estado da impressora�codificado bit a bit como segue:

BIT 1/0 SIGNIFICADO

0 1 estado de time-out

1 -

2 -

3 1 Erro de entrada e sa�da

4 1 Impressora selecionada

5 1 Fim de papel

6 1 Reconhecimento de comunica��o

7 1 A impressora est� pronta para o uso

Os bits 1 e 2 bits n�o s�o relevantes

5.2. Gerenciamento de Arquivos

Voltar ao �ndice Geral

Conte�do:

5.2.1.Modos de trabalhar com arquivos

5.2.2.m�todo FCB

5.2.2.1.Introdu��o

5.2.2.2.Abertura de arquivo
5.2.2.3.Criar um novo arquivo

5.2.2.4.Escrita seq�encial

5.2.2.5.Leitura seq�encial

5.2.2.6.Leitura e escrita rand�mica

5.2.2.7.Fechar um arquivo

5.2.3.m�todos de canais de comunica��o

5.2.1.Modos de trabalhar com arquivos.

Voltar ao �ndice Geral

H� dois modos de trabalhar com arquivos. O primeiro�atrav�s de FCB (blocos


de controle de arquivo), o segundo � atrav�s de canais de comunica��o, tamb�m
conhecidos como handles.

O primeiro modo de manusear arquivos tem sido usado desde o sistema


operacional CPM, predecessor do DOS, logo permite certas compatibilidades com
muitos arquivos velhos do CPM bem como com a vers�o 1.0 do DOS, al�m deste m�todo
permitir-nos ter um n�mero ilimitado de arquivos abertos ao mesmo tempo. Se voc�
quiser criar um volume para o disco, a �nica forma �atrav�s deste m�todo.

Depois de considerarmos as vantagens de FCB, o uso do m�todo de Canais de


Comunica��o�muito simples e permite-nos um melhor manuseio de erros.

Para uma melhor facilidade, daqui por diante nos referiremos aos Blocos de
Controle de Arquivo como FCBs e aos Canais de Comunica��o como handles.

5.2.2.1.INTRODU��O

Voltar ao �ndice Geral

H� dois tipos de FCB, o normal, cujo comprimento�37 bytes, e o extendido,


com 44 bytes. Nest�e tutorial iremos assumir o primeiro, ou seja, quando falarmos
em FCB, est�aremos fazendo refer�ncia ao tipo normal (37 bytes).

O FCB�composto de informa��es dadas pelo programador e por informa��es que


ele toma diretamente do sistema operacional. Quando est�es tipos de arquivos s�o
usados, s��poss�vel se trabalhar no diret�rio corrente, pois FCBs n�o fornecem
suporte ao sistema de organiza��o de arquivos atrav�s de diret�rios do DOS.

FCB�composto pelos seguintes campos:

POSI��O COMPRIMENTO SIGNIFICADO

00H 1 Byte Drive

01H 8 Bytes Nome do arquivo

09H 3 Bytes Extens�o

0CH 2 Bytes N�mero do bloco

0EH 2 Bytes Tamanho do registro


10H 4 Bytes Tamanho do arquivo

14H 2 Bytes Data de cria��o

16H 2 Bytes Hora de cria��o

18H 8 Bytes Reservado

20H 1 Bytes Registro corrente

21H 4 Bytes Registro rand�mico

Para selecionar o drive de trabalho, assuma: drive A = 1; drive B = 2; etc.

Se for usado 0, o drive que est� sendo usado no momento ser tomado como
op��o.

O nome do arquivo deve ser justificado � esquerda e�necess�rio preencher


com espa�os os bytes remanescentes, a extens�o�colocada do mesmo modo.

O bloco corrente e o registro corrente dizem ao computador que registro ser


acessado nas opera��es de leitura e escrita. Um bloco � um grupo de 128 registros.
O primeiro bloco de arquivo�o bloco 0. O primeiro registro � o registro 0, logo o
�ltimo registro do primeiro bloco deve ser o 127, uma vez que a numera��o�iniciada
com 0 e o bloco pode conter 128 registradores no total.

5.2.2.2.ABERTURA DE ARQUIVO

Voltar ao �ndice Geral

Para abrir um arquivo FCB�usada a fun��o 0FH da interrup��o 21h. A unidade,


o nome e a extens�o do arquivo devem ser inicializadas antes da abertura.

O registrador DX deve apontar para o bloco. Se o valor FFH � retornado no


registrador AH quando da chamada da interrup��o, ent�o o arquivo n�o foi
encontrado. Se tudo der certo, o valor 0 � retornado.

Se o arquivo�aberto, ent�o o DOS inicializa o bloco corrente em 0, o


tamanho do registro para 128 bytes. O tamanho do arquivo e a sua data s�o
preenchidos com as informa��es encontradas no diret�rio.

5.2.2.3.CRIAR UM NOVO ARQUIVO

Voltar ao �ndice Geral

Para a cria��o de arquivos�usada a fun��o 16H da interrup��o 21h.

O registrador DX deve apontar para uma est�rutura de controle cujo os


requisitos s�o de que pelo menos a unidade l�gica, o nome e a extens�o do arquivo
sejam definidas.

Caso ocorra problema, o valor FFH deve retornar em AL, de outra forma este
registrador conter o valor 0.

5.2.2.4.ESCRITA SEQUENCIAL

Antes de conseguirmos realizar escrita para o disco,�necess�rio definir a


�rea de transfer�ncia de dados usando, para tanto, a fun��o 1AH da interrup��o 21h.
A fun��o 1AH n�o retorna qualquer estado do disco nem da opera��o. Mas a
fun��o 15H, que usaremos para escrever para o disco, faz isso no registrador AL. Se
este for igual a zero, ent�o n�o h erro e os campos de registro corrente e de
bloco s�o atualizados.

5.2.2.5.LEITURA SEQ�ENCIAL

Voltar ao �ndice Geral

Antes de tudo, devemos definir a rea de transfer�ncia de arquivo ou DTA.

Para a leitura seq�encial usaremos a fun��o 14H da interrup��o 21h.

O registro a ser lido�definido pelos campos registro e bloco corrente. O


registrador AL retorna o estado da opera��o. Se AL cont�m o valor 1 ou 3, significa
que foi atingido o fim do arquivo. Um valor 2, por sua vez, significa que o FCB
est� est�ruturado erroneamente. Caso n�o ocorra erro, AL conter o valor 0 e os
campos de registro e bloco corrente s�o atualizados.

5.2.2.6.LEITURA E ESCRITA RAND�MICA

Voltar ao �ndice Geral

A fun��o 21H e a fun��o 22H da insterrup��o 21h s�o usadas � realiza��o,


respectivamente, da escrita e leitura rand�mica.

O n�mero de registro rand�mico e o bloco corrente s�o usados para calcular


a posi��o relativa do registro a ser lido ou escrito.

O registrador AL retorna a mesma informa��o do que par a escrita e leitura


seq�encial. A informa��o a ser lida ser retornada na rea de transfer�ncia do
disco, bem como a informa��o a ser escrita retorna na DTA.

5.2.2.7.FECHAR UM ARQUIVO

Voltar ao �ndice Geral

Para fechar um arquivo usamos a fun��o 10H da interrup��o 21h.

Se ap�s invocar esta fun��o, o regisatrador AL conter o valor FFH,


significa que o arquivo foi mudado de posi��o, o disco foi mudado ou h� erro de
acesso a disco.

5.2.3.Canais de comunica��o.

Voltar ao �ndice Geral

5.2.3.1.Trabalhando com handles

5.2.3.2.Fun��es para usar handles

5.2.3.1.TRABALHANDO COM HANDLES

Voltar ao �ndice Geral

O uso de handles para gerenciar arquivos traz grandes facilidades na


cria��o de arquivos e o programador pode concentrar-se em outros aspectos da
programa��o sem preocupar-se com detalhes que podem ser manuseados pelo sistema
operacional.
A facilidade dos handles consiste em que para operarmos sobre um arquivo �
apenas necess�rio definirmos o nome do mesmo e o n�mero de handle a usar, todo o
rest�o da informa��o�manuseada internamente pelo DOS.

Quando usamos este m�todo para trabalhar com arquivos, n�o h distin��o
entre acesso seq�encial ou rand�mico, o arquivo�simplesmente tomado como uma rede
de bytes.

5.2.3.2.FUN��ES PARA USAR HANDLES

Voltar ao �ndice Geral

As fun��es usadas para o manuseio de arquivos atrav�s de handles s�o


descritas na p gina sobre: Interrup��es, na se��o dedicada � interrup��o 21h.

CAP�TULO 6: MACROS E PROCEDIMENTOS

Voltar ao �ndice Geral

Conte�do

6.1.Procedimentos

6.1.1.Defini��o de procedimento

6.1.2.Sintaxe de um procedimento

6.2.Macros

6.2.1.Defini��o de uma Macro

6.2.2.Sintaxe de uma Macro

6.2.3.Bibliotecas de Macros

6.1.Procedimentos

Voltar ao �ndice Geral

6.1.1.Defini��o de um procedimento

Um procedimento�uma cole��o de instru��es para as quais � poss�vel


direcionar o curso de nosso programa, e uma vez que a execu��o destas instru��es do
procedimento tenha acabado, o controle retorna para linha que segue � que chamou o
procedimento.

Procedimentos nos ajudam a criar programas leg�veis e f ceis de modificar.

Quando se invoca um procedimento, o endere�o da pr�xima instru��o do


programa � mantido na pilha, de onde � recuperado quando do retorno do
procedimento.

6.1.2.Sintaxe de um procedimento

Voltar ao �ndice Geral

H� dois tipos de procedimentos, os intrasegments, que se localizam no


mesmo segmento da instru��o que o chama, e os inter segments, que podem se
localizar em diferentes segmentos de mem�ria.

Quando os procedimentos intrasegments s�o usados, o valor de IP �


armazenado na pilha e quando os procedimentos inter segments s�o usados o valor de
CS:IP�armazenado. Lembre-se que o registrador CS indica qual o segmento de c�digo.

A diretiva que chama um procedimento�como segue:

CALL NomedoProcedimento

As partes que comp�em um procedimento s�o as seguintes:

Declara��o do procedimento

C�digo do procedimento

Diretiva de retorno

T�rmino do procedimento

Por exemplo, se quisermos uma rotina que soma dois bytes armazenados em AH
e AL, e o resultado da soma em BX: Soma Proc Near ; Declara��o do Procedimento Mov
BX, 0 ; Conte�do do Procedimento...

Mov BL, AH

Mov AH, 00

Add BX, AX

Ret ; Diretiva de retorno

Soma EndP ; Fim do Procedimento

Na declara��o, a primeira palavra, Soma, corresponde ao nome do


procedimento. Proc declara-o e a palavra Near indica que o procedimento � do tipo
intrasegment, ou seja, no mesmo segmento. A diretiva Ret carrega IP com o endere�o
armazenado na pilha para retornar ao programa que chamou.

Finalmente, Soma EndP indica o fim do procedimento. Para declarar um


procedimento inter segment, basta substituir a palavra Near para FAR.

A chamada deste procedimento�feito de modo id�ntico:

Call Soma

Macros oferecem uma grande flexibilidade na programa��o, comparadas aos


procedimentos.

6.2.Macros

Voltar ao �ndice Geral

6.2.1.Defini��o de uma Macro

Uma macro � um grupo de instru��es repetitivas em um programa que s�o


codificadas apenas uma vez e, assim, poupam espa�o, podendo ser utilizadas tantas
vezes quantas forem necess�rio.
A principal diferen�a entre uma macro e um procedimento�que numa macro �
poss�vel a passagem de par�metros e num procedimento n�o. No momento em que a macro
� executada, cada par�metro�substitu�do pelo nome ou valor especificado na hora da
chamada.

Podemos dizer, desta forma, que um procedimento�uma extens�o de um


determinado programa, enquanto que uma macro � um m�dulo que especifica fun��es que
podem ser utilizadas por diferentes programas.

Uma outra diferen�a entre uma macro e um procedimento�o modo de chamada de


cada um. Para chamar um procedimento, se faz necess�rio a diretiva CALL, por outro
lado, para chamada de macros�feita com se fosse uma instru��o normal da linguagem
assembly.

6.2.2.Sintaxe de uma Macro

Voltar ao �ndice Geral

As partes que comp�em uma macro s�o as seguintes:

Declara��o da macro

C�digo da macro

Diretiva de t�rmino da macro

A declara��o da macro � feita como se segue:

NomeMacro MACRO [par�metro1, par�metro2...]

Do mesmo modo que temos a funcionalidade dos par�metros,�poss�vel tamb�m a


cria��o de uma macro que n�o os possua.

A diretiva de t�rmino da macro �: ENDM

Um exemplo de uma macro para colocar o cursor numa determinada posi��o da


tela:

Pos MACRO Linha, Coluna

PUSH AX

PUSH BX

PUSH DX

MOV AH, 02H

MOV DH, Linha

MOV DL, Coluna

MOV BH, 0

INT 10H

POP DX

POP BX
POP AX

ENDM

Para usar uma macro basta cham -la pelo seu nome, tal como se fosse
qualquer instru��o na linguagem assembly: Pos 8, 6

6.2.3.Biblioteca de Macros

Voltar ao �ndice Geral

Uma das facilidades oferecidas pelo uso de macros�a cria��o de bibliotecas,


que s�o grupo de macros, podendo ser inclu�das num programa origin�rias de arquivos
diferentes. A cria��o destas bibliotecas�muito simples. Criamos um arquivo com
todas as macros que ser�o necess�rias e o salvamos como um arquivo texto.

Para incluir uma biblioteca num programa, basta colocar a seguinte


instru��o Include NomedoArquivo na parte inicial do programa, antes da declara��o
do modelo de mem�ria.

Supondo que o arquivo de macros tenha sido salvo com o nome de MACROS.TXT,
a instru��o Include seria utilizada do seguinte modo:

;In�cio do programa

Include MACROS.TXT

.MODEL SMALL

.DATA

;Os dados v�o aqui

.CODE

Inicio:

;O c�digo do programa come�a aqui

.STACK

;A pilha � declarada

End Inicio

;Fim do programa

CAP�TULO 7: EXEMPLOS DE PROGRAMAS

Voltar ao �ndice Geral

Aqui voc� pode pegar exemplos de porogramas no tasm e no debug.

CAP�TULO 8: BIBLIOGRAFIA

Voltar ao �ndice Geral


Cr�ditos:

Monico Brise�o C., Engenheiro

Id�ia Original

Desenvolvimento e Implementa��o da edi��o 1996

Hugo Eduardo P�rez P.

Desenvolvimento e Implementa��o da edi��o 1995

V�ctor Hugo Avila B.

Vers�o Inglesa

Jeferson Botelho do Amaral

Vers�o Portuguesa

Ana Mar�a Peraza

Programadora de Linguagem Assembly

Graciela Salcedo Mancilla

Programadora Tcl/Tk

Juan Olmos Monroy

Designer Gr fico

Refer�ncias Bibliogr ficas:

Assembly Language For IBM Microcomputers

J. Terry Godfrey

Prentice Hall Hispanoamericana, S.A.

Mexico

Basic Assembler

A. Rojas

Ed Computec Editores S.A. de C.V.

Mexico

IBM Personal Computer Assembly Language Tutorial

Joshua Auerbach

Yale University
Organiza��o Estruturada de Computadores

Andrew S. Tanenbaum

Prentice Hall do Brasil

Guia do Programador para as Placas EGA e VGA

Richard F. Ferraro

Ed. Ci�ncia Moderna

Programando em Assembler 8086/8088

Jeremias R. D. Pereira dos Santos

Edison Raymundi Junior

McGraw-Hill

Assembly IBM PC - T�cnicas de Programa��o

Alan R. Miller

EBRAS, Editora Brasileira

Linguagem Assembly para IBM PC

Peter Norton

John Socha

Editora Campus

C - Caixa de Ferramentas

Carlos Augusto P. Gomes

Antonio Carlos Barbosa

Editora �rica

Interrup��es MS-DOS, ROM-BIOS

Eurico Soalheiro Br s

McGraw-Hill

Desenvolvimento de Software B sico

Leland L. Beck

Editora Campus

Programa��o Assembly 80386 - Guia pr�tico para Programadores

Ross P. Nelson

McGraw-Hill

Você também pode gostar