PDF de programación - Notas sobre DEBUG

Imágen de pdf Notas sobre DEBUG

Notas sobre DEBUGgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 6 de Marzo del 2018)
286 visualizaciones desde el 6 de Marzo del 2018
117,1 KB
11 paginas
Creado hace 14a (18/02/2006)
NOTAS SOBRE DEBUG



CLASE INEL 4206: MICROPROCESADORES I

1

Preparadas por Rogelio Palomera G.





Verano 1997.

Versión corregida, Febrero 2006


1. Generalidades

DEBUG es un programa provisto con DOS. Versiones más
avanzadas de este programa son SYMDEB y CodeView (CV),
los cuales se proveen junto con MASM (Micro-Soft Assembler).
El nombre sugiere "debugger", que significa programa para
corregir errores de programación en un código. Existen otros
programas que cumplen la misma función, así como otros tipos
de ensambladores

1.1 Ventajas de los programas depuraadores ("debuggers")

a) examinar el contenido de la memoria y los
registros;
b) ejecutar instrucciones de un programa, ya sea en
forma contínua o una a la vez, y verificar su
ejecución (lo que permite identificar errores -de ahí
el nombre- entre otras cosas).
c) modificar directamente una o más instrucciones
del programa sin necesidad de seguir todo el
proceso de ensamblado.
d) escribir instrucciones en lenguaje ensamblador
(ensamblar) y ejecutarlas Esto permite estudiar el
efecto de las instrucciones;
e) desensamblar instrucciones, esto es, interpretar
el contenido de memoria como instrucción de
ensamblador.
f) crear y cargar archivos

1.2 Limitaciones de DEBUG

A) Toda expresión numérica es hexadecimal, con un máximo
de cuatro cifras hexadecimales. Se escriben sin el sufijo H

B) El ensamblador DEBUG no acepta variables ni símbolos en
las instrucciones del ensamblador.

C) Solamente
trabaja en modo real, y existen algunos
comandos de ensamblador que no pueden probarse en este
DEBUG

D) Solamente trabaja con registros de 16 y 8 bits, y no incluye al
FS ni GS. Para trabajar con los registros de 32 bits, como EAX,
EBX, etc. debe usarse el CodeView.

2. Usando DEBUG

2.1 Abriendo y saliendo de DEBUG. Help

Para comenzar DEBUG, simplemente escriba el comando
DEBUG y oprima ENTER. Se puede abrir desde cualquier
directorio.


C:\>DEBUG
-

El "prompt" de DEBUG es el guión. Los comandos en DEBUG
no se ejecutan mientras no se oprima la tecla ENTER.

Cuando se abre DEBUG solo con el comando anterior, el
programa inicializa automáticamente los registros: Los
segmentos de registro se inicializan en el primer lugar de
memoria disponible después de cargar DEBUG, IP=0100, SP=
FFEE y los demás registros a 0000.

Se puede abrir DEBUG cargándolo con un programa:



2


C:\> DEBUG <file.exe>>
-

Cuando se invoca al programa file.exe, éste ocupa un lugar en
la memoria y los registros se inicializan de la manera siguiente:

* el par de registros BX-CX indica el número de bytes que
contiene el programa.
** CS y SS, y los indicadores IP y SP se inicializan de acuerdo
al inicio de los segmentos correspondientes.
** IP = 0000 si no se uso la directiva ORG en el programa
fuente.


Se puede iniciar usando un archivo que contiene comandos de
DEBUG:

C:\> DEBUG < file.DBG
-

En este caso, los comandos incluidos en el archivo se ejecutan
inmediatamente.

El comando "?" genera una lista de los comandos de DEBUG :

-?
assemble A [address]
compare C range address
dump D [range]
enter E address [list]
fill F range list
go G [=address] [addresses]
hex H value1 value2
input I port
load L [address] [drive] [firstsector]
[number]
move M range address
name N [pathname] [arglist]
output O port byte
proceed P [=address] [number]
quit Q

register R [register]
search S range list
trace T [=address] [value]
unassemble U [range]
write W [address] [drive] [firstsector]
[number]
allocate expanded memory XA [#pages]
deallocate expanded memory XD [handle]
map expanded memory pages XM [Lpage]
[Ppage] [handle
display expanded memory status XS

Los corchetes [ ] indican que el parámetro pedido es opcional.
En esta práctica no usamos todos los comandos.

2.2 Parámetros Importantes:

Los parámetros comunes, opcionales o no, son:

address: Una dirección puede ser


a) un offset – 1 a 4 cifras hex - ( ejm 100). , DS es el
segmento implícito para los comandos E, D y F. CS
para los comandos A, G, P, T, W, U

b) un segmento y un offset ( 0230: 100) ;

c) un registro de segmento y un offset (CS: 100)


range: bloque de direcciones que empieza en un “address”
determinado. El rango se especificar como


a) address1 - address2 (address2 solamente offset ya
que el segmento es el mismo que address1)

b) address L << número de bytes >>


El el segundo caso, se indica en hexadecimal el número de
bytes que abarca el rango.




3


2.3 Examinando y modificando memoria y registros.

2.3.1 Registros: El comando R permite examinar y modificar
el contenido de los registros.

Con el comando R solamente, aparece una lista de los
registros y su contenido.

-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000
DS=2D14 ES=2D14 SS=2D14 CS=2D14 IP=0100
NV UP EI PL NZ NA PO NC
2D14:0100 0F DB 0F

El “Flag Register” se muestra como

NV UP EI PL NZ NA PO NC

La última línea muestra:


1. la dirección de la siguiente instrucción (2D14:0100);
2. el lenguaje máquina de la instrucción (0F ) y
3. el lenguaje mnemónico de la instrucción ( DB 0F).


Observe que el offset de la dirección de la siguiente instrucción
está dado por IP

Como los registros se inicializaron, las banderas están a "0"
(cleared), a excepción de la bandera de interrupción (EI = "1",
interrupt enabled). La lectura de las banderas se muestra en la
tabla siguiente. La bandera T (trap) no se incluye, ya que ésta
se usa solamente para correr programas paso a paso.



Bandera

= 1 (set)

= 0 (cleared)

Carry (C)

1: yes; 0: no

Parity (P)
(Even/Odd)

Auxiliary half carry

(A)

(yes/no)

Zero (Z)

(Yes/ No)

Sign (S)

(Negative/Positive)

Interrupt (I)

(Enable/disable)

Direction (D)

(Decrement/increm

ent)

Overflow (O)

(yes/no)

CY

PE

AC

ZR

NG

EI

DN

OV

NC

PO

NA

NZ

PL

DI

UP

NV


Para modificar el contenido de un registro, se invoca el
comando R seguido del registro que se desea modificar .
DEBUG responde indicando el valor actual del registro y en la
línea siguiente dos puntos (:), después de lo cual se introduce
el nuevo valor deseado. Ejemplo:

-R DS
DS 2D14
:2D24
-R



4

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE
BP=0000 SI=0000 DI=0000
DS=2D24 ES=2D14 SS=2D14 CS=2D14 IP=0100
NV UP EI PL NZ NA PO NC
2D14:0100 0F DB 0F

2.3.2 Memoria
Para trabajar con la memoria se usan tres comandos: E, D y F.
En estos tres comandos debemos especificar una dirección o
un rango. En el comando D éstos son opcionales.

2.3.2.1 Comando E:
Este comando nos permite examinar y/o modificar contenidos
de memoria.

A) Examinando: El comando E seguido de la dirección nos
muestra el contenido de la memoria en esa dirección, seguida
de un punto. Oprimiendo la barra de espacio se muestra la
siguiente direccion, y asi sucesivamente hasta que se aprieta
"Enter" o "Return".


memoria con dirección DS:0100 es el byte 0E.

-E 100
2D14:0100 0E.

Usando ahora la tecla de espacio, se ve el contenido de las
direcciones 100 (0E), 101 (00), 102 (B9) y 103 (8A):

-E 100
2D14:0100 0E. 00. B9. 8A.

B) Modificando:Para modificar uno o más lugares de memoria
hay dos formas:

B1) Escribiendo inmediatamente después del punto el nuevo
byte deseado. (En el ejemplo, las negritas):

-E 100

En el siguiente ejemplo, se ve que el contenido de

2D14:0100 05.90 38.40 98.37 0A.0B

B2) Escribiendo inmediatamente después de la dirección la
lista desead de bytes (la lista puede escribirse numéricamente
como números o como ASCII:

-E 100 90 40 37 B
-E 200 'ABC'
-E 200
2D14:0200 41. 42. 43.

2.3.2.2 Comando D:

Este comando permite ver bloques de memoria, y muestra
aquellos lugares con código ASCII, el cual se muestra a la
derecha. . Tiene las modalidades siguientes:

A) El comando D solo presenta 128 bytes, en grupos de 16, a
partir de la última dirección utilizada con D.
B) D <<address>> presenta lo mismo que D, pero a partir de
la dirección indicada.

C) D << range>> presenta solamente el bloque en el rango
indicado.

2.3.2. 3 Comando F <<range>> <<list>>.

Permite "llenar" uno o más lugares en un rango dado, con bytes
especificados en una lista. En los ejemplos usamos el comando
D para verificar el resultado:

-F 100 L 5 88
-D 100 L 5
2D14:0100 88 88 88 88 88
-F 200 L 5 A B C D E
-D 200 L 5
2D14:0200 0A 0B 0C 0D 0E



5



2.3.3 Otros comandos con memoria:

A) El comando M <<range>> <<address>> nos permite
copiar en la dirección <<address>> el bloque de memoria
indicada en el <<range>>.


B) El comando S <<range>> <<list>> localiza los bytes de la
lista los bytes dentro del rango indicado. El comando devuelve
las direcciones donde se encuentran los bytes indicados.

En la siguiente secuencia se puede apreciar el efecto de estos
comandos:



-D 100
2D14:0100 0F 00 B9 8A FF F3 AE 47-61 03 1F 8B C3 48 12 B1 .......Ga....H..
2D14:0110 04 8B C6 F7 0A 0A D0 D3-48 DA 2B D0 34 00 03 2D
  • Links de descarga
http://lwp-l.com/pdf9249

Comentarios de: Notas sobre DEBUG (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad