Buscar

Assembly (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

University of Guadalajara 
 Information Sistems General Coordination. 
 Culture and Entertainment Web 
 
 June 12th 1995 
Copyright(C)1995-1996 
 
***************************************************************************** 
* Este tutorial foi traduzido para o Portuguˆs por Jeferson Amaral. * 
* e-mail: amaral@inf.ufsm.br * 
***************************************************************************** 
 
 Este tutorial tem o intuito de apenas introduzir o leitor ao mundo 
da programacao em Linguagem Assembly, nao tem, portanto e de forma alguma, 
plano de esgotar o assunto. 
 
Copyright (C) 1995-1996, Hugo Perez Perez. 
Anyone may reproduce this document, in whole or in part, 
provided that: 
 
(1) any copy or republication of the entire document must show University of 
 Guadalajara as the source, and must include this notice; and 
(2) any other use of this material must reference this manual and University 
 of Guadalajara, and the fact that the material is copyright by Hugo Perez 
 and is used by permission. 
 
**************************************************************************** 
 
 T U T O R I A L D E L I N G U A G E M A S S E M B L Y 
 --------------- --- ----------------- --------------- 
 
 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 
 
Conte£do: 
 
1.1.O que h de novo neste material 
1.2.Apresenta‡Æo 
1.3.Por que aprender Assembly? 
1.4.N¢s precisamos da sua opiniÆo 
 
 --------------- // --------------- 
 
1.1.O que h de novo neste material: 
 
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 estes 
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: 
 
Page 1 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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 … 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: 
 
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 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? 
 
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. 
 
 
1.4.N¢s precisamos da sua opiniÆo: 
 
Nosso intuito ‚ oferecer um modo simples para que vocˆ consiga aprender 
Assembly por si mesmo. Por tanto, qualquer coment rio ou sugestÆo ser 
bem-vinda. 
 
 
***************************************************************************** 
 
 CAPÖTULO 2: CONCEITOS BµSICOS 
 Conte£do: 
 
 2.1.Descri‡Æo b sica de um sistema computacional. 
 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. 
Page 2 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
 
2.1.DESCRIۂO DE UM SISTEMA COMPUTACIONAL 
 
Conte£do: 
 
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. 
 
Chamamos de Sistema Computacional a completa configura‡Æo de um computador, 
incluindo os perif‚ricos e o sistema operacional. 
 
 
2.1.1.Processador Central. 
 
� 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. 
 
� 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. 
 
Para que o computador possa ser £til para n¢s se faz necess rio que o 
Page 3 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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 dasmais 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. 
 
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. 
 
Estes 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 
 
Conte£do: 
 
2.2.1.Informa‡äes nos computadores 
2.2.2.M‚todos de representa‡Æo de dados 
 
 
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.1.1.Unidades de informa‡Æo 
 
Para o PC processar a informa‡Æo, ‚ necess rio que ela esteja 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. Estes 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 
 
Page 4 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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 
 
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, estar 
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 
 
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 
resto 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 resto ‚ 1; 21/2=10 e o resto ‚ 1; 10/2=5 e o resto ‚ 0; 
5/2=2 e o resto ‚ 1; 2/2=1 e o resto ‚ 0; 1/2=0 e o resto ‚ 1. 
 
Para construir o equivalente bin rio de 43, vamos pegar os restos obtidos de 
baixo para cima, assim temos 101011. 
 
 
2.2.1.5.Sistema hexadecimal 
 
Na base hexadecimal temos 16 d¡gitos, que vÆo de 0 a 9 e da letra A at‚ a F, 
Page 5 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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 
 
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. 
 
 
Page 6 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
2.2.2.2.M‚todo BCD 
 
BCD significa Binary Coded Decimal. 
 
Neste 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 
 
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, indicao n£mero de casas que o ponto 
decimal deve se locomover para a esquerda. 
 
 
 
 --------------- // --------------- 
 
2.3.PROGRAMA DEBUG 
 
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.Estrutura 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. 
 
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 ‚ estabelecido 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 neste 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 teste. A corre‡Æo normalmente requer a repeti‡Æo de todos os 
 passos, com observa‡Æo atenta. 
 
Page 7 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
 
2.3.2.Registradores da CPU. 
 
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 Destino 
 SP Registrador Apontador de Pilha 
 IP Registrador Apontador da Pr¢xima Instru‡Æo 
 F Registrador de Flag 
 
 
 
2.3.3.Programa Debug. 
 
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] 
- 
Page 8 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
Vocˆ notar entÆo a presen‡a de um h¡fen no canto inferior esquerdo da tela. 
NÆo se espante, este ‚ 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.Estrutura Assembly. 
 
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, neste caso uma adi‡Æo, e "ah" bem 
como "bh" sÆo os parƒmetros. 
 
Por exemplo: 
 
mov al, 25 
 
No exemplo acima, estamos 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. 
 
Page 9 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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 neste 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=0106NV 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 
Page 10 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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. 
 
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 esteja na mem¢ria: 
 
 * Obter o tamnho 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", neste caso 000a. 
 
-rcx 
CX 0000 
:000a 
 
Finalmente, o comando "w" grava nosso programa no disco, indicando quantos 
bytes gravou. 
 
-w 
Writing 000A bytes 
 
Para j salvar um arquivo quando carreg -lo, 2 passos sÆo necess rios: 
 
 Dar o nome do arquivo a ser carregado. 
 Carreg -lo usando o comando "l" (load). 
 
Para obter o resultado correto destes passos, ‚ necess rio que o programa 
acima j esteja criado. 
Page 11 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
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 
 
Conte£do: 
 
3.1.Construindo programas em Assembly 
3.2.Processo Assembly 
3.3.Pequenos programas em Assembly 
3.4.Tipos de instru‡äes 
 
 --------------- // --------------- 
 
3.1.Construindo programas em Assembly. 
 
3.1.1.Software necess rio 
3.1.2.Programa‡Æo Assembly 
 
 
3.1.1.SOFTWARE NECESSµRIO 
 
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 
 
Para construirmos os programas com o TASM, devemos estruturar o fonte de 
forma diferenciada ao que faz¡amos com o programa debug. 
Page 12 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
� 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. 
 
Page 13 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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. 
 
3.2.1.Segmentos 
3.2.2.Tabela de equivalˆncia 
 
 
3.2.1.SEGMENTOS 
 
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. 
 
Page 14 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
 
3.2.2.TABELAS DE EQUIVALÒNCIA 
 
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. Neste caso o linker entra em a‡Æo para criar a 
estrutura 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.Mais programas. 
 
Outro exemplo 
 
Primeiro passo 
 
Use qualquer editor e crie o seguinte: 
 
;exemplo2 
.model small 
.stack 
.code 
 mov ah,2h ;move o valor 2h para o registrador ah 
 mov dl,2ah ;move o valor 2ah para o registrador dl 
 ;(‚ o valor ASCII do caractere *) 
 int 21h ;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. 
 
Page 15 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT
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. 
 
Clique aqui para obter mais programas 
 
 
 --------------- // --------------- 
 
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 
 
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 reg 
Page 16 of 16
21/7/2009http://www.b4silisco.com/ASMPOR.TXT

Outros materiais