PRÁCTICA DE PROGRAMACIÓN CON “DEBUG”

Slides:



Advertisements
Presentaciones similares
EJECUCIÓN DE INSTRUCCIONES(1)
Advertisements

Organización de la unidad central de procesamiento (CPU)
Instrucciones de operación sobre datos
Lenguaje C++.
Traducción por Sintaxis
1 Uso de una CALL GATE Universidad Pontificia de Salamanca (Madrid) Dpto. de Electrónica y Comunicaciones. © Alfonso Alejandre, Luis Azorín y Francisco.
DEBUG.EXE.
REGISTROS INTERNOS DEL PROCESADOR.
CLASE 4 EL ENSAMBLADOR.
CLASE 3 SOFTWARE DEL MICROPROCESADOR
TEMA 2 Arquitectura de un Ordenador
INSTTUTO TECNOLOGICO DE APIZACO
No. Lista 31 Teresita Ramírez Uribe HORA: 8:00-9:00AM.
N.L 32 ROMERO HERNÁNDEZ GABRIELA VERÓNICA. HORA: 8:00-9:00AM ESQUELETO DE UN PROGRAMA EN ENSAMBLADOR.
Programación en ensamblador
Introducción al lenguaje ensamblador
SEMANA 9_2.
¡Primero mira fijo a la bruja!
LECCIÓN 10. INTRODUCCIÓN AL CONTROL MICROPROGRAMADO
TASM: Ensamblador Se le llama ensamblador no sólo al lenguaje; sino también al programa que traduce el código fuente escrito en ensamblador, a código objeto,
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Programación en Lenguaje Ensamblador.
PROG. EN ENSAMBLADOR Ing. Pablo Cesar Tapia Catacora.
Unidad aritmético-lógica
SEMANA 05_2.

Introducción al NASM The Netwide Assembler MIA J. Rafael Rojano C.

Lenguaje Ensamblador integrantes: Esthela Vianey Vázquez Medina No.30
MODOS DE DIRECCIONAMIENTO

Arquitectura del 8086/8088 El 8086 Arquitectura de computadoras II
Prof. Jaime José Laracuente-Díaz
Introducción al lenguaje ensamblador
Tema 2: INTRUCCIONES Profesor: Carlos Concha S LENGUAJES DE BAJO NIVEL.
2.2 Registro de Banderas Conjunto de bits que nos dan información sobre el estado del procesador y sobre el resultado de la última operación efectuada.
MODOS DE DIRECCIONAMIENTO
El programa Debug.

Arquitectura del 8086/8088 TEEL 4011
Lenguaje de Programación cap. 1 Estructura del Computador.
Tutorial de Macro Assembler por Dalimar Velez Vega.
Microprocesador (80X86) Universidad Nacional de Ingeniería
Introducción al lenguaje ensamblador
Estructura de Computadores Comandos DEBUG Programación en Assembler Profesora : Tatiana Marín R.
Tema 1: DATOS Y REGISTROS
Unidad I: Registros e Interrupciones Facilitador: Ing. Eduardo Brando.
M.C. Juan Carlos Olivares Rojas

INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos.
MODOS DE DIRECCIONAMIENTO
A este registro se le conoce también como registro de estado. Consta de 16 bits y únicamente 9 de ellos contiene información, indican el estado de la.
introducción al Lenguaje Ensamblador
PROGRAMACION A BAJO NIVEL
Sistemas Operativos Ensamblador. Junio de 2005Cesar Guisado2 Ventajas del Ensamblador La primera razón para trabajar con ensamblador es que proporciona.
1 Unidad I Panorama general de lenguajes de programación en aplicaciones mecatrónicas M.C. Juan Carlos Olivares Rojas.
TEMA : ARQUITECTURA DE COMPUTADORAS

introducción al Lenguaje Ensamblador
Unidad Central de Proceso
Introducción a la Arquitectura Intel x86 © M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre y cuando se mantenga.
Aprende el arte de la ingeniería inversa
COMUNIDAD YAQUI! Sikiri#4 Heeka#7 Ba’am#19.
Etapas de solución de un problema. Módulo o secciones de un algoritmo.
El microprocesador y su arquitectura
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Arquitectura de PCs Lenguaje ASM Intel Lenguaje de máquina y ASM Toda CPU interpreta su código de máquina propio Instrucciones en código de máquina.
Arquitectura de PCs Arquitectura básica del PC. Introducción El PC es el resultado de una especificación técnica de IBM El hardware se organiza de forma.
Arranque desde CD en modo de no emulación Instalación y Configuración de Computadores, Redes y Periféricos.
D E B U G § Es sencillo de usar y está disponible en cualquier parte § Usted puede empezar sin el conocimiento previo de un lenguaje ensamblador o de uno.
Transcripción de la presentación:

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. 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 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 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 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 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ó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 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:

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 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 programas A manera de práctica capture el siguiente programa: 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> -

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

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 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 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 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 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 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 Vamos a capturar este programa de ejemplo: 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.

Captura de programa Compara bx con 30(1Eh) -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 programa 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: -a 109 178D:0109 jg 110<Enter> 178D:010B<Enter> -

Captura de programa Ahora desensamblo el programa ya corregido: -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 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: - g 110<Enter>

Ejecución rápida Esto desplegará algo parecido a lo siguiente: AX=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=0000 DS=178D ES=178D SS=178D CS=178D IP=0110 NV UP EI PL NZ NA PO NC 178D:0110 CD20 INT 20 -

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