PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

24
PRÁCTICA DE PRÁCTICA DE PROGRAMACIÓN PROGRAMACIÓN CON “DEBUG” CON “DEBUG” © M.C.C. Sergio Luis Castillo Valerio

Transcript of PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Page 1: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

PRÁCTICA DEPRÁCTICA DEPROGRAMACIÓNPROGRAMACIÓNCON “DEBUG”CON “DEBUG”

© M.C.C. Sergio Luis Castillo Valerio

Page 2: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

La herramienta “debug”La herramienta “debug”

DEBUG es una herramienta de DOS DEBUG es una herramienta de DOS que es útil para:que es útil para:– revisión, corrección y creación de revisión, corrección y creación de

programas y rutinas.programas y rutinas.– Corrección de pequeños errores en un Corrección de pequeños errores en un

programa sin la necesidad de volver a programa sin la necesidad de volver a ensamblarlo.ensamblarlo.

– Observar la ejecución de un programa de Observar la ejecución de un programa de manera controlada (paso a paso, por manera controlada (paso a paso, por ejem).ejem).

Page 3: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Invocación del debugInvocación del debug

Para utilizar DEBUG, en una Para utilizar DEBUG, en una ventana de DOS teclear:ventana de DOS teclear:– debug<Enter>debug<Enter>

Al cargarse, el DEBUG despliega un Al cargarse, el DEBUG despliega un ““--”.”.

Este “prompt” indica que DEBUG Este “prompt” indica que DEBUG está esperando algún comando.está esperando algún comando.

Page 4: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Comandos de DEBUGComandos de DEBUG

Los comandos de esta herramienta Los comandos de esta herramienta son casi todos letras simples:son casi todos letras simples:– a: Assembler (ensamblar).a: Assembler (ensamblar).– u: Unassembler (desensamblar).u: Unassembler (desensamblar).– d: Desplegar(dump=vaciar,volcar).d: Desplegar(dump=vaciar,volcar).– e: Entry (Introducir información).e: Entry (Introducir información).– ?: Despliega una lista de los ?: Despliega una lista de los

comandos.comandos.

Page 5: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Captura de programasCaptura de programas

Con el debug podemos cargar en memoria Con el debug podemos cargar en memoria programas en lenguaje máquina.programas en lenguaje máquina.

Por ejemplo:Por ejemplo:– e 100 b8 00 01 bb 00 02 01 d8 cd 20 <Enter>e 100 b8 00 01 bb 00 02 01 d8 cd 20 <Enter>

Con esto indicamos que queremos Con esto indicamos que queremos introducir, a partir del desplazamiento 100, introducir, a partir del desplazamiento 100, los bytes b8, 00, 01, etc.los bytes b8, 00, 01, etc.

Todos los números están en hexadecimalTodos los números están en hexadecimal..

Page 6: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Despliegue de informaciónDespliegue de información

Para observar el contenido de la Para observar el contenido de la memoria podemos usar el memoria podemos usar el comando “d”comando “d”

Por ejemplo, para “ver” el Por ejemplo, para “ver” el programa anterior tecleamos:programa anterior tecleamos:– d 100<Enter>d 100<Enter>

Este comando desplegará algo Este comando desplegará algo parecido a lo siguiente:parecido a lo siguiente:

Page 7: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

C:\>debug<Enter>-e 100 b8 00 01 bb 00 02 01 d8 cd 20<Enter>-d 100<Enter>1BA5:0100 B8 00 01 BB 00 02 01 D8-CD 20 0D AA 5F 0E 1F 89 ......... .._...1BA5:0110 0E 69 D7 89 3E 6B D7 59-5F 5E C3 56 34 00 94 1B .i..>k.Y_^.V4...1BA5:0120 4F 05 89 0E 5F E2 51 F3-A4 32 C0 AA 59 5E 56 BF O..._.Q..2..Y^V.1BA5:0130 69 E4 F3 A4 AA 5E 8B 47-03 2B C6 C7 06 59 E2 65 i....^.G.+...Y.e1BA5:0140 E3 C7 06 5B E2 69 E4 01-06 59 E2 01 06 5B E2 C3 ...[.i...Y...[..1BA5:0150 53 8B 1E 5F E2 80 BF 64-E3 5C 74 12 80 BF 64 E3 S.._...d.\t...d.1BA5:0160 3A 74 0B C6 87 65 E3 5C-43 83 06 5F E2 01 C7 06 :t...e.\C.._....1BA5:0170 59 E2 65 E3 01 1E 59 E2-80 3E 5D E2 00 75 0D C7 Y.e...Y..>]..u..-

Despliegue de informaciónDespliegue de información

Page 8: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Desensamble de Desensamble de programasprogramas

Para “desensamblar” nuestro Para “desensamblar” nuestro programa tecleamos:programa tecleamos:– u 100<Enter>u 100<Enter>

Desensamblar: traducir de Desensamblar: traducir de lenguaje máquina a lenguaje lenguaje máquina a lenguaje ensamblador.ensamblador.

Este comando desplegará algo Este comando desplegará algo parecido a lo siguiente:parecido a lo siguiente:

Page 9: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Desensamble de Desensamble de programasprogramas

-u 100<Enter>1BA5:0100 B80001 MOV AX,01001BA5:0103 BB0002 MOV BX,02001BA5:0106 01D8 ADD AX,BX1BA5:0108 CD20 INT 201BA5:010A 0DAA5F OR AX,5FAA1BA5:010D 0E PUSH CS1BA5:010E 1F POP DS1BA5:010F 890E69D7 MOV [D769],CX1BA5:0113 893E6BD7 MOV [D76B],DI1BA5:0117 59 POP CX1BA5:0118 5F POP DI1BA5:0119 5E POP SI1BA5:011A C3 RET1BA5:011B 56 PUSH SI1BA5:011C 3400 XOR AL,001BA5:011E 94 XCHG SP,AX1BA5:011F 1B4F05 SBB CX,[BX+05]-

Page 10: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

DEBUG también permite el DEBUG también permite el “ensamble” de programas.“ensamble” de programas.

Ensamblar: Traducir de lenguaje Ensamblar: Traducir de lenguaje ensamblador (assembly) a ensamblador (assembly) a lenguaje máquina.lenguaje máquina.

El comando “a” nos permite El comando “a” nos permite capturar programas en lenguaje capturar programas en lenguaje ensamblador.ensamblador.

Ensamble de programasEnsamble de programas

Page 11: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Ensamble de programasEnsamble de programas

C:\>debug<Enter>-a 100<Enter>1BA5:0100 mov ax,10<Enter>1BA5:0103 mov bx,20<Enter>1BA5:0106 add ax,bx<Enter>1BA5:0108 int 20<Enter>1BA5:010A<Enter>-

A manera de práctica capture el A manera de práctica capture el siguiente programa:siguiente programa:

Page 12: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Contenido de los registrosContenido de los registros

El comando “r” despliega el El comando “r” despliega el contenido de los registros.contenido de los registros.

Si después de ensamblar el Si después de ensamblar el programa anterior, tecleamos el programa anterior, tecleamos el comando “r”, se desplegará algo comando “r”, se desplegará algo parecido a lo siguiente:parecido a lo siguiente:-r<Enter>

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=1BA5 ES=1BA5 SS=1BA5 CS=1BA5 IP=0100 NV UP EI PL NZ NA PO NC1BA5:0100 B81000 MOV AX,0010-

Page 13: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Registro de BanderasRegistro de Banderas

Activa (1) Inactiva (0)------------------------------------------------------------------OV: Overflow NV: No overflowDN: Direction Down UP: Direction UpEI: Interrupts enabled DI: Interrupt disabledNG: Sign Flag Negative PL: Sign Flag PlusZR: Zero NZ: Not zeroAC: Auxiliary Carry NA: No Aux CarryPO: Odd Parity PE: Even ParityCY: Carry NC: No carry

Page 14: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Trazado de programasTrazado de programas

El comando “t” nos permite trazar El comando “t” nos permite trazar un programa.un programa.

Trazar: Ejecutar paso a paso Trazar: Ejecutar paso a paso (instrucción por instrucción) un (instrucción por instrucción) un programa.programa.

La instrucción a ejecutar es aquella a La instrucción a ejecutar es aquella a la que “apunta” el registro IP.la que “apunta” el registro IP.

Page 15: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Vamos a trazar el último programa Vamos a trazar el último programa que capturamos.que capturamos.

Observe que cuando desplegamos Observe que cuando desplegamos los registros justo después de los registros justo después de capturar el programa, la última capturar el programa, la última línea muestra la primera línea muestra la primera instrucción de nuestro programa instrucción de nuestro programa ((mov ax,0010mov ax,0010). ).

Trazado de programasTrazado de programas

Page 16: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Trazado de programasTrazado de programas-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=178D ES=178D SS=178D CS=178D IP=0100 NV UP EI PL NZ NA PO NC178D:0100 B81000 MOV AX,0010-t

AX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=178D ES=178D SS=178D CS=178D IP=0103 NV UP EI PL NZ NA PO NC178D:0103 BB2000 MOV BX,0020-t

AX=0010 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=178D ES=178D SS=178D CS=178D IP=0106 NV UP EI PL NZ NA PO NC178D:0106 01D8 ADD AX,BX-t

AX=0030 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=178D ES=178D SS=178D CS=178D IP=0108 NV UP EI PL NZ NA PE NC178D:0108 CD20 INT 20-g

El programa ha finalizado con normalidad-

Page 17: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Suma de 30 primeros Suma de 30 primeros enterosenteros

mov ax,0 ; Suma=0mov bx,1 ; i = 1

mientras1: cmp bx,30 ; Mientras (bx 30) hazjg fin_mientras1add ax,bx ; suma=suma+iinc bx ; i = i + 1jmp mientras1

fin_mientras1: int 20h ; fin.

Vamos a capturar este programa de Vamos a capturar este programa de ejemplo:ejemplo:

Page 18: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Captura de programaCaptura de programa

Compara bx con 30(1Eh)Compara bx con 30(1Eh)

Al momento de la captura no Al momento de la captura no conozco la dirección de conozco la dirección de fin_mientras, por tanto supongo fin_mientras, por tanto supongo que será 120hque será 120h

-a 100<Enter>178D:0100 mov ax,0<Enter>178D:0103 mov bx,1<Enter>178D:0106 cmp bx,1e<Enter>178D:0109 jg 120<Enter>178D:010B add ax,bx<Enter>178D:010D inc bx<Enter>178D:010E jmp 106<Enter>178D:0110 int 20<Enter>178D:0112<Enter>-

Page 19: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Al terminar la captura encuentro Al terminar la captura encuentro que el salto condicional debe ser a que el salto condicional debe ser a la dirección 110h y no a la 120h la dirección 110h y no a la 120h como supuse, por tanto, corrijo la como supuse, por tanto, corrijo la instrucción en 109h:instrucción en 109h:

Captura de programaCaptura de programa

-a 109178D:0109 jg 110<Enter>178D:010B<Enter>-

Page 20: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Ahora Ahora desensamblo desensamblo el programa el programa ya corregido:ya corregido:

Captura de programaCaptura de programa-u178D:0100 B80000 MOV AX,0000178D:0103 BB0100 MOV BX,0001178D:0106 83FB1E CMP BX,+1E178D:0109 7F05 JG 0110178D:010B 01D8 ADD AX,BX178D:010D 43 INC BX178D:010E EBF6 JMP 0106178D:0110 CD20 INT 20178D:0112 1E PUSH DS178D:0113 7205 JB 011A178D:0115 01D8 ADD AX,BX178D:0117 43 INC BX178D:0118 EBF6 JMP 0110178D:011A CD20 INT 20178D:011C 3400 XOR AL,00178D:011E 7C17 JL 0137-

Page 21: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Ejecución rápidaEjecución rápida Además del trazado, es posible Además del trazado, es posible

ejecutar un programa hasta que el IP ejecutar un programa hasta que el IP apunte a cierta dirección.apunte a cierta dirección.

Para nuestro programa la instrucción Para nuestro programa la instrucción final es “Int 20h”, que está en la final es “Int 20h”, que está en la dirección 110h.dirección 110h.

Para detener nuestro programa antes Para detener nuestro programa antes de ejecutar esta instrucción de ejecutar esta instrucción tecleamos:tecleamos:

- g 110<Enter>- g 110<Enter>

Page 22: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Ejecución rápidaEjecución rápida

Esto desplegará algo parecido a lo Esto desplegará algo parecido a lo siguiente:siguiente:

AX=01D1h=465=1+2+3+...+29+30AX=01D1h=465=1+2+3+...+29+30

-g 110<Enter>

AX=01D1 BX=001F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=178D ES=178D SS=178D CS=178D IP=0110 NV UP EI PL NZ NA PO NC178D:0110 CD20 INT 20-

Page 23: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Instrucciones aritméticasInstrucciones aritméticas

A manera de práctica ejecute las A manera de práctica ejecute las siguientes operaciones:siguientes operaciones:– 513x23 (201hx17h)513x23 (201hx17h)– 1215x119(4bfhx77h)1215x119(4bfhx77h)– 1525/14(5f5h/eh)1525/14(5f5h/eh)

Introduce ahora el programa para Introduce ahora el programa para calcular la raíz cuadrada aproximada.calcular la raíz cuadrada aproximada.

Page 24: PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio.

Algoritmo raiz cuadrada Algoritmo raiz cuadrada aproximadaaproximadaAX = 81 ; N

BX = 1 ; Impar

CX = 0 ; Contador

while (AX > 0)

AX = AX – BX

CX = CX + 1

BX = BX + 2

finwhile

CX = Raiz aproximada de N.