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 bits | 08 bits | 00 bits | |
---|---|---|---|
AX | AH | AL | Acumulador - participa das operações, recebe o resultado |
BX | BH | BL | Base - serve para endereçar a memória |
CX | CH | CL | Contador - quando o programa precisa repetir rotinas |
DX | DH | DL | Dados - 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ção | Cód. Máquina | Assembly | Descrição |
---|---|---|---|
Soma | 01D8 | ADD AX, BX | AX = AX + BX |
Subtração | 29D8 | SUB AX, BX | AX = AX - BX |
Multiplicação | F7E3 | MUL BX | DX AX = AX * BX |
Divisão | F7F3 | DIV 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.