Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial Assembly
Office 365
Home
Office Home
and Business
2013
Compre
Compre
Compre
CAPTULO 1: INTRODUO
Voltar ao ndice Geral
Contedo:
1.1.O que h de novo neste material
1.2.Apresentao
1.3.Por que aprender Assembly?
1.2.Apresentao:
Voltar ao ndice Geral
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 linguagemo 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 fcil 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.
http://chapox.tripod.com/tutasbly.htm
1/44
05/11/2014
Tutorial Assembly
esta seo tem o propsito de fazer um breve comentrio a respeito dos principais componentes de um sistema computacional, o que ir permitir ao usurio uma melhor
compreenso dos conceitos propostos no decorrer do tutorial.
Sistema Computacional.
Voltar ao ndice Geral
Chamamos de Sistema Computacional a completa configurao de um computador, incluindo os perifricos e o sistema operacional.
2.1.1.Processador Central.
Voltar ao ndice Geral
tambm conhecido por CPU ou Unidade Central de Processamento, que por sua vezcomposta 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 freqncia 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 clculo 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 queconhecido como tamanho da palavra, isto , a quantidade de bits que o processadorcapaz de manusear de
uma s vez.
http://chapox.tripod.com/tutasbly.htm
2/44
05/11/2014
Tutorial Assembly
2.1.2.Memria Principal.
Voltar ao ndice Geral
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 ecapaz 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 memriasRandom Access Memory ou RAM. A principal desvantagem deste tipo de memriao fato de que seus circuitos integrados
perdem a informao que armazenavam quando a energia eltrica for interrompida, ou seja, ela voltil. 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.2.CONCEITOS BSICOS
Voltar ao ndice Geral
Contedo:
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 binrios para decimais
2.2.1.4.Convertendo nmeros decimais para binrios
2.2.1.5.Sistema hexadecimal
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.1.1.Unidades de informao
Voltar ao ndice Geral
Para o PC processar a informao, necessrio que ela esteja em clulas especiais, chamadas registradores.
Os registradores so grupos de 8 ou 16 flip-flops. Um flip-flopum 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-flopinterpretado 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 bitsconhecido como palavra; uma palavra pode ser dividida em grupos de 8 bits chamados bytes, e grupos de 4 bits chamados nibbles.
http://chapox.tripod.com/tutasbly.htm
3/44
05/11/2014
Tutorial Assembly
2.2.1.2.Sistemas numricos
Voltar ao ndice Geral
O sistema numrico que ns usamos diariamente o decimal, mas este sistema no conveniente para mquinas, 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 clculo 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.5.Sistema hexadecimal
Voltar ao ndice Geral
Na base hexadecimal temos 16 dgitos, que vo de 0 a 9 e da letra A at a F, 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 binrios e hexadecimais fcil. A primeira coisa a fazer dividir o nmero binrio 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 binrio 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
http://chapox.tripod.com/tutasbly.htm
4/44
05/11/2014
Tutorial Assembly
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 binrio apenas necessrio inverter os passos: tomamos o primeiro dgito hexadecimal e o convertemos para
binrio, a seguir o segundo, e assim por diante.
2.2.2.1.Cdigo ASCII
Voltar ao ndice Geral
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 binrio 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 dadosmuito ineficiente no aspecto numrico, uma vez que no formato binrio 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.
2.2.2.2.mtodo BCD
Voltar ao ndice Geral
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 prtico para representao numrica do que o cdigo ASCII. Embora ainda menos prtico do que o binrio, com o
mtodo BCD podemos representar dgitos de 0 a 99. Com o binrio, 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.3.PROGRAMA DEBUG
Voltar ao ndice Geral
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
http://chapox.tripod.com/tutasbly.htm
5/44
05/11/2014
Tutorial Assembly
* 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 seqncia de zeros e uns que podem ser interpretados pelo
processador.
* O ltimo est gioa eliminao de erros detectados no programa na fase de teste. A correo normalmente requer a repetio de todos os passos, com observao
atenta.
2.3.2.Registradores da CPU.
Voltar ao ndice Geral
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.
Voltar ao ndice Geral
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 relocveis.
Os principais comandos do programa debug so:
6/44
05/11/2014
Tutorial Assembly
2.3.4.estrutura Assembly.
Voltar ao ndice Geral
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 linguagemconstitudo 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".
http://chapox.tripod.com/tutasbly.htm
7/44
05/11/2014
Tutorial Assembly
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 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 instrues:
-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
instruo:
-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 instruo 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).
http://chapox.tripod.com/tutasbly.htm
8/44
05/11/2014
Tutorial Assembly
http://chapox.tripod.com/tutasbly.htm
9/44
05/11/2014
Tutorial Assembly
3.1.2.Programao Assembly
3.2.Processo Assembly
3.2.1.Segmentos
3.2.2.Tabela de equivalncia
3.3.Pequenos programas em Assembly
3.4.Tipos de instrues
3.1.1.SOFTWARE NECESSRIO
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 executvel 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 intermedirio" do programa, assim chamado
porque ainda noum programa executvel e to pouco um programa fonte. O linker gera a partir de um programa .OBJ, ou da combinao de vrios deles, um programa
executvel, cuja extenso normalmente .EXE, embora possa ser .COM dependendo da forma como for montado e ligado.
3.1.2.PROGRAMAO ASSEMBLY
Voltar ao ndice Geral
Para construirmos os programas com o TASM, devemos estruturar o fonte de forma diferenciada ao que fazamos com o programa debug. 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 fazer comentrios em programas assembly
.MODEL SMALL ;modelo de memria
.STACK ;espao de memria para instrues do programa na pilha
.CODE ;as linhas seguintes so instrues 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 ;interrupo 10h
mov ah,4ch ;move o valor 4ch para o registrador ah
int 21h ;interrupo 21h
END ;finaliza o cdigo do programa
este programa assembly muda o tamanho do cursor.
Segundo passo
http://chapox.tripod.com/tutasbly.htm
10/44
05/11/2014
Tutorial Assembly
3.2.Processo Assembly.
Voltar ao ndice Geral
3.2.1.Segmentos
3.2.2.Tabela de equivalncia
3.2.1.SEGMENTOS
Voltar ao ndice Geral
A arquitetura dos processadores x86 fora-nos a usar segmentos de memria para gerenciar a informao, o tamanho destes segmentosde 64Kb.
A razo de ser destes segmentosque, considerando que o tamanho mximo de um nmero que o processador pode gerenciardado 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 necessrio que cada informao ou instruo se encontre na rea correspondente ao seu
segmento. O endereo do segmentofornecido 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 segundouma 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
http://chapox.tripod.com/tutasbly.htm
11/44
05/11/2014
Tutorial Assembly
3.2.2.TABELAS DE EQUIVALNCIA
Voltar ao ndice Geral
Cada uma das partes numa linha de cdigo assemblyconhecida 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 OBJler 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 Varum pouco diferenciado, o montador
verifica que ela nouma 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
necessria 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 programacarregado e
antes de ser executado.
http://chapox.tripod.com/tutasbly.htm
12/44
05/11/2014
Tutorial Assembly
Quarto passo
Usar o programa TLINK para criar o programa executvel.
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 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
Voltar ao ndice Geral
Em qualquer programa h necessidade de se mover dados na memria e em registradores da CPU; h vrios modos de se faz-lo: pode-se copiar os dados da memria
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 viceversa.
este movimento de dados sujeito a regras e restries, entre elas:
*Nopossvel mover dados de um local da memria para outro diretamente; necessrio primeiro mover o dado do local de origem para um registrador e
ento do registrador para o local de destino.
*Nopossvel mover uma constante diretamente para um registrador de segmento; primeiro deve-se mover para um registrador.
possvel mover blocos de dados atravs de instrues 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 instrues toma os valores dos endereos definidos por DS:SI como o grupo de dados a mover e ES:DI como a nova localizao dos
dados.
Para mover dados h tambm estruturas chamadas pilhas, onde o dado introduzido com a instruo push eextrado com a instruo pop Numa pilha o primeiro
dado a entraro ltimo a sair, por exemplo:
PUSH AX
PUSH BX
PUSH CX
Para retornar os valores da pilha referentes cada registrador necessrio seguir-se a ordem:
POP CX
POP BX
POP AX
Para a comunicao com dispositivos externos o comando de sadausado para o envio de informaes a uma porta e o comando de entradausado para receber
informao de uma porta.
A sintaxe do comando de sada:
OUT DX,AX
Onde DX contm o valor da porta que ser usada para a comunicao e AX contm a informao que ser enviada.
A sintaxe do comando de entrada:
IN AX,DX
Onde AXo registrador onde a informao ser armazenada e DX contm o endereo da porta de onde chegar a informao.
http://chapox.tripod.com/tutasbly.htm
13/44
05/11/2014
Tutorial Assembly
4.1.1.Instrues de transferncia.
Voltar ao ndice Geral
So usadas para mover o contedo dos operadores. Cada instruo pode ser usada com diferentes modos de endereamento.
MOV
MOVS (MOVSB) (MOVSW)
INSTRUO MOV
Propsito: Transferncia de dados entre clulas de memria, registradores e o acumulador.
Sintaxe:
MOV Destino,Fonte
Destinoo lugar para onde o dado ser movido e Fonteo lugar onde o dado est .
Os diferentes movimentos de dados permitidos para esta instruo so:
*Destino: memria. Fonte: acumulador
*Destino: acumulador. Fonte: memria
*Destino: registrador de segmento. Fonte: memria/registrador
*Destino: memria/regitrador. Fonte: registrador de segmento
*Destino: registrador. Fonte: registrador
*Destino: registrador. Fonte: memria
*Destino: memria. Fonte: registrador
*Destino: registrador. Fonte: dado imediato
http://chapox.tripod.com/tutasbly.htm
14/44
05/11/2014
Tutorial Assembly
INSTRUO LAHF
Propsito: Transferir o contedo dos flags para o registrador AH.
Sintaxe:
http://chapox.tripod.com/tutasbly.htm
15/44
05/11/2014
Tutorial Assembly
LAHF
esta instruotil para verificar o estado dos flags durante a execuo do nosso programa.
Os flags so deixados na seguinte ordem dentro do registrador:
SF ZF ?? AF ?? PF ?? CF
O "??" significa que haver um valor indefinido naqueles bits.
INSTRUO LDS
Propsito: Carregar o registrador de segmento de dados.
Sintaxe:
LDS destino,fonte
O operador fonte deve ser uma double word na memria. A palavra associada com o maior endereotransferida para DS, em outras palavras istotomado como o
endereo de segmento. A palavra associada com o menor endereo o endereo de deslocamento edepositada no registrador indicado como destino.
INSTRUO LEA
Propsito: Carregar o endereo do operador fonte.
Sintaxe:
LEA destino,fonte
O operador fonte deve estar localizado na memria, e seu deslocamento colocado no registrador de ndice ou ponteiro especificado no destino.
Para ilustrar uma das facilidades que temos com este comando, vejamos:
MOV SI,OFFSET VAR1
equivalente a:
LEA SI,VAR1
muito provvel que para o programadormuito mais fcil criar programas grandes usando este ltimo formato.
INSTRUO LES
Propsito: Carregar o registrador de segmento extra
Sintaxe:
LES destino,fonte
O operador fonte deve ser uma palavra dupla na memria. O contedo da palavra com endereo maiorinterpretado como o endereo do segmento e colocado em
ES. A palavra com endereo menoro endereo do deslocamento e colocada no registrador especificado no parmetro de destino.
INSTRUO POP
Propsito: Recuperar uma parte de informao da pilha.
Sintaxe:
POP destino
http://chapox.tripod.com/tutasbly.htm
16/44
05/11/2014
Tutorial Assembly
esta instruo transfere o ltimo valor armazenado na pilha para o operador de destino, e incrementa de 2 o registrador SP. este incrementoduplo pelo fato de que
a pilha do mais alto endereo de memria 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 subtrado do tamanho real da pilha.
INSTRUO POPF
Propsito: 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 transfernciacomo 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 so os mesmos para o uso da instruo PUSHF.
Uma vez feita a transferncia o registrador SPincrementado de 2, conforme vimos anteriormente.
INSTRUO PUSH
Propsito: Coloca uma palavra na pilha.
Sintaxe:
PUSH fonte
A instruo PUSH decrementa de dois o valor de SP e ento transfere o contedo do operador fonte para o novo endereo desultante no registrador recm
modificado.
O decremento no endereoduplo pelo fato de que quando os valores so adicionados pilha, que cresce do maior para o menor endereo, logo quando subramos
de 2 o registrador SP o que fazemosincrementar o tamanho da pilha em dois bytes, quea nica quantidade de informao que a pilha pode manusear em cada entrada e
sada.
INSTRUO PUSHF
Propsito: Colocar os valores dos flags na pilha.
Sintaxe:
PUSHF
este comando decrementa de 2 o valor do registrador SP e ento o contedo do registrador de flagtransferido para a pilha, no endereo indicado por SP.
Os flags so armazenados na memria da mesma forma que o comando POPF.
http://chapox.tripod.com/tutasbly.htm
17/44
05/11/2014
Tutorial Assembly
4.2.1.Instrues lgicas
Voltar ao ndice Geral
So usadas para realizar operaes lgicas nos operadores.
AND
NEG
NOT
OR
Test
XOR
INSTRUO AND
Propsito: Realiza a conjuno de operadores bit a bit.
Sintaxe:
AND destino,fonte
Com esta instruo a operao lgica "y" para ambos os operadores usada como na tabela:
Fonte
Destino
Destino
INSTRUO NEG
Propsito: Gera o complemento de 2.
Sintaxe:
NEG destino
esta instruo gera o complemento de 2 do operador destino e o armazena no mesmo operador. Por exemplo, if AX armazena o valor 1234H, ento:
NEG AX
Isto far com o que o valor EDCCH fque armazenado no registrador AX.
INSTRUO NOT
Propsito: Faz a negao do operador de destino bit a bit.
Sintaxe:
NOT destino
O resultado armazenado no mesmo operador de destino.
INSTRUO OR
Propsito: Realiza um OU lgico.
Sintaxe:
OR destino,fonte
A instruo OR, faz uma disjuno lgica bit a bit dos dois operadores:
Fonte
Destino
Destino
http://chapox.tripod.com/tutasbly.htm
18/44
05/11/2014
Tutorial Assembly
INSTRUO Test
Propsito: Compara logicamente os operadores.
Sintaxe:
Test destino,fonte
Realiza uma conjuno, bit a bit, dos operadores, mas difere da instruo AND, uma vez que no coloca o resultado no operador de destino. Tem efeito sobre o
registrador de flag.
INSTRUO XOR
Propsito: Realiza um OU exclusivo.
Sintaxe:
XOR destino,fonte
esta instruo realizxa uma disjuno exclusiva de dois operadores bit a bit.
Fonte
Destino
Destino
4.2.2.Instrues aritmticas.
Voltar ao ndice Geral
So usadas para realizar operaes aritmticas nos operadores.
ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB
INSTRUO ADC
Propsito: Efetuar a soma entre dois operandos com carry.
Sintaxe:
ADC destino,fonte
esta instruo efetua a soma entre dois operandos, mais o valor do flag CF, existente antes da operao. Apenas o operando destino e os flags so afetados.
O resultado armazenado no operador de destino.
INSTRUO ADD
Propsito: Adio de dois operadores.
Sintaxe:
http://chapox.tripod.com/tutasbly.htm
19/44
05/11/2014
Tutorial Assembly
ADD destino,fonte
esta instruo adiciona dois operadores e armazena o resultado no operador destino.
INSTRUO DIV
Propsito: Diviso sem sinal.
Sintaxe:
DIV fonte
O divisor pode ser um byte ou uma palavra eo operador quedado na instruo.
Se o divisorde 8 bits, o registrador AX de 16 bitstomado como dividendo e se o divisorde 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, ento o quociente ser armazenado no registrador AL e o resto em AH. Se for uma palavra, ento o quocientearmazenado em AX e o
resto em DX.
INSTRUO IDIV
Propsito: Diviso com sinal.
Sintaxe:
IDIV fonte
Consiste basicamente como a instruo DIV, diferencia-se apenas por realizar a operao com sinal.
Para os resultados so usados os mesmos registradores da instruo DIV.
INSTRUO MUL
Propsito: Multiplicao com sinal.
Sintaxe:
MUL fonte
esta instruo realiza uma multiplicao no sinalizada entre o contedo do acumulador AL ou AX pelo operando-fonte, devolvendo o resultado no acumulador
AX caso a operao tenha envolvido AL com um operando de 8 bits, ou em DX e AX caso a operao tenha envolvido AX e um operando de 16 bits.
INSTRUO IMUL
Propsito: Multiplico de dois nmeros inteiros com sinal.
Sintaxe:
IMUL fonte
esta instruo faz o mesmo que a anterior, difere apenas pela incluso do sinal.
Os resultados so mantidos nos mesmos registradores usados pela instruo MUL.
INSTRUO SBB
Propsito: Subtrao com carry.
Sintaxe:
SBB destino,fonte
esta instruo subtrai os operadores e subtrai um do resultado se CF est ativado. O operador fontesempre subtrado do destino.
este tipo de subtraousado quando se trabalha com quantidades de 32 bits.
INSTRUO SUB
Propsito: Subtrao.
http://chapox.tripod.com/tutasbly.htm
20/44
05/11/2014
Tutorial Assembly
Sintaxe:
SUB destino,fonte
esta instruo subtrai o operador fonte do destino.
4.3.1.Instrues de salto.
Voltar ao ndice Geral
Usadas para transferir o processo de execuo 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
INSTRUO JMP
Propsito: Salto incondicional.
Sintaxe:
JMP destino
esta instruousada par adesviar o curso do programa sem tomar em conta as condies atuais dos flags ou dos dados.
INSTRUO JA (JNBE)
http://chapox.tripod.com/tutasbly.htm
21/44
05/11/2014
Tutorial Assembly
INSTRUO JB (JNAE)
Propsito: Salto condicional.
Sintaxe:
JB smbolo
A instruo salta se est down, se est not up ou se est equal. O salto feito se CF est ativado.
INSTRUO JE (JZ)
Propsito: Salto condicional.
Sintaxe:
JE smbolo
A instruo salta se est equal ou se est zero.
O salto feito se ZF est ativado.
INSTRUO JG (JNLE)
Propsito: Salto condicional, e o sinal tomado.
http://chapox.tripod.com/tutasbly.htm
22/44
05/11/2014
Tutorial Assembly
Sintaxe:
JG smbolo
A instruo salta se est larger, se est not larger ou se est equal.
O salto ocorre se ZF = 0 ou se OF = SF.
INSTRUO JL (JNGE)
Propsito: Salto condicional, e o sinal tomado.
Sintaxe:
JL smbolo
A instruo salta se est less than, se est not larger than ou se est equal.
O salto feito se SF diferente de OF.
INSTRUO JC
Propsito: Salto condicional, e os flags so tomados.
Sintaxe:
JC smbolo
A instruo salta se h carry.
O salto feito se CF = 1.
INSTRUO JNC
Propsito: Salto condicional, e o estado dos flags tomado.
Sintaxe:
JNC smbolo
A instruo salta se no h carry.
O salto feito se CF = 0.
INSTRUO JNO
Propsito: Salto condicional, e o estado dos flags tomado.
http://chapox.tripod.com/tutasbly.htm
23/44
05/11/2014
Tutorial Assembly
Sintaxe:
JNO smbolo
A instruo salta se no h overflow
O salto feito se OF = 0.
INSTRUO JNS
Propsito: Salto condicional, e o estado dos flags tomado.
Sintaxe:
JNP smbolo
A instruo salta se o sinal est desativado.
O salto feito se SF = 0.
INSTRUO JO
Propsito: Salto condicional, e o estado dos flags tomado.
Sintaxe:
JO smbolo
A instruo salta se h overflow.
O salto feito se OF = 1.
INSTRUO JP (JPE)
Propsito: Salto condicional, e o estado dos flags tomado.
Sintaxe:
JP smbolo
A instruo salta se h paridade ou se a paridadepar.
O salto feito se PF = 1.
INSTRUO JS
Propsito: Salto condicional, e o estado dos flags tomado.
Sintaxe:
JS smbolo
A instruo salta se o sinal est ativado.
O salto feito se SF =1.
http://chapox.tripod.com/tutasbly.htm
24/44
05/11/2014
Tutorial Assembly
Estas instrues transferem a execuo do processo, condicional ou incondicionalmente, para um destino, repetindo a ao at o contador ser zero.
LOOP
LOOPE
LOOPNE
INSTRUO LOOP
Propsito: Gerar um lao no programa.
Sintaxe:
LOOP smbolo
A instruo LOOP decrementa CX de 1 e transfere a execuo do programa para o smbolo que dado como operador, caso CX ainda no seja 1.
INSTRUO LOOPE
Propsito: Gerar um lao no programa, considerando o estado de ZF.
Sintaxe:
LOOPE smbolo
Esta instruo decrementa CX de 1. Se CXdiferente de zero e ZF igual a 1, ento a execuo do programatransferida para o smbolo indicado como operador.
INSTRUO LOOPNE
Propsito: Gerar um lao no programa, considerando o estado de ZF.
Sintaxe:
LOOPNE smbolo
Esta instruo decrementa CX de 1 e transfere a execuo do programa apenas se ZF diferente de 0.
4.3.3.Instrues contadoras.
Voltar ao ndice Geral
Estas instrues so usadas para decrementar ou incrementar o contedo decontadores.
DEC
INC
DEC INSTRUCTION
Propsito: Decrementar o operador.
Sintaxe:
DEC destino
Esta instruo subtrai 1 do operador destino e armazena o novo valor no mesmo operador.
INSTRUO INC
Propsito: Incrementar o operador.
Sintaxe:
INC destino
Esta instruo adiciona 1 ao operador destino e mantm o resultado no mesmo operador.
4.3.4.Instrues de comparao.
Voltar ao ndice Geral
http://chapox.tripod.com/tutasbly.htm
25/44
05/11/2014
Tutorial Assembly
Estas instrues so usadas para comparar os operadores, e elas afetam o contedo dos flags.
CMP
CMPS (CMPSB) (CMPSW)
INSTRUO CMP
Propsito: Comparar os operadores.
Sintaxe:
CMP destino,fonte
Esta instruo subtrai o operador fonte do destino, mas no armazena o resultado da operao, apenas afeta o estado dos flags.
4.3.5.Instrues de flag.
Voltar ao ndice Geral
Estas instrues afetam diretamente o contedo dos flags.
CLC
CLD
CLI
CMC
STC
STD
STI
INSTRUO CLC
Propsito: Limpar o flag de carry.
Sintaxe:
CLC
Esta instruo desliga o bit correspondente ao flag de carry. Em outras palavras, ela o ajusta para zero.
INSTRUO CLD
Propsito: Limpar o flag de endereo.
Sintaxe:
CLD
Esta instruo desliga o bit correspondente ao flag de endereo.
http://chapox.tripod.com/tutasbly.htm
26/44
05/11/2014
Tutorial Assembly
INSTRUO CLI
Propsito: Limpar o flag de interrupo.
Sintaxe:
CLI
Esta instruo desliga o flag de interrupes, desabilitando, deste modo, interrupes mascarveis.
Uma interrupo mascarvel aquela cujas funes so desativadas quando IF=0.
INSTRUO CMC
Propsito: Complementar o flag de carry.
Sintaxe:
CMC
Esta instruo complementa o estado do flag CF. Se CF = 0 a instruo o iguala a 1. Se CF = 1, a instruo o iguala a 0.
Poderamos dizer que ela apenas inverte o valor do flag.
INSTRUO STC
Propsito: Ativar o flag de carry.
Sintaxe:
STC
Esta instruo ajusta para 1 o flag CF.
INSTRUO STD
Propsito: Ativar o flag de endereo.
Sintaxe:
STD
Esta instruo ajusta para 1 o flag DF.
INSTRUO STI
Propsito: Ativar o flag de insterrupo.
Sintaxe:
STI
Esta instruo ativa o flag IF, e habilita interrupes externas mascar veis (que s funcionam quando IF = 1).
http://chapox.tripod.com/tutasbly.htm
27/44
05/11/2014
Tutorial Assembly
5.1.3.Interrupes de software
Voltar ao ndice Geral
Interrupes de software podem ser ativadas diretamente por nossos programas assembly, invocando o nmero da interrupo desejada com a instruo INT.
O uso das interrupes facilita muito a criao dos programas, torna-os menores. Alm disso,fcil compreend-las e geram boa performance. Este tipo de
interrupes podem ser separadas em duas categorias:
Interrupes do Sistema Operacional DOS e interrupes do BIOS.
A diferena entre ambasque as interrupes do sistema operacional so mais f ceis de usar, mas tambm so mais lentas, uma vez que acessam os servios do BIOS.
Por outro lado, interrupes do BIOS so muito mais rpidas, mas possuem a desvantagem de serem parte do hardware, o que significa serem especficas arquitetura do
computador em questo.
A escolha sobre qual o tipo de interrupo usar ir depender somente das caractersticas que voc deseja dar ao seu programa: velocidade (use BIOS), portabilidade
(use DOS).
5.1.4.1.Interrupo 21H
Voltar ao ndice Geral
Propsito: Chamar uma diversidade de funes DOS.
Sintaxe:
Int 21H
Nota: Quando trabalhamos com o programa TASMnecessrio especificar que o valor que estamos usando est em hexadecimal.
Esta interrupo tem muitas funes, para acessar cada uma delas necessrio que o nmero correspondente da funo esteja no registrador AH no momento da
chamada da interrupo.
Funes para mostrar informaes no vdeo.
http://chapox.tripod.com/tutasbly.htm
28/44
05/11/2014
Tutorial Assembly
FUNO 02H
Uso:
Mostra um caracter na tela.
Registradores de chamada:
AH = 02H
DL = Valor de caracter a ser mostrado.
Registradores de retorno:
Nenhum.
Esta funo mostra o caracter cujo cdigo hexadecimal corresponde ao valor armazenado no registrador DL, e no modifica nenhum registrador. O uso da funo
40Hrecomendado ao invs desta funo.
FUNO 09H
Uso:
Mostra uma cadeia de caracteres na tela.
Registradores de chamada:
AH = 09H
DS:DX = Endereo de incio da cadeia de caracteres.
Registradores de retorno:
http://chapox.tripod.com/tutasbly.htm
29/44
05/11/2014
Tutorial Assembly
Nenhum.
Esta funo mostra os caracteres, um por um, a partir do endereo indicado nos registradores DS:DX at encontrar um caracter $, queinterpretado como fim da
cadeia.
recomendado usar a funo 40H ao invs desta.
FUNO 40H
Uso:
Escrever num dispositivo ou num arquivo.
Registradores de chamada:
AH = 40H
BX = Nmero do handle
CX = Quantidade de bytes a gravar
DS:DX = rea onde est o dado
Registradores de retorno:
CF = 0 se no houve erro
AX = Nmero de bytes escrito
CF = 1 se houve erro
AX = Cdigo de erro
Para usar esta funo para mostrar a informao na tela, faa o registrador BX ser igual a 1, queo valor default para o vdeo no DOS.
FUNO 01H
Uso:
Ler um caracter do teclado e mostr-lo.
Registradores de chamada
AH = 01H
Registradores de retorno:
AL = Caracter lido
muito fcil ler um caracter do teclado com esta funo, o cdigo hexadecimal do caracter lidoarmazenado no registrador AL. Nos caso de teclas especiais, como
as de funo F1, F2, alm de outras, o registrador AL conter o valor 1, sendo necessrio chamar a funo novamente para obter o cdigo daquele caracter.
FUNO 0AH
Uso:
Ler caracteres do teclado e armazen -los num buffer.
Registradores de chamada:
AH = 0AH
DS:DX = Endereo 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 so lidos e armazenados num espao de memria que foi definido. A estrutura deste espao 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 so armazenados.
Quando se atinge a quantidade m xima permitida, ouve-se o som do speaker e qualquer caracter adicionalignorado. Para finalizar a entrada, basta digitar [ENTER].
http://chapox.tripod.com/tutasbly.htm
30/44
05/11/2014
Tutorial Assembly
FUNO 3FH
Uso:
Ler informao de um dispositivo ou de um arquivo.
Registradores de chamada:
AH = 3FH
BX = Nmero do handle
CX = Nmero de bytes a ler
DS:DX = rea para receber o dado
Registradores de retorno:
CF = 0 se no h erro e AX = nmero de bytes lidos.
CF = 1 se h erro e AX conter o cdigo de erro.
FUNO 0FH
Uso:
Abrir um arquivo FCB.
Registradores de chamada:
AH = 0FH
DS:DX = Ponteiro para um FCB
Registradores de retorno:
AL = 00H se no h problemas, de outra forma retorna 0FFH
FUNO 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 no h erros, de outra forma o cdigo correspondente de erro retornar :
1 erro no fim do arquivo, 2 erro na estrutura FCB e 3 erro de leitura parcial.
O que esta funo fazler o prximo bloco de informaes do endereo dado por DS:DX, e atualizar este registro.
FUNO 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 no h erros, de outra forma conter o cdigo de erro: 1 disco cheio ou arquivo somente de leitura, 2 erro na formao ou na especificao do FCB.
A funo 15H atualiza o FCB aps a escrita do registro para o presente bloco.
http://chapox.tripod.com/tutasbly.htm
31/44
05/11/2014
Tutorial Assembly
FUNO 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 no h erros, de outra forma conter o valor 0FFH.
baseada na informao advinda de um FCB para criar um arquivo num disco.
FUNO 21H
Uso:
Ler de modo randmico um arquivo FCB.
Registradores de chamada:
AH = 21H
DS:DX = Ponteiro para FCB aberto.
Registradores de retorno:
A = 00H se no h erro, de outra forma AH conter o cdigo de erro:
1 se o fim do arquivo, 2 se h um erro de especificao no FCB e 3 se um registro foi lido parcialmente ou o ponteiro de arquivo est no fim do mesmo.
Esta funo l o registro especificado pelos campos do bloco atual e registro de um FCB aberto e coloca a informao na DTA, rea de Transferncia do Disco.
FUNO 22H
Uso:
Escrita randmica num arquivo FCB.
Registradores de chamada:
AH = 22H
DS:DX = Ponteiro para um FCB aberto.
Registradores de retorno:
AL = 00H se no h erro, de outra forma conter o cdigo de erro:
1 se o disco est cheio ou o arquivoapenas de leitura e 2 se h um erro na especificao FCB.
Escreve o registro especificado pelos campos do bloco atual e registro de um FCB aberto. esta informaodo contedo da DTA.
FUNO 3CH
Uso:
Criar um arquivo se no 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 nmero do handle se no h erro. Se caso houver erro,
CF ser 1 e AX conter o cdigo de erro: 3 caminho no encontrado, 4 no h handles disponveis e 5 acesso negado.
http://chapox.tripod.com/tutasbly.htm
32/44
05/11/2014
Tutorial Assembly
Esta funo substitui a funo 16H. O nome do arquivoespecificado 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 arquivocriado com permisso de leitura e escrita. Nopossvel a criao de diretrios atravs desta funo.
FUNO 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 = nmero do handle se no h erros, de outra forma CF = 1 e AX = cdigo de erro:
01H se a funo nov lida, 02H se o arquivo no foi encontrado, 03H se o caminho no foi encontrado, 04H se no h handles disponveis, 05H acesso
negado, e 0CH se o cdigo de acesso no vlido.
O handle retornado de 16 bits.
O cdigo de acessoespecificado da seguinte maneira:
BITS
7654321
. . . . 0 0 0 Apenas leitura
. . . . 0 0 1 Apenas escrita
. . . . 0 1 0 Leitura/Escrita
. . . x . . . RESERVADO
FUNO 3EH
Uso:
Fecha um arquivo (handle).
Registradores de chamada:
AH = 3EH
BX = Nmero do handle associado
Registradores de retorno:
CF = 0 se no h erros, ou CF ser 1 e AX conter o cdigo de erro: 06H se o handle invlido.
Esta funo atualiza o arquivo e libera o handle que estava usando.
FUNO 3FH
Uso:
Ler uma quantidade especfica de bytes de um arquivo aberto e armazen -los num buffer especfico.
http://chapox.tripod.com/tutasbly.htm
33/44
05/11/2014
Tutorial Assembly
5.1.4.2.Interrupo 10h
Voltar ao ndice Geral
Propsito: Chamar uma diversidade de funes do BIOS
Sintaxe:
Int 10H
Esta interrupo tem v rias funes, todas para entrada e sada de vdeo.
Para acessar cada uma delasnecessrio colocar o nmero da funo correspondente no registrador AH.
Veremos apenas as funes mais comuns da interrupo 10H.
Funo 02H, seleciona a posio do cursor
Funo 09H, exibe um caracter e o atributo na posio do cursor
Funo 0AH, exibe um caracter na posio do cursor
Funo 0EH, modo alfanumrico de exibio de caracteres
Funo 02h
Uso:
Move o cursor na tela do computador usando o modo texto.
Registradores de chamada:
AH = 02H
BH = P gina de vdeo onde o cursor est posicionado.
DH = linha
DL = coluna
Registradores de retorno:
Nenhum.
A posio do cursordefinida pelas suas coordenadas, iniciando-se na posio 0,0 at a posio 79,24. Logo os valores possveis para os registradores DH e DL so:
de 0 a 24 para linhas e de 0 a 79 para colunas.
Funo 09h
Uso:
Mostra um determinado caracter v rias vezes na tela do computador com um atributo definido, iniciando pela posio atual do cursor.
Registradores de chamada:
AH = 09H
AL = Caracter a exibir
BH = P gina de vdeo, onde o caracter ser mostrado
BL = Atributo do caracter
CX = Nmero de repeties.
Registradores de retorno:
Nenhum
Esta funo mostra um caracter na tela v rias vezes, de acordo com o nmero especificado no registrador CX, mas sem mudar a posio do cursor na tela.
Funo 0Ah
Uso:
Exibe um caracter na posio atual do cursor.
http://chapox.tripod.com/tutasbly.htm
34/44
05/11/2014
Tutorial Assembly
Registradores de chamada:
AH = 0AH
AL = Caracter a exibir
BH = Pgina de vdeo onde o caracter ser exibido
BL = Cor do caracter (apenas em modo gr fico)
CX = Nmero de repeties
Registradores de retorno:
Nenhum.
A principal diferena entre esta funo e a anteriorpermitir mudana nos atributos, bem como mudar a posio do cursor.
Funo 0EH
Uso:
Exibir um caracter na tela do computador atualizando a posio do cursor.
Registradores de chamada:
AH = 0EH
AL = Caracter a exibir
BH = P gina de vdeo onde o caracter ser exibido
BL = Cor a usar (apenas em modo gr fico)
Registradores de retorno:
Nenhum
5.1.4.3.Interrupo 16H
Voltar ao ndice Geral
Veremos duas funes da interrupo 16H. A exemplo das demais interrupes, usa-se o registrador AH para cham-las.
Funes da interrupo 16h
Funo 00H, l um caracter do teclado.
Funo 01H, l o estado atual do teclado.
Funo 00H Uso:
Ler um caracter do teclado.
Registradores de chamada:
AH = 00H
Registradores de retorno:
AH = Cdigo da tecla pressionada
AL = Valor ASCII do caracter
Quando se usa esta interrupo, os programas executam at que uma tecla seja pressionada. Seum valor ASCII, armazenado no registrador AH. Caso contrrio, o
cdigo armazenado no registrador AL e AH=0.
Este valor de AL pode ser utilizado quando queremos detectar teclas que no esto diretamente representadas pelo seu valor ASCII, tais como [ALT][CONTROL].
Funo 01h
Uso:
Ler o estado do teclado
Registradores de chamada:
AH = 01H
http://chapox.tripod.com/tutasbly.htm
35/44
05/11/2014
Tutorial Assembly
Registradores de retorno:
Se o registrador de flagzero, significa que h informao no buffer de teclado na memria. 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.Interrupo 17H
Voltar ao ndice Geral
Propsito: Manusear a entrada e sada da impressora.
Sintaxe:
Int 17H
Esta interrupousada para enviar caracteres, setar ou ler o estado de uma impressora.
Funes da interrupo 17h
Funo 00H, imprime um valor ASCII
Funo 01H, seta a impressora
Funo 02H, l estado da impressora
Funo 00H
Uso:
Imprimir um caracter numa impressora.
Registradores de chamada:
AH = 00H
AL = Caracter a imprimir
DX = Porta de conexo
Registradores de retorno:
AH = estado da impressora
Os valores da porta a colocar no registrador DX so:
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
123 1 Erro de entrada e sada
4 1 Impressora selecionada
5 1 Fim de papel
6 1 Reconhecimento de comunicao
7 1 A impressora est pronta para o uso
Os bits 1 e 2 bits no so relevantes
A maioria dos BIOS suportam 3 portas paralelas, havendo alguns que suportam 4.
Funo 01h
Uso:
Setar uma porta paralela.
Registradores de chamada:
AH = 01H
DX = Porta
http://chapox.tripod.com/tutasbly.htm
36/44
05/11/2014
Tutorial Assembly
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 impressoracodificado bit a bit como segue:
BIT 1/0 SIGNIFICADO
0 1 estado de time-out
123 1 Erro de entrada e sada
4 1 Impressora selecionada
5 1 Fim de papel
6 1 Reconhecimento de comunicao
7 1 A impressora est pronta para o uso
Os bits 1 e 2 bits no so relevantes
Funo 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 impressoracodificado bit a bit como segue:
BIT 1/0 SIGNIFICADO
0 1 estado de time-out
123 1 Erro de entrada e sada
4 1 Impressora selecionada
5 1 Fim de papel
6 1 Reconhecimento de comunicao
7 1 A impressora est pronta para o uso
Os bits 1 e 2 bits no so relevantes
http://chapox.tripod.com/tutasbly.htm
37/44
05/11/2014
Tutorial Assembly
5.2.2.1.INTRODUO
Voltar ao ndice Geral
H dois tipos de FCB, o normal, cujo comprimento37 bytes, e o extendido, com 44 bytes. Neste tutorial iremos assumir o primeiro, ou seja, quando falarmos em
FCB, estaremos fazendo referncia ao tipo normal (37 bytes).
O FCBcomposto de informaes dadas pelo programador e por informaes que ele toma diretamente do sistema operacional. Quando estes tipos de arquivos so
usados, spossvel se trabalhar no diretrio corrente, pois FCBs no fornecem suporte ao sistema de organizao de arquivos atravs de diretrios do DOS.
FCBcomposto pelos seguintes campos:
POSIO COMPRIMENTO SIGNIFICADO
00H 1 Byte Drive
01H 8 Bytes Nome do arquivo
09H 3 Bytes Extenso
0CH 2 Bytes Nmero do bloco
0EH 2 Bytes Tamanho do registro
10H 4 Bytes Tamanho do arquivo
14H 2 Bytes Data de criao
16H 2 Bytes Hora de criao
18H 8 Bytes Reservado
20H 1 Bytes Registro corrente
21H 4 Bytes Registro randmico
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 opo.
O nome do arquivo deve ser justificado esquerda enecessrio preencher com espaos os bytes remanescentes, a extensocolocada do mesmo modo.
O bloco corrente e o registro corrente dizem ao computador que registro ser acessado nas operaes de leitura e escrita. Um bloco um grupo de 128 registros. O
primeiro bloco de arquivoo bloco 0. O primeiro registro o registro 0, logo o ltimo registro do primeiro bloco deve ser o 127, uma vez que a numeraoiniciada 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 FCBusada a funo 0FH da interrupo 21h. A unidade, o nome e a extenso 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 interrupo, ento o arquivo no foi encontrado.
http://chapox.tripod.com/tutasbly.htm
38/44
05/11/2014
Tutorial Assembly
5.2.2.4.ESCRITA SEQUENCIAL
Antes de conseguirmos realizar escrita para o disco,necessrio definir a rea de transferncia de dados usando, para tanto, a funo 1AH da interrupo 21h.
A funo 1AH no retorna qualquer estado do disco nem da operao. Mas a funo 15H, que usaremos para escrever para o disco, faz isso no registrador AL. Se
este for igual a zero, ento no h erro e os campos de registro corrente e de bloco so atualizados.
5.2.2.5.LEITURA SEQENCIAL
Voltar ao ndice Geral
Antes de tudo, devemos definir a rea de transferncia de arquivo ou DTA.
Para a leitura seqencial usaremos a funo 14H da interrupo 21h.
O registro a ser lidodefinido pelos campos registro e bloco corrente. O registrador AL retorna o estado da operao. Se AL contm o valor 1 ou 3, significa que foi
atingido o fim do arquivo. Um valor 2, por sua vez, significa que o FCB est estruturado erroneamente. Caso no ocorra erro, AL conter o valor 0 e os campos de
registro e bloco corrente so atualizados.
5.2.2.7.FECHAR UM ARQUIVO
Voltar ao ndice Geral
Para fechar um arquivo usamos a funo 10H da interrupo 21h.
Se aps invocar esta funo, o regisatrador AL conter o valor FFH, significa que o arquivo foi mudado de posio, o disco foi mudado ou h erro de acesso a disco.
5.2.3.Canais de comunicao.
Voltar ao ndice Geral
5.2.3.1.Trabalhando com handles
5.2.3.2.Funes para usar handles
http://chapox.tripod.com/tutasbly.htm
39/44
05/11/2014
Tutorial Assembly
6.1.Procedimentos
Voltar ao ndice Geral
6.1.1.Definio de um procedimento
Um procedimentouma coleo de instrues para as quais possvel direcionar o curso de nosso programa, e uma vez que a execuo destas instrues do
procedimento tenha acabado, o controle retorna para linha que segue que chamou o procedimento.
Procedimentos nos ajudam a criar programas legveis e f ceis de modificar.
Quando se invoca um procedimento, o endereo da prxima instruo 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 instruo que o chama, e os inter segments, que podem se localizar em
diferentes segmentos de memria.
Quando os procedimentos intrasegments so usados, o valor de IP armazenado na pilha e quando os procedimentos inter segments so usados o valor de
CS:IParmazenado. Lembre-se que o registrador CS indica qual o segmento de cdigo.
A diretiva que chama um procedimentocomo segue:
CALL NomedoProcedimento
As partes que compem um procedimento so as seguintes:
Declarao do procedimento
Cdigo do procedimento
Diretiva de retorno
Trmino 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 ; Declarao do Procedimento
Mov BX, 0 ; Contedo do Procedimento...
Mov BL, AH
Mov AH, 00
Add BX, AX
Ret ; Diretiva de retorno
Soma EndP ; Fim do Procedimento
Na declarao, 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 endereo 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.
http://chapox.tripod.com/tutasbly.htm
40/44
05/11/2014
Tutorial Assembly
6.2.Macros
Voltar ao ndice Geral
6.2.1.Definio de uma Macro
Uma macro um grupo de instrues repetitivas em um programa que so codificadas apenas uma vez e, assim, poupam espao, podendo ser utilizadas tantas vezes
quantas forem necessrio.
A principal diferena entre uma macro e um procedimentoque numa macro possvel a passagem de parmetros e num procedimento no. No momento em que a
macro executada, cada parmetrosubstitudo pelo nome ou valor especificado na hora da chamada.
Podemos dizer, desta forma, que um procedimentouma extenso de um determinado programa, enquanto que uma macro um mdulo que especifica funes que
podem ser utilizadas por diferentes programas.
Uma outra diferena entre uma macro e um procedimentoo modo de chamada de cada um. Para chamar um procedimento, se faz necessrio a diretiva CALL, por
outro lado, para chamada de macrosfeita com se fosse uma instruo normal da linguagem assembly.
6.2.3.Biblioteca de Macros
Voltar ao ndice Geral
Uma das facilidades oferecidas pelo uso de macrosa criao de bibliotecas, que so grupo de macros, podendo ser includas num programa originrias de arquivos
diferentes. A criao destas bibliotecasmuito simples. Criamos um arquivo com todas as macros que sero necessrias e o salvamos como um arquivo texto.
http://chapox.tripod.com/tutasbly.htm
41/44
05/11/2014
Tutorial Assembly
Para incluir uma biblioteca num programa, basta colocar a seguinte instruo Include NomedoArquivo na parte inicial do programa, antes da declarao do modelo
de memria.
Supondo que o arquivo de macros tenha sido salvo com o nome de MACROS.TXT, a instruo Include seria utilizada do seguinte modo:
;Incio do programa
Include MACROS.TXT
.MODEL SMALL
.DATA
;Os dados vo aqui
.CODE
Inicio:
;O cdigo do programa comea aqui
.STACK
;A pilha declarada
End Inicio
;Fim do programa
CAPTULO 8: BIBLIOGRAFIA
Voltar ao ndice Geral
Crditos:
Monico Briseo C., Engenheiro
Idia Original
Desenvolvimento e Implementao da edio 1996
Hugo Eduardo Prez P.
Desenvolvimento e Implementao da edio 1995
Vctor Hugo Avila B.
Verso Inglesa
Jeferson Botelho do Amaral
Verso Portuguesa
Ana Mara Peraza
Programadora de Linguagem Assembly
Graciela Salcedo Mancilla
Programadora Tcl/Tk
Juan Olmos Monroy
Designer Gr fico
http://chapox.tripod.com/tutasbly.htm
42/44
05/11/2014
Tutorial Assembly
http://chapox.tripod.com/tutasbly.htm
43/44
05/11/2014
http://chapox.tripod.com/tutasbly.htm
Tutorial Assembly
Office 365
Home
Office 365
Home
Office
Professional
2013
Compre
Compre
Compre
44/44