Академический Документы
Профессиональный Документы
Культура Документы
Universidade Federal de Santa Catarina Centro Tecnolgico Departamento de Informtica e Estatstica INE 5309 - Linguagem Assembly Prof. Roberto Willrich
2. Programa Debug
http://www.inf.ufsc.br/~willrich/Ensino/INE5602/restrito/pratica01.html 1/6
18/2/2014
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
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.
18/2/2014
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
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
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