DEBUG: Introdução e Comandos Básicos

Classificado em Computação

Escrito em em português com um tamanho de 9,24 KB.

Laboratório: DEBUG - 1ª Aula

O DEBUG (depurador) é uma ferramenta que possui recursos para:

  • Examinar e modificar posições de memória;
  • Carregar, armazenar e iniciar programas;
  • Examinar e modificar registradores.

O Debug opera com o sistema hexadecimal através de comandos referenciados pela primeira letra do mesmo, seguido ou não de um ou mais parâmetros.

Para iniciar o Debug:

Digite: DEBUG

O "prompt" do programa é um hífen (-), que indica que o programa está pronto para aceitar comandos.

Se for digitado: DEBUG nome_arq.com, o arquivo nome_arq.com será carregado pelo Debug para ser examinado, alterado e executado sob controle do depurador.

Para encerrar o Debug:

-Q (quit) - Encerra e volta ao DOS.

Obs.: Os comentários que seguem após o ponto e vírgula são para efeito didático.

Comandos do Debug

Comando R (Register)

Mostra os registradores, a linha endereçada pelo IP (Instruction Pointer) e a instrução corrente.

Exemplo:

-R

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=2477 ES=2477 SS=2477 IP=0100 NV UP EI PL NZ NA PO NC

2477:0100 01D8 ADD AX,BX

OBS: Os valores dos registradores dependem das condições de inicialização do computador.

Registradores Gerais/Dados

16 bits08 bits00 bits
AXAHALAcumulador - participa das operações, recebe o resultado
BXBHBLBase - serve para endereçar a memória
CXCHCLContador - quando o programa precisa repetir rotinas
DXDHDLDados - extensão do acumulador, pode pegar uma parte do operando

Podem ser divididos em 2 partes, podendo ser endereçados separadamente. Cada registrador pode ser usado como um registrador de 16 ou 2 de 8 bits.

Podem ser usados na maioria das operações lógicas e aritméticas.

Profª Luciana Bührer - Página 1

Registradores Apontadores

  • BP - Ponteiro Base
  • SP - Ponteiro de Pilha (STACK)
  • IP - Ponteiro de Instrução (aponta para a instrução que será executada).

Registradores Indexadores

  • DI - Índice Destino
  • SI - Índice Fonte

Manipulam strings (sequência de bits que estão na memória). SI aponta onde está a string e o DI para onde ela vai.

Os Apontadores e Indexadores são sempre acessados com 16 bits. Podem participar de muitas operações lógicas e aritméticas.

Os registradores SP, DI, SI são usados em muitas instruções implicitamente.

Registradores de Segmento

  • CS - Segmento de código - aponta na região da memória onde temos os códigos
  • DS - Segmento de dados - aponta na região da memória onde temos os dados, geralmente variáveis do programa. Exemplo: uma tabela de valores a serem convertidos através do programa.
  • SS - Segmento de pilha (STACK) - aponta para o segmento de pilha
  • ES - Segmento extra - é usado também para os dados. Foi reservado caso necessário

Exercício:

  • Execute o comando R.
  • Anote os valores dos registradores.
  • Anote a instrução atual (terceira linha mostrada pelo comando) em sua forma hexadecimal e em assembly.

Alteração/Visualização individual dos registradores

Sintaxe: -R [Nome_do_registrador]

Se for digitado o nome do registrador, será apresentado o conteúdo do mesmo, que poderá ser alterado.

Comando E (Enter)

Entrada de dados na memória, ou seja, permite alterar o conteúdo de memória.

Sintaxe: -E endereço

Endereço é uma designação de duas partes contendo um registrador de segmento e um deslocamento.

Caso o segmento seja omitido, será usado o segmento DS.

Exemplo:

-E 100 - comando para alterar o conteúdo do endereço 100.

2477:0100 11. - aparecerá o que tem armazenado no endereço 100 e espera que este conteúdo seja alterado.

Caso este valor esteja correto, pressione <espaço>, o valor não se modifica.

Comentários: É mostrada a posição de memória (2477:0100) representada pelo segmento 2477 e deslocamento 0100. O conteúdo desta posição é 11. Neste ponto pode-se alterar este valor digitando um novo número.

Comando T (Trace)

T (trace) executa a instrução apontada por IP (uma instrução de cada vez); apresenta os registradores e posiciona IP para a próxima instrução.

Profª Luciana Bührer - Página 3

Operações Aritméticas em Assembly

Adição

Código de Máquina: 01D8

Assembly: ADD AX,BX

Adiciona o conteúdo dos registradores AX e BX e guarda o resultado da soma em AX.

(AX + BX => AX)

Subtração

Código de Máquina: 29D8

Assembly: SUB AX,BX

Subtrai o conteúdo dos registradores AX e BX e guarda o resultado da subtração em AX.

(AX - BX => AX)

Multiplicação

Código de Máquina: F7E3

Assembly: MUL BX

Multiplica o conteúdo dos registradores AX e BX e guarda o resultado da multiplicação em DX e AX.

AX * BX => DX AX

(16 bits) (16 bits) (32 bits)

Divisão

Código de Máquina: F7F3

Assembly: DIV BX

Divide o conteúdo dos registradores DX e AX por BX, guarda o resultado da divisão em AX e o resto da divisão em DX.

(DX AX) / BX => AX (Resultado) e DX (Resto)

Resumo das Operações

OperaçãoCód. MáquinaAssemblyDescrição
Soma01D8ADD AX, BXAX = AX + BX
Subtração29D8SUB AX, BXAX = AX - BX
MultiplicaçãoF7E3MUL BXDX AX = AX * BX
DivisãoF7F3DIV BX(DX AX) / BX => AX (Resultado), DX (Resto)

Comando A (Assembly)

Monta comandos assembly pelo depurador.

Exemplo:

Execute o comando -A100 - monta comando assembly na posição 100.

Digite os seguintes comandos:

MOV AX,0003 - coloca 3 no registrador AX

MOV BX,0002 - coloca 2 no registrador BX

ADD AX,BX - soma AX com BX e guarda o resultado em AX

Posicionar corretamente o IP na primeira linha de instrução - colocar 100 no IP.

Usar R IP

Comando G (Go)

Execução de várias instruções.

-G (endereço) - executa grupo de instruções desde o IP até o endereço especificado (exclusive). Caso não seja especificado endereço, o programa será executado até encontrar a instrução INT 20.

Comando U (Unassembly)

Unassembly significa desassembly, isto é, mostra a linguagem de máquina em linguagem de códigos mnemônicos. O comando U fornece uma maneira elegante de visualizar os dados na memória, fornecendo-os na forma de mnemônicos.

-U (endereço) - mostra instruções em assembly a partir de (endereço)

Exemplo: -U100

Comando D (Dump)

É usado para mostrar o conteúdo de qualquer posição de memória. -D (dump) = Despejar

O comando D (dump) mostra uma porção da memória a partir de um endereço especificado. Sintaxe:

-D(endereço), onde endereço = Segmento:Deslocamento

O resultado do "despejo" é mostrado em 160 posições de memória a partir do endereço dado em três blocos:

  • O primeiro bloco indica os endereços mostrados;
  • O segundo bloco, o conteúdo de memória em base hexadecimal;
  • O terceiro bloco contém os valores correspondentes em código ASCII.

Exemplo: -D100

Analise os três blocos deste comando.

Entradas relacionadas: