La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "PRÁCTICA DE PROGRAMACIÓN CON DEBUG © M.C.C. Sergio Luis Castillo Valerio."— Transcripción de la presentación:

1

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

3 La herramienta debug DEBUG es una herramienta de DOS que es útil para: DEBUG es una herramienta de DOS que es útil para: –revisión, corrección y creación de programas y rutinas. –Corrección de pequeños errores en un programa sin la necesidad de volver a ensamblarlo. –Observar la ejecución de un programa de manera controlada (paso a paso, por ejem).

4 Invocación del debug Para utilizar DEBUG, en una ventana de DOS teclear: Para utilizar DEBUG, en una ventana de DOS teclear: –debug –debug Al cargarse, el DEBUG despliega un -. Al cargarse, el DEBUG despliega un -. Este prompt indica que DEBUG está esperando algún comando. Este prompt indica que DEBUG está esperando algún comando.

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

6 Captura de programas Con el debug podemos cargar en memoria programas en lenguaje máquina. Con el debug podemos cargar en memoria programas en lenguaje máquina. Por ejemplo: Por ejemplo: –e 100 b bb d8 cd 20 –e 100 b bb d8 cd 20 Con esto indicamos que queremos introducir, a partir del desplazamiento 100, los bytes b8, 00, 01, etc. Con esto indicamos que queremos introducir, a partir del desplazamiento 100, los bytes b8, 00, 01, etc. Todos los números están en hexadecimal. Todos los números están en hexadecimal.

7 Despliegue de información Para observar el contenido de la memoria podemos usar el comando d Para observar el contenido de la memoria podemos usar el comando d Por ejemplo, para ver el programa anterior tecleamos: Por ejemplo, para ver el programa anterior tecleamos: –d 100 –d 100 Este comando desplegará algo parecido a lo siguiente: Este comando desplegará algo parecido a lo siguiente:

8 C:\>debug -e 100 b bb d8 cd 20 -d 100 1BA5:0100 B BB D8-CD 20 0D AA 5F 0E 1F _... 1BA5:0110 0E 69 D7 89 3E 6B D7 59-5F 5E C B.i..>k.Y_^.V4... 1BA5:0120 4F E 5F E2 51 F3-A4 32 C0 AA 59 5E 56 BF O..._.Q..2..Y^V. 1BA5: E4 F3 A4 AA 5E 8B B C6 C E2 65 i....^.G.+...Y.e 1BA5:0140 E3 C7 06 5B E2 69 E E B E2 C3...[.i...Y...[.. 1BA5: B 1E 5F E2 80 BF 64-E3 5C BF 64 E3 S.._...d.\t...d. 1BA5:0160 3A 74 0B C E3 5C F E2 01 C7 06 :t...e.\C.._.... 1BA5: E2 65 E3 01 1E 59 E2-80 3E 5D E D C7 Y.e...Y..>]..u.. - Despliegue de información

9 Desensamble de programas Para desensamblar nuestro programa tecleamos: Para desensamblar nuestro programa tecleamos: –u 100 –u 100 Desensamblar: traducir de lenguaje máquina a lenguaje ensamblador. Desensamblar: traducir de lenguaje máquina a lenguaje ensamblador. Este comando desplegará algo parecido a lo siguiente: Este comando desplegará algo parecido a lo siguiente:

10 Desensamble de programas -u 100 1BA5:0100 B80001 MOV AX,0100 1BA5:0103 BB0002 MOV BX,0200 1BA5: D8 ADD AX,BX 1BA5:0108 CD20 INT 20 1BA5:010A 0DAA5F OR AX,5FAA 1BA5:010D 0E PUSH CS 1BA5:010E 1F POP DS 1BA5:010F 890E69D7 MOV [D769],CX 1BA5: E6BD7 MOV [D76B],DI 1BA5: POP CX 1BA5:0118 5F POP DI 1BA5:0119 5E POP SI 1BA5:011A C3 RET 1BA5:011B 56 PUSH SI 1BA5:011C 3400 XOR AL,00 1BA5:011E 94 XCHG SP,AX 1BA5:011F 1B4F05 SBB CX,[BX+05] -

11 DEBUG también permite el ensamble de programas. DEBUG también permite el ensamble de programas. Ensamblar: Traducir de lenguaje ensamblador (assembly) a lenguaje máquina. Ensamblar: Traducir de lenguaje ensamblador (assembly) a lenguaje máquina. El comando a nos permite capturar programas en lenguaje ensamblador. El comando a nos permite capturar programas en lenguaje ensamblador. Ensamble de programas

12 C:\>debug -a 100 1BA5:0100 mov ax,10 1BA5:0103 mov bx,20 1BA5:0106 add ax,bx 1BA5:0108 int 20 1BA5:010A - A manera de práctica capture el siguiente programa: A manera de práctica capture el siguiente programa:

13 Contenido de los registros El comando r despliega el contenido de los registros. El comando r despliega el contenido de los registros. Si después de ensamblar el programa anterior, tecleamos el comando r, se desplegará algo parecido a lo siguiente: Si después de ensamblar el programa anterior, tecleamos el comando r, se desplegará algo parecido a lo siguiente: -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=1BA5 ES=1BA5 SS=1BA5 CS=1BA5 IP=0100 NV UP EI PL NZ NA PO NC 1BA5:0100 B81000 MOV AX,0010 -

14 Registro de Banderas Activa (1)Inactiva (0) OV: OverflowNV: No overflow DN: Direction DownUP: Direction Up EI: Interrupts enabledDI: Interrupt disabled NG: Sign Flag NegativePL: Sign Flag Plus ZR: ZeroNZ: Not zero AC: Auxiliary CarryNA: No Aux Carry PO: Odd ParityPE: Even Parity CY: CarryNC: No carry

15 Trazado de programas El comando t nos permite trazar un programa. El comando t nos permite trazar un programa. Trazar: Ejecutar paso a paso (instrucción por instrucción) un programa. Trazar: Ejecutar paso a paso (instrucción por instrucción) un programa. La instrucción a ejecutar es aquella a la que apunta el registro IP. La instrucción a ejecutar es aquella a la que apunta el registro IP.

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

17 -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=178D ES=178D SS=178D CS=178D IP=0100 NV UP EI PL NZ NA PO NC 178D:0100 B81000 MOV AX,0010 -t AX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=178D ES=178D SS=178D CS=178D IP=0103 NV UP EI PL NZ NA PO NC 178D:0103 BB2000 MOV BX,0020 -t AX=0010 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=178D ES=178D SS=178D CS=178D IP=0106 NV UP EI PL NZ NA PO NC 178D: D8 ADD AX,BX -t AX=0030 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=178D ES=178D SS=178D CS=178D IP=0108 NV UP EI PL NZ NA PE NC 178D:0108 CD20 INT 20 -g El programa ha finalizado con normalidad -

18 Suma de 30 primeros enteros mov ax,0; Suma=0 mov bx,1; i = 1 mientras1:cmp bx,30; Mientras (bx 30) haz jg fin_mientras1 add ax,bx; suma=suma+i inc bx; i = i + 1 jmp mientras1 fin_mientras1: int 20h ; fin. Vamos a capturar este programa de ejemplo: Vamos a capturar este programa de ejemplo:

19 Captura de programa Compara bx con 30(1Eh) Compara bx con 30(1Eh) Al momento de la captura no conozco la dirección de fin_mientras, por tanto supongo que será 120h Al momento de la captura no conozco la dirección de fin_mientras, por tanto supongo que será 120h -a D:0100 mov ax,0 178D:0103 mov bx,1 178D:0106 cmp bx,1e 178D:0109 jg D:010B add ax,bx 178D:010D inc bx 178D:010E jmp D:0110 int D:0112 -

20 Al terminar la captura encuentro que el salto condicional debe ser a la dirección 110h y no a la 120h como supuse, por tanto, corrijo la instrucción en 109h: Al terminar la captura encuentro que el salto condicional debe ser a la dirección 110h y no a la 120h como supuse, por tanto, corrijo la instrucción en 109h: Captura de programa -a D:0109 jg D:010B -

21 Ahora desensamblo el programa ya corregido: Ahora desensamblo el programa ya corregido: Captura de programa -u 178D:0100 B80000 MOV AX, D:0103 BB0100 MOV BX, D: FB1E CMP BX,+1E 178D:0109 7F05 JG D:010B 01D8 ADD AX,BX 178D:010D 43 INC BX 178D:010E EBF6 JMP D:0110 CD20 INT D:0112 1E PUSH DS 178D: JB 011A 178D: D8 ADD AX,BX 178D: INC BX 178D:0118 EBF6 JMP D:011A CD20 INT D:011C 3400 XOR AL,00 178D:011E 7C17 JL

22 Ejecución rápida Además del trazado, es posible ejecutar un programa hasta que el IP apunte a cierta dirección. Además del trazado, es posible ejecutar un programa hasta que el IP apunte a cierta dirección. Para nuestro programa la instrucción final es Int 20h, que está en la dirección 110h. Para nuestro programa la instrucción final es Int 20h, que está en la dirección 110h. Para detener nuestro programa antes de ejecutar esta instrucción tecleamos: Para detener nuestro programa antes de ejecutar esta instrucción tecleamos: - g g 110

23 Ejecución rápida Esto desplegará algo parecido a lo siguiente: Esto desplegará algo parecido a lo siguiente: AX=01D1h=465= AX=01D1h=465= g 110 AX=01D1 BX=001F CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=178D ES=178D SS=178D CS=178D IP=0110 NV UP EI PL NZ NA PO NC 178D:0110 CD20 INT 20 -

24 Instrucciones aritméticas A manera de práctica ejecute las siguientes operaciones: A manera de práctica ejecute las siguientes operaciones: –513x23 (201hx17h) –1215x119(4bfhx77h) –1525/14(5f5h/eh) Introduce ahora el programa para calcular la raíz cuadrada aproximada. Introduce ahora el programa para calcular la raíz cuadrada aproximada.

25 Algoritmo raiz cuadrada aproximada AX = 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.


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

Presentaciones similares


Anuncios Google