Manual Debug
raysamson28 de Julio de 2013
5.881 Palabras (24 Páginas)546 Visitas
Licenciatura en informática
Administrativa
Materia: compiladores
Trabajo: manual debug ms dos
Asesor(a): Lic. Marcela Hernández Juárez
Asesorado: Ray Samson Medina Franco
Noveno cuatrimestre
Julio del 2013
Índice
TEMA pagina
INTRODUCCIÓN 3
JUSTIFICACIÓN 3
OBJETIVOS 3
DESARROLLO 4
ASSEMBLE
DUMP
DIRECCION: EDIT 5
7
8
GO 10
HEX
LOAD
MOVE
NAME 11
12
15
15
STEP 15
QUIT 16
REGISTERS 16
TRACE
UNASSEMBLE
WRITE
AYUDA? 18
21
22
22
EJEMPLO COMPLETO 23
CONCLUCION 33
BIBLIOGRAFÍA 33
INTRODUCCIÓN
El "Debug" es una utilidad de MS-DOS que permite visualizar memoria, introducir programas en ella y rastrear su ejecución. Una característica de debug es que despliega todo el código del programa en formato hexadecimal.
Es importante saber que muchos usos de este tipo de utilidades de bajo nivel, requieren un funcionamiento stand-alone, es decir, fuera de un Sistema Operativo multi-usuario, ya que éstos encapsulan y ocultan muchos aspectos del hardware.
Debug es Útil para:
Ensamblar pocas líneas de código
Des-ensamblar código en RAM, ROM y ejecutables
Correr paso-a-paso programas
Desplegar datos en memoria
Verificar estado de los registros del CPU
JUSTIFICACION
El uso de debug es con la finalidad de observar el comportamiento de los registros del CPU 80386.
Recordemos que los registros de esta arquitectura son un subconjunto elemental de aquellos presentes en modelos más modernos de la familia '86.
Usando DEBUG es posible observar el comportamiento de las instrucciones, la forma cómo éstas afectan a las banderas, los contenidos de la memoria, el código de las instrucciones; además permite ensamblar código elemental usando los mnemotécnicos del 8086.
OBJETIVO
Podernos desenvolver de una forma satisfactoria con debug dentro de nuestro ordenador y así poder ejecutar los comandos y las líneas de código para poder observar el comportamiento de la memoria en un lenguaje muy bajo.
MANUAL BREVE DE “DEBUG”
Se trata de una utilidad muy poco amigable, sin menús y -sólo en versiones recientes- con ayuda
Mínima, pero una vez aprendidos unos cuantos comandos es extremadamente potente. Hay quien
Lo considera como el mejor programa que ha hecho Microsoft.
Debug, invocado sin parámetros, se carga y pasa a mostrar un lacónico guión, a la espera de
Órdenes del usuario. Todas -a excepción de las relativas a operaciones con memoria expandida,
Que no se verán aquí- constan de una única letra seguida o no de parámetros. Si se va a
Desensamblar un programa, se le puede indicar a debug que lo cargue también tras cargarse él
Escribiendo:
Debug nombre-del-programa argumentos-del-programa
C:\>Debug [Enter]
En la siguiente línea aparecerá un guión, éste es el indicador del Debug, en este momento se
Pueden introducir las instrucciones del Debug. Utilizando los comandos:
A: ASSEMBLE
Sin parámetros ensambla las instrucciones que se introduzcan, guardándolas en la dirección
Siguiente ha la que se llegó en el último "a".
Cuando se utiliza este comando se le puede dar como parámetro la dirección donde se desea que
Se inicie el ensamblado, si se omite el parámetro el ensamblado se iniciará en la localización
Especificada por CS: IP, usualmente 0100H, que es la localización donde deben iniciar los
Programas con extensión .COM, y será la localización que utilizaremos debido a que debug solo
Puede crear este tipo específico de programas.
También se le puede decir qué zona se desea ver con a <dirección>pudiendo ser la dirección
Absoluta(a segmento: desplazamiento) o relativa al segmento de código actual (a
Desplazamiento).
Parámetros: <dir_comienzo>
Resultados: se pueden escribir instrucciones en ensamblador a partir de la dirección de memoria
CS:<dir_comienzo>, hasta que se pulse INTRO. Si no especificamos el parámetro
<dir_comienzo> se toma como dirección de inicio CS: IP
Ejemplo: Vamos a usar la instrucción MOV, que como veremos más adelante, sirve para copiar
Datos de la memoria a los registros y viceversa, además de copiar datos entre registros, que es
Justo lo que vamos a usar en el ejemplo.
-a
2048:0106 movax, bx
Arquitectura y Tecnología de los Computadores.
Departamento de Automática.
Universidad de Alcalá.
Laboratorio de Estructura de Computadores - 2-
2048:0108 movbx,cx
2048:010A
-u 106 108
2048:0106 89D8 MOV AX,BX
2048:0108 89CB MOV BX,CX
Como veremos más adelante, la instrucción 'U' sirve para hacer volcados de memoria, pero no
Viendo el contenido de la misma, sino interpretándola como instrucciones en lenguaje
Ensamblador.
; Ejemplo 2
-r cs
CS 2048
: 2050
-a 200
2050:0200 movax, bx
2050:0202
-u 200 200
2050:0200 89D8 MOV AX, BX
D: DUMP
Muestra el contenido de una zona de memoria en hexadecimal y en ASCII. Sin parámetros
Muestra los primeros 128 bytes a partir de la posición a la que se llegó en el último "d". Si se le
Da un rango, mostrará ese rango.
Parámetros: <dir_1>; Dirección de comienzo del volcado [<dir_2>]; Dirección final del
Volcado.
Resultado: Presenta por pantalla el contenido de las direcciones de memoria entre DS:<dir_1> y
DS:<dir_2> (si no se ha especificado el segundo parámetro, nos hace un volcado desde <dir_1>
Ejemplo:
-d 100
2048:0100 92 D3 3D 64 00 77 0B 3D-50 00 73 03 05 64 00 05...=d.w.=P.s...d..
2048:0110 6C 07 A3 BF E1 E8 4C 00-B0 08 F8 5F 34 00 37 20 l.....L...._4.7
2048:0120 FF EB F8 33 C0 51 B9 0A-00 80 3C 30 72 12 80 3C ...3.Q....<0r..<
2048:0130 39 77 0D F6 E1 02 04 80-D4 00 2D 30 00 46 EB E9 9w........-0.F..
2048:0140 59 C3 AC 3A 06 2B E1 74-0E 3C 2F 74 0A 3C 2D 74 Y..:.+.t.<-t
2048:0150 06 3C 2E 74 02 F9 C3 80-3C 30 72 F9 80 3C 39 77 .<.t....<0r..<9w
2048:0160 F4 F8 EB F2 50 53 8B 1E-8E D3 B8 C6 DB E8 31 FE ....PS........1.
2048:0170 3B 77 09 77 03 5B 58 C3-FF 06 8E D3 8B 1E 8E D3 ;w.w.[X.........
Arquitectura y Tecnología de los Computadores.
Departamento de Automática.
Universidad de Alcalá.
Laboratorio de Estructura de Computadores - 3-
-d 100 110
2048:0100 92 D3 3D 64 00 77 0B 3D-50 00 73 03 05 64 00 05 ..=d.w.=P.s..d..
2048:0110 6C l
(NOTA: El contenido de la memoria seguramente no coincide.)
E DIRECCION: EDIT
Permite editar, byte por byte, una zona de memoria. Muestra -en hexadecimal- el byte de esa
Posición y permite escribir otro valor para cambiarlo. Pulsando espacio pasa al byte siguiente,
Dejando como estaba el anterior si no se ha cambiado, o guardando los cambios si sí se ha hecho.
Para terminar la edición se pulsa INTRO.
Parámetros: <dir_comienzo> [lista de palabras a escribir]
Resultados: Se escribe a partir de la dirección de memoria DS:<dir_comienzo> la lista de
Palabras (dos dígitos hexadecimales) del segundo parámetro. Si no se especifica un segundo
Parámetro entonces DEBUG no permite introducir palabra a palabra los datos que queramos, a
Partir de la dirección DS:<dir_comienzo>. Podemos pasar a la palabra siguiente de memoria
Presionando la tecla ESPACIO, cuando hayamos terminado de introducir los datos que queramos,
Hay que pulsar INTRO
Ejemplo:
-e 100 00 01 02
-d 100 102
2048:0100 00 01 02 ...
; Ejemplo 2
-e 100
2048:0100 00. 01.04 02.05 64.
-d 100 103
2048:0100 00 04 05 64 ...d
F: FILL
Llena una zona de memoria con un valor determinado. Como al terminar un programa la zona de
Memoria en que se residía no se borra (poniéndola a cero, por ejemplo), a menudo es útil para
Distinguir entre lo que son datos del programa actual y lo que es basura del anterior.
Parámetros: <dir_comienzo><dir_final><patrón>
...