pr ctica de programaci n con debug n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
PRÁCTICA DE PROGRAMACIÓN CON “DEBUG” PowerPoint Presentation
Download Presentation
PRÁCTICA DE PROGRAMACIÓN CON “DEBUG”

Loading in 2 Seconds...

play fullscreen
1 / 24

PRÁCTICA DE PROGRAMACIÓN CON “DEBUG” - PowerPoint PPT Presentation


  • 161 Views
  • Uploaded on

PRÁCTICA DE PROGRAMACIÓN CON “DEBUG”. © M.C.C. Sergio Luis Castillo Valerio. La herramienta “debug”. DEBUG es una herramienta de DOS que es útil para: revisión, corrección y creación de programas y rutinas.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'PRÁCTICA DE PROGRAMACIÓN CON “DEBUG”' - africa


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
pr ctica de programaci n con debug
PRÁCTICA DEPROGRAMACIÓNCON “DEBUG”

© M.C.C. Sergio Luis Castillo Valerio

la herramienta debug
La herramienta “debug”
  • 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).
invocaci n del debug
Invocación del debug
  • Para utilizar DEBUG, en una ventana de DOS teclear:
    • debug<Enter>
  • Al cargarse, el DEBUG despliega un “-”.
  • Este “prompt” indica que DEBUG está esperando algún comando.
comandos de debug
Comandos de DEBUG
  • 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.
captura de programas
Captura de programas
  • Con el debug podemos cargar en memoria programas en lenguaje máquina.
  • Por ejemplo:
    • e 100 b8 00 01 bb 00 02 01 d8 cd 20 <Enter>
  • 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.
despliegue de informaci n
Despliegue de información
  • Para observar el contenido de la memoria podemos usar el comando “d”
  • Por ejemplo, para “ver” el programa anterior tecleamos:
    • d 100<Enter>
  • Este comando desplegará algo parecido a lo siguiente:
despliegue de informaci n1
Despliegue de información

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.e

1BA5: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..

-

desensamble de programas
Desensamble de programas
  • Para “desensamblar” nuestro programa tecleamos:
    • u 100<Enter>
  • Desensamblar: traducir de lenguaje máquina a lenguaje ensamblador.
  • Este comando desplegará algo parecido a lo siguiente:
slide9

Desensamble de programas

-u 100<Enter>

1BA5:0100 B80001 MOV AX,0100

1BA5:0103 BB0002 MOV BX,0200

1BA5:0106 01D8 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:0113 893E6BD7 MOV [D76B],DI

1BA5:0117 59 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]

-

ensamble de programas
Ensamble de programas
  • DEBUG también permite el “ensamble” de programas.
  • Ensamblar: Traducir de lenguaje ensamblador (assembly) a lenguaje máquina.
  • El comando “a” nos permite capturar programas en lenguaje ensamblador.
ensamble de programas1
Ensamble 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 siguiente programa:
contenido de los registros
Contenido de los registros

-r<Enter>

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

-

  • 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:
registro de banderas
Registro de Banderas

Activa (1) Inactiva (0)

------------------------------------------------------------------

OV: Overflow NV: No overflow

DN: Direction Down UP: Direction Up

EI: Interrupts enabled DI: Interrupt disabled

NG: Sign Flag Negative PL: Sign Flag Plus

ZR: Zero NZ: Not zero

AC: Auxiliary Carry NA: No Aux Carry

PO: Odd Parity PE: Even Parity

CY: Carry NC: No carry

trazado de programas
Trazado de programas
  • El comando “t” nos permite trazar 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.
trazado de programas1
Trazado de programas
  • 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).
trazado de programas2
Trazado de programas

-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:0106 01D8 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

-

suma de 30 primeros enteros
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:
captura de programa
Captura de programa

-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>

-

  • Compara bx con 30(1Eh)
  • Al momento de la captura no conozco la dirección de fin_mientras, por tanto supongo que será 120h
captura de programa1
Captura de programa

-a 109

178D:0109 jg 110<Enter>

178D:010B<Enter>

-

  • 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 programa2
Captura de programa

-u

178D:0100 B80000 MOV AX,0000

178D:0103 BB0100 MOV BX,0001

178D:0106 83FB1E CMP BX,+1E

178D:0109 7F05 JG 0110

178D:010B 01D8 ADD AX,BX

178D:010D 43 INC BX

178D:010E EBF6 JMP 0106

178D:0110 CD20 INT 20

178D:0112 1E PUSH DS

178D:0113 7205 JB 011A

178D:0115 01D8 ADD AX,BX

178D:0117 43 INC BX

178D:0118 EBF6 JMP 0110

178D:011A CD20 INT 20

178D:011C 3400 XOR AL,00

178D:011E 7C17 JL 0137

-

  • Ahora desensamblo el programa ya corregido:
ejecuci n r pida
Ejecución rápida
  • - g 110<Enter>
  • 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 detener nuestro programa antes de ejecutar esta instrucción tecleamos:
ejecuci n r pida1
Ejecución rápida

-g 110<Enter>

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

-

  • Esto desplegará algo parecido a lo siguiente:
  • AX=01D1h=465=1+2+3+...+29+30
instrucciones aritm ticas
Instrucciones aritméticas
  • 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.
algoritmo raiz cuadrada aproximada
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.