Вы находитесь на странице: 1из 6

18/2/2014

Prtica 1: Introduo ao Debug

Universidade Federal de Santa Catarina Centro Tecnolgico Departamento de Informtica e Estatstica INE 5309 - Linguagem Assembly Prof. Roberto Willrich

Aula Prtica 01: Introduo Linguagem Assembly


1. Introduo aos Registros do Processador 8088
A CPU tem 16 registros internos, cada um com 16 bits. Os 4 primeiros: AX, BX, CX e DX so registros de uso geral e podem ser usados como registros de 8 bits. Se usados em tal modo, necessrio referencia-los por exemplo como: AH e AL, que so os bytes altos e baixo do registros AX. Esta nomenclatura tambm aplicvel aos registros BX, CX e DX. Os registros so conhecidos pelos seus nomes especficos: AX Acumulador BX Registro Base CX Registro Contador de Dados DX Registro de Dados DS Registro de Segmento de Dados ES Registro de Segmento Extra SS Registro de Segmento Stack CS Registro de Segmento de Cdigo BP Registro Apontador de Base SI Registro Apontador Source Index Dl Registro Apontador Destination Index SP Registro Apontador Stack Pointer IP Contador de Programa F Registro de Flags

2. Programa Debug
http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html 1/6

18/2/2014

Prtica 1: Introduo ao Debug

O Debug fornece um conjunto de comandos que deixa voc executar um nmero de operaes teis. Alguns dos comandos do Debug esto apresentados na tabela abaixo.

Comando ? A D E G H L N Q R T U W

Significado Imprime os comandos do Debug na tela Permite montar o programa (translao das instrues Assembly em linguagem de mquina) Apresenta o contedo de uma rea de memria Permite entrar o dado em uma memria Executa um programa na memria Calcula a soma e a diferena de dois valores hexadecimais Carrega um programa do disco na memria Define um nome para o programa Permite abandonar o programa Debug Apresenta o contedo de um ou mais registradores Realiza o "Trace" de um programa (executa 1 comando) Permite desassemblar o cdigo de mquina em cdigo simblico Permite escrever o programa em disco

Sintaxe ? a [end] d [end] e [end] g [end-ini] [end-fin] h [valorl] [valor2] l n [nome.ext] q r t u [end-ini] [end-fin] w

Para iniciar o trabalho com Debug, digite o seguinte comando no seu computador:
C : / > D e b u g[ E n t e r ]

http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html 2/6

18/2/2014

Prtica 1: Introduo ao Debug

Na prxima linha um trao aparecer, ele o prompt do Debug, neste momento as instrues do debug podem ser introduzidas. Por exemplo, possvel visualizar os valores dos registros internos da CPU usando o seguinte comando:
r [ E n t e r ] A X = 0 0 0 0B X = 0 0 0 0C X = 0 4 4 6D X = 0 0 0 0S P = F F F EB P = 0 0 0 0S I = 0 0 0 0D I = 0 0 0 0 D S = 1 1 7 5E S = 1 1 7 5S S = 1 1 7 5C S = 1 1 7 5I P = 0 1 0 0N VU PE IP LN ZN AP ON C 6 8 9 7 : 0 1 0 05 8P O PB X

Todos os contedos dos registros internos da CPU sero apresentados. Observe que, embora o seu computador apresente outros valores, os valores armazenados nos arquivos CS, DS, SS, ES so idnticos, assim todos os quatro segmentos tm o mesmo endereo de base (so mapeados no mesmo bloco de memria), caractersticas dos programas .COM. possvel alterar os valores dos registros usando o comando "r". Veja exemplo abaixo:
r b x [ E n t e r ] B X0 0 0 0 :

Esta instruo apresentar o contedo do registro BX e o indicador Debug mudado de "-" para ":". Quando o prompt igual a ":", possvel mudar o valor do registro definido no parmetro de entrada. Por exemplo, digite um nmero e digite [Enter]. Verifique novamente o valor dos registros utilizando o comando "r".

3. Estrutura Assembler
Linhas de cdigo Assembly tem duas partes, a primeira o nome da instruo que ser executada, e a segunda so os parmetros do comando. Por exemplo: MOV AL, 25. Aqui "MOV" um comando a ser executado, no caso uma transferncia de dados, e "AL" e "25" so os parmetros. O nome das instrues na linguagem feita de dois, trs ou quatro letras. Estas instrues so chamadas de mnemnicos ou cdigos de operao, desde que eles representam uma funo que o processador executar. Algumas instrues so usadas da seguinte forma: ADD AL, [170]. Os colchetes no segundo parmetro indica-nos que ns estamos trabalhando com o contedo da clula de memria de nmero 170 e no com o valor 170. Isto conhecido como endereamento direto.

4. Criando um Programa Assembly Bsico


O primeiro passo para ser criar um programa Assembly iniciar o Debug, este passo consiste em digitar Debug[Enter] no prompt do DOS. Para montar um programa no Debug, o comando "a" (assemble) usado. O endereo inicial do programa pode ser entrado como parmetro, se este parmetro omitido a
http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html 3/6

18/2/2014

Prtica 1: Introduo ao Debug

montagem ser iniciada na localizao especificada por CS:IP, tipicamente o deslocamento (IP) 0100h, que a localidade onde programas com a extenso .COM devem ser iniciados. Neste momento no necessrio dar ao comando "a" um parmetro, isto recomendvel para evitar problemas desde que os registros CS:lP so utilizados, portanto ns digitamos:
a[ E n t e r ] m o va x ,0 0 0 2 [ E n t e r ] m o vb x ,0 0 0 4 [ E n t e r ] a d da x ,b x [ E n t e r ] n o p [ E n t e r ] [ E n t e r ]

O que este programa faz? Move o valor 0002 para o registro AX, move o valor 0004 para o registro BX, adiciona os contedos dos registros AX e BX e armazena o resultado em AX. Finalmente, a instruo no operao (nop) para notificar o fim do programa. Aps digitado (corretamente) este cdigo, aparecer na tela algo parecido com as seguintes linhas:
a 1 1 7 5 : 0 1 0 0m o va x , 0 0 0 2 1 1 7 5 : 0 1 0 3m o vb x , 0 0 0 4 1 1 7 5 : 0 1 0 6a d da x , b x 1 1 7 5 : 0 1 0 8n o p 1 1 7 5 : 0 1 0 9

Como j apresentado o comando "a" permite montar o programa de mquina. Debug monta o programa linha a linha. Por exemplo, quando ns digitalmos o [Enter] aps a instruo mov ax,0002, debug automaticamente translada a linguagem simblica em cdigo de mquina. Caso ns digitarmos alguma instruo invlida, o debug indicar o erro aps digitarmos [Enter]. Tente por exemplo armazenar a instruo MOV AZ,2 a partir da memria 200h. Os nmeros que antecedem a instruo indica a localizao em memria onde o cdigo de mquina correspondente ser armazenado. Por exemplo, a instruo add ax,bx est armazenada a partir de 1175:0106 (o primeiro nmero o endereo base do segmento de cdigo e o segundo o deslocamento neste segmento). O nmero de byte que ocupa uma instruo dependente do tipo de instruo e de seus operandos. fcil observar que a instruo mov ax,0002 ocupa 3 bytes (100h a 102h), pois ela est armazenada do endereo 1175:1175:0100 at 1175:0102. Como ns trataremos apenas programas .COM, ns podemos por simplificao eliminar o endereo de base do segmento de cdigo e indicar unicamente o offset. Assim podemos dizer que a instruo nop tem um tamanho de 1 byte e est armazenada em 108. Para ver o cdigo de mquina gerado por nosso programa ns podemos utilizar a instruo "u". Esta instruo desassembla uma certa regio de memria indicada nos parmetros. Como nosso programa est armazenado entre 100h e 108h, passamos estes dois endereos como parmetro da instruo "u".
http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html 4/6

18/2/2014

Prtica 1: Introduo ao Debug

a 1 1 7 5 : 0 1 0 0B 8 0 2 0 0 M O VA X , 0 0 0 2 1 1 7 5 : 0 1 0 3B B 0 4 0 0 M O VB X , 0 0 0 4 1 1 7 5 : 0 1 0 60 1 D 8 1 1 7 5 : 0 1 0 89 0 A D DA X , B X N O P

Aqui podemos ver, por exemplo, que o cdigo de mquina gerado pela instruo MOV AX,0002 so os 3 bytes B8.02.00. Para ver o cdigo de mquina em memria sem ver o correspondente simblico somente usar o comando "d 100 108".

5. Teste do Programa
O Debug permite depurar programas atravs da execuo passo-a-passo do programa. Isto poderemos testar o programa executando instruo a instruo. Assim podemos acompanhar os valores dos registros e dos contedos das memrias envolvidas. Inicialmente, antes de executarmos o passo-a-passo, voc deve verificar se o valor do IP 100h. Isto pois este registro, como vimos anteriormente, indica a prxima instruo a ser executada. Verifique ento o valor de IP e se necessrio atualize o valor para 100h. Aps isso Ddigite o comando "t" (trace), para executar passo-a-passo este programa, assim:
t A X = 0 0 0 2B X = 0 0 0 0C X = 0 0 0 0D X = 0 0 0 0S P = F F F EB P = 0 0 0 0S I = 0 0 0 0D I = 0 0 0 0 D S = 1 1 7 5E S = 1 1 7 5S S = 1 1 7 5C S = 1 1 7 5I P = 0 1 0 3N VU PE IP LN ZN AP ON C 6 8 9 7 : 0 1 0 0B B 0 4 0 0M O VB X , 0 0 0 4

Voc pode ver que o valor 2 movido para o registro AX. Note tambm que o valor de IP passa de 0100 para 0103, isto , ele passa a apontar para a prxima instruo a ser executada. Digite o comando "t" novamente e voc ver a segunda instruo se executar.
t A X = 0 0 0 2B X = 0 0 0 4C X = 0 0 0 0D X = 0 0 0 0S P = F F F EB P = 0 0 0 0S l = 0 0 0 0D l = 0 0 0 0 D S = l 1 7 5E S = l 1 7 5S S = l 1 7 5C S = 1 1 7 5I P = 0 1 0 6N VU PE IP LN ZN AP ON C 6 8 9 7 : 0 1 0 00 1 D 8A D DA X , B X

Digite o comando "t" novamente para ver a instruo adio ser executada, voc ver a seguinte linha:
t A X = 0 0 0 6B X = 0 0 0 4C X = 0 0 0 0D X = 0 0 0 0S P = F F F EB P = 0 0 0 0S l = 0 0 0 0D l = 0 0 0 0
http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html 5/6

18/2/2014

Prtica 1: Introduo ao Debug

D S = 1 1 7 5E S = 1 1 7 5S S = 1 1 7 5C S = 1 1 7 5I P = 0 1 0 8N VU PE IP LN ZN AP ON C 6 8 9 7 : 0 1 0 09 0N O P

Existe a possibilidade de que os registros contenham valores diferentes dos apresentados, mas AX e BX devero ter os mesmos valores, desde que eles so os nicos que ns modificamos.A instruo NOP no realiza nenhuma operao, ela foi colocada aqui para indicar o fim de nosso programa. Para sair do Debug use o comando "q" (quit )

6. Acesso a Memria
Na memria, cada byte tem um endereo nico que vai de 00000h a FFFFFh. Dois bytes consecutivos so chamados de palavra (word) e poder comear em endereo par ou impar da memria. Uma regra definida pela Intel (construtora do 8088), o byte mais significativo de um work armazenado no endereo maior e o byte menos significativo no endereo menor. Execute o programa abaixo e veja as alteraes na memria e registro. Teste o programa abaixo.
M O VA H , [ 2 0 0 ] S U BA H , 2 M O V[ 2 0 1 ] , A H M O VA X , [ 2 0 0 ] I N CA X M O V[ 2 0 5 ] , A X ;M o v i m e n t aob y t ec o n t i d oe m2 0 0 hp a r aor e g i s t r oA H ;S u b t r a id e2ov a l o rd or e g i s t r oA H ;A r m a z e n ac o n t e d od eA Hn am e m r i aD S : 2 0 1 h ;M o v i m e n t aow o r dc o n t i d oe m2 0 0 hp a r aor e g i s t r oA H ;I n c r e m e n t ad e1ov a l o rd or e g i s t r oA H ;A r m a z e n ac o n t e d od eA Hn am e m r i aD S : 2 0 5 h

7. Exerccio
Faa um programa em assembly que realize as seguintes operacoes matemtica: A-B+2 A+B-C-1 Para tal, considere que A esteja na posio de memria 200h, B na posio 202h e C na posio 203h

http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html

6/6

Вам также может понравиться