37
INSTITUTO DE ESTUDIOS INSTITUTO DE ESTUDIOS SUPERIORES DE CHIAPAS SUPERIORES DE CHIAPAS CHACÓN AGUIRRE PAULINA CHACÓN AGUIRRE PAULINA YANNETH YANNETH Salazar Salazar Narváez Narváez Ing. Sistemas Ing. Sistemas Computacionales Computacionales 4to 4to “A” “A” Catedrático: Catedrático: Lic. Enrique Martínez Lic. Enrique Martínez Gutiérrez Gutiérrez Asignatura: Asignatura: Lenguaje Lenguaje Ensamblador Ensamblador

Debug PaulinaChacon

  • Upload
    pau22

  • View
    14.033

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Debug PaulinaChacon

INSTITUTO DE ESTUDIOS INSTITUTO DE ESTUDIOS SUPERIORES DE CHIAPASSUPERIORES DE CHIAPAS

CHACÓN AGUIRRE PAULINA YANNETHCHACÓN AGUIRRE PAULINA YANNETH

Salazar NarváezSalazar Narváez

Ing. Sistemas ComputacionalesIng. Sistemas Computacionales

4to “A”4to “A”

Catedrático:Catedrático:

Lic. Enrique Martínez GutiérrezLic. Enrique Martínez Gutiérrez

Asignatura:Asignatura:

Lenguaje EnsambladorLenguaje Ensamblador

Page 2: Debug PaulinaChacon

DEBUGDEBUGes un programa que se utiliza para depurar programas, para conocer lo que realiza la computadora a nivel de hardware todo lo que ocurre cuando ejecuta un programa, porque te va mostrando los valores de los registros, localidad de memoria, etc

Page 3: Debug PaulinaChacon

Introducción.Introducción.

En la siguiente presentación se hablara del programa DEBUG que es un programa que se encarga de probar y depurar programas ejecutables desde DOS.

Se hablara de sus características principales cuales son los comandos mas utilizados y su función, cual es su estructura, como inicializa entre otras utilerías que ofrece DEBUG.

Page 4: Debug PaulinaChacon

El programa DEBUG.

El DOS viene con un programa llamado DEBUG que es utilizado para probar y depurar programas ejecutables.

Características de DEBUG:

• Despliega todo el código del programa y los datos en forma hexadecimal.

• Permite ejecutar un programa en modo de paso sencillo (un paso a la vez) de manera que se pueda ver el efecto de cada instrucción sobre las localidades de memoria y los registros.

Page 5: Debug PaulinaChacon

Comandos de DEBUG

Los comandos que proporciona DEBUG nos permiten realizar diferentes operaciones útiles.

La mayoría de los comandos de DEBUG ejecutan una acción y vuelven al indicador, pero si es un comando largo, como puede ser mostrar un trozo grande de código, puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver.

Comando.

Descripción.

AEnsamblar instrucciones simbólicas y pasarlas a código de maquina.

D Mostrar el contenido de un área de memoria.

EIntroducir datos en memoria, iniciando en una localidad especifica.

GCorrer el programa ejecutable que se encuentra en memoria.

N Nombrar un programa.

PProceder a ejecutar un conjunto de instrucciones relacionadas.

Q Salir de la selección con DEBUG.

R Mostrar el contenido de uno o más registros.

T Rastrear la ejecución de una instrucción.

U“Desensamblar” código máquina y pasarlo a código simbólico.

W Escribir o grabar un programa en disco.

XA Asignar memoria expandida.

XD Desasignar memoria expandida.

XM Asignar páginas de memoria expandida.

XS Mostrar estados de la memoria expandida.

Page 6: Debug PaulinaChacon

Reglas de los comandos de DEBUG.

1. No distingue entre letras minúsculas y mayúsculas.

2. Solo se introduce un solo espacio en donde sea necesario separar parámetros en un comando.

Ejemplos:

Utilizado el comando D de DEBUG para mostrar la misma área de memoria, iniciando en el desplazamiento 200h en el segmento de datos (SD).

D DS:200 (comando en mayúscula, con un espacio en blanco después de él)

DDS:200 (comando en mayúscula, sin espacio en blanco después de él)

dds:200 (comando en minúsculas, sin espacio en blanco después de él)

Note que especifica segmentos y desplazamientos con dos puntos (:). Además, DEBUG supone que todos los números están en formato hexadecimal.

Page 7: Debug PaulinaChacon

El despliegue del DEBUGConsiste en tres partes:

Dirección<----- Representación Hexadecimal -----

><--ASCII--

>

xxxx:xx10 xx ……………. xx-xx ……………. xx x……….x

xxxx:xx20 xx ……………. xx-xx ……………. xx x……….x

xxxx:xx30 xx ……………. xx-xx ……………. xx x……….x

1. La dirección hexadecimal del ultimo byte de la izquierda que se despliega en la forma segmento:desplazamiento.

2. Representación hexadecimal del área desplegada.

3. Representación en ASCII de los bytes que contienen características desplegables .

Page 8: Debug PaulinaChacon

Inicio con DEBUG.Para empezar con DEBUG, coloque el sistema en el directorio del disco duro que contenga DEBUG. Para iniciar el programa, teclee la palabra DEBUG y presione un Enter.

DEBUG debe cargarse al disco de la memoria.

Cuando el indicador (-), aparezca en la pantalla. DEBUG está listo para recibir sus comando.

Page 9: Debug PaulinaChacon

Visualización de las localidades de memoria.El único comando por el cual nos interesaremos es D (Display, mostrar), el cual lista ocho líneas de 16 bytes cada una y muestra su representación hexadecimal y ASCCI

Verificación del equipo del sistema.

Vamos a determinar el BIOS que tiene instalado su equipo. Estas palabra está en las localidades 410H-411H, que puede ver desde DEBUG por medio de una dirección de dos partes: 40 para la dirección de segmentos y 10 para el desplazamiento desde la dirección del segmento.

Teclear correctamente 40:10

Page 10: Debug PaulinaChacon

Ahora agarramos la primera línea algo así:

0040:0010 23 C8 F0 80 .. .. .. ..

En este ejemplo, los dos bytes en la palabra del estado del equipo contienen los valores hexadecimales 23 C8. invierta los bytes (C8 23) y conviértalos a binario:

Bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Binario: 1 1 0 0 1 0 0 0 0 0 1 0 0 0 1 1

Bits Dispositivo

15, 14 Número de puertos paralelos para impresora conectados = 3 (binario 11)

11, 9 Número de puertos seriales conectados = 4 (binario 100)

7, 6 Número de dispositivos de disco flexible = 1 (donde 00 = 1, 01 = 2, 10 = 3 y 11 = 4)

5, 4Modo inicial de video = 10 (donde 01 = 40 X 25 en color, 10 = 80 X 12 25 en color y 11 = 80 X 12 25 monocromático.

1 1 = coprocesador matemático está presente

0 1 = unidad de disco flexible está presente

A continuación está una explicación del código hexadecimal.

Page 11: Debug PaulinaChacon

Verificar el tamaño de la memoria.Aquí se calculara la cantidad de memoria que el DOS piensa que tiene instalada. Depende del modelo de la computadora, el valor puede estar basado en interrupciones internos y puede indicar menos memoria de la que realmente este instalada. El valor esta en área de la BIOS en las localidades 413H y 414H.

Teclee correctamente D 40:13

Page 12: Debug PaulinaChacon

Aparecerá 0040:0010 .. .. .. 80 02 .. .. ..

Los dos primeros bytes mostrados en el desplazamiento 0010H son los kilobytes de memoria en hexadecimal, con los bytes en secuencia inversa.

Ejemplo:

Hexadecimal Inverso

Hexadecimal Corregido Decimal (k)

80 02 02 80 640

Page 13: Debug PaulinaChacon

Verificación del número de serie y de la nota de derechos reservados.El numero de la serie de la computadora está alojado en el ROM de BIOS en la localidad FE000H.

Para visualizarlo teclee D FE00:0

La pantalla muestra un número de series de siete dígitos seguido , en maquinas convencionales, de una nota de derechos reservados. Para seguir checando los derechos reservado basta con poner D y un Enter.

Page 14: Debug PaulinaChacon

Verificación de la fecha en la ROM BIOSLa fecha de fabricación de su ROM BIOS inicia en la totalidad FFFF5H, registrada como mm/dd/aa. Par verla teclee:

D FFFF:5 (Enter)

Esta fecha nos puede determinar la edad de la computadora y su modelo.

Page 15: Debug PaulinaChacon

Verificación de la identidad del modelo.Ya después de la fecha de fabricación del ROM BIOS está la identificación del modelo en la localidad FFFFEH ó FFFF:E

Código Modelo

F8 PS/2 Modelos 70 y 80

F9 PC Convertible

FA PS/2 Modelo 30

FB PC-XT (1986)

FC PC-AT (1984), PC-XT Modelo 286 PS/2 Modelos 50 y 60, etc.

FE PC-XT (1982), Portátil (1982)

FF Primera IBM PC

Aquí algunos de los modelos.

Page 16: Debug PaulinaChacon

Ejercicio 1 de lenguaje máquina: DATOS INMEDIATOS.A continuación se usara DEBUG para introducir un programa directamente en memoria y rastrear su ejecución. Este programa mostrara un sencillo código de lenguaje maquina, como aparece en el almacenamiento principal y los efectos de su ejecución.

Programa Datos Inmediatos, datos definidos como parte de una instrucción. Se muestra el lenguaje máquina en formato hexadecimal y para legibilidad en código simbólico, junto con explicación .

Para la primera instrucción, el código simbólico es MOV AX,0123, lo cual mueve (o copia) el valor 0123H al registro AX.

MOV es la instrucción, el registro AX es el primer operando y el valor inmediato 0123H es el segundo operando.

Instrucción de máquina

Código simbólico Explicación

B82301 MOV AX,0123 Mover el valor 0123H a AX

052500 ADD AX,0025 Sumar el valor 0025H a AX

BD8 MOV BX,AX Mover el contenido de AX a BX

03D8 ADD BX,AX Sumar el contenido de AX a BX

8BCB MOV CX,BX Mover el contenido de BX a CX

2BC8 SUB CX,AX Restar el contenido de AX a CX

2BC0 SBU AX,AX Restar AX de AX (limpiar AX)

90 NOP No operación (no hace nada)

Page 17: Debug PaulinaChacon

Las instrucciones de máquina pueden tener uno, dos o tres bytes de longitud. El primer byte es la operación real y cualesquiera otros bytes, si están presentes, son operandos: referencia a un valor de inmediato, un registro o una localidad de memoria.

La ejecución del programa empieza con la primera instrucción de máquina y avanza por cada instrucción, una después de otra.

Al llegar ha este punto no esperamos que tenga mucho sentido el código de máquina.

Page 18: Debug PaulinaChacon

Para iniciar.

Teclee el comando DEBUG y presione Enter.

Cuando DEBUG este cargado por completo, despliega su indicador (-).

Introducir instrucciones de programa.

Para introducir el programa directamente en memoria, solo teclee la parte del lenguaje máquina pero no el código simbólico o la explicación.

Teclee el siguiente comando E (Enter) con los espacios en blanco que se indican.

E CS:100 B8 23 01 05 25 00

CS:100 indica la dirección de memoria inicial donde se almacenaran los datos -100H (256) bytes siguiendo al inicio del segmento de código.

El comando E hace que DEBUG cada par de dígitos hexadecimales en un byte de memoria, desde CS:100 hasta CS:105.

Page 19: Debug PaulinaChacon

El siguiente comando E almacena 6 bytes, empezando en CS:106 a 107, 108, 109, 10A y 10B:

E CS:106 8B D8 03 D8 8B CB

El ultimo comando E almacena 5 bytes, empezando en CS:10C a 10D, 10E, 10F y 110:

E CS:10C 2B C8 2B C0 90

Si teclea algún comando de manera incorrecta, solo repítalo con los valores correctos.

Page 20: Debug PaulinaChacon

Rastreo de la instrucción de máquina.Formato hexadecimal

Comandos

Registros de banderas

Registro IP

Regresar

Page 21: Debug PaulinaChacon

Ejecución de instrucción de programa.

Es algo sencillo ejecutar las instrucciones anteriores, una a la vez.

Los comandos DEBUG que nos conciernen aquí son R (registro) y T (rastreo).

Para ver los contenidos iniciales de los registros y las banderas. Teclee el comando R. DEBUG muestra el contenido de los registros en forma hexadecimal.

El registro IP muestra IP=0100, indicando que la ejecución de la instrucción inicia 100H bytes después del inicio del segmento del código.

En el registro de las banderas muestra la siguiente configuración:

NV UP EI PL NZ NA PO NC

Esta configuración significa: no desbordamiento, dirección hacia arriba/abajo, interrupción habilitada, signo positivo, no cero, no acarreo auxiliar, paridad impar y no acarreo.

Ver figura.

Page 22: Debug PaulinaChacon

El comando R también muestra el desplazamiento 0100H la primera instrucción que es ejecutada. Note que en la figura el registro CS contiene 21C1. Ya que es seguro que su dirección de segmento CS, difiera de esta, la mostramos como xxxx para las instrucciones:

xxxx:0100 B82301 MOV AX,0123

• xxxx indica el inicio del segmento del código como xxxx[0]. El valor xxxx:0100 significa desplazarse 100H bytes después de la dirección del segmento CS xxxx[0].

• B82301 es el código de máquina que usted introdujo en CS:100.

• MOV AX,0123 es la instrucción simbólica en ensamblador para el código máquina. Esta instrucción significa, en realidad, mover el valor inmediato 0123H al registro AX.

En este momento, la instrucción MOV no ha sido ejecutada. Para ese propósito se teclea T, luego Enter. El código de maquina es B8 (mover al registro AX) seguido por 2301. la operación mueve el 23 a la mitad baja (AL) del registro AX y el 01 a la mitad alta (AH) del registro AX:

AH AL

AX 01 23

Page 23: Debug PaulinaChacon

DEBUG muestra los resultados en los registros. El contenido del registro IP es 0103H, que indica la ubicación del desplazamiento en el segmento del código de la siguiente instrucción que será ejecutada a saber:

xxxx:0103 052500 ADD AX,0025

Para ejecutar esta instrucción, introduzca otra T. la instrucción ADD suma 25H a la mitad baja del registro AX y 00H a la mitad alta, en realidad suma 0025H al AX. Ahora AX contiene 0148H y el IP contiene 016H para la siguiente instrucción que se ejecutara:

xxxx:0106 8BD8 MOV BX,AX.

Teclee T. la instrucción MOV mueve el contenido del registro AX a BX. Después de mover BX contiene 0148H AX aun contiene 0148H ya que MOV copia en el lugar de mover los datos de esa localidad a otra.

Ahora teclee T hasta pasar por el resto de las instrucciones. La instrucción ADD suma el contenido de AX a BX, dando 0290H en BX. Después el programa mueve el contenido de BX a CX, resta a AX de CX y resta AX de el mismo. Después de la ultima operación la bandera de cero se cambia de NZ a ZR para indicar que el resultado de la ultima operación fue cero.

A continuacion se muetra todos los pasos.

Page 24: Debug PaulinaChacon
Page 25: Debug PaulinaChacon

Mostrar el contenido de memoriaPara mostrar la ultima instrucción NOP presione T, pero esta instrucción no realiza cosa alguna.

En lugar de eso para ver el programa en lenguaje de máquina en el segmento del código requiere el siguiente despliegue:

D CS:100

DEBUG muestra 16 bytes de datos en cada línea. A la derecha esta la representación ASCII de cada byte.

La primera línea del despliegue inicia en el desplazamiento 100H del segmento del código y representa el contenido de CS:100 hasta CS:10F.

La segunda línea representa el contenido CS:110 hasta CS:11F.

Page 26: Debug PaulinaChacon

Corregir una entrada.

Si se introduce un valor erróneo en el segmento de datos o en el segmento de código, reintroducir el comando E para corregirlo. También se reanuda la ejecución en la primera instrucción indicando el registro IP con 0100. se teclea el comando R seguido por el registro designado, esto es, R IP [Enter]. DEBUG muestra el contenido de IP y espera por una entrada. Se teclea el valor 0100, Enter, después se teclea R.

DEBUG muestra los registros, banderas y la primera instrucción que será ejecutada. Ya se puede usar T para volver a rastrear las instrucciones paso a paso.

Page 27: Debug PaulinaChacon

Introducir un programa simbólico en ensamblador.

El ejercicio de programa fue en formato de lenguaje máquina, también puede utilizar DEBUG para ingresar instrucciones simbólicas en lenguaje ensamblador.

Ahora examinaremos como introducir enunciados en lenguaje ensamblador.

El comando A.El comando A.

A (ensamblar) le dice a DEBUG que acepte instrucciones simbólicas en ensamblador y las convierte en lenguaje maquina. Inicialice la dirección de inicio en el segmento de código con desplazamiento 100H para sus instrucciones como:

A 100 (Enter)

DEBUG muestra el valor del segmento de código y el desplazamiento como xxxx:0100

Page 28: Debug PaulinaChacon

A continuación se teclea cada una e las siguientes instrucciones seguido de un Enter.

MOV AL,25

MOV BL,32

ADD AL,BL

NOP

DEBUG muestra lo siguiente:

Puede ver que DEBUG ha terminado la localidad de inicio de cada instrucción. Pero antes de ejecutar el programa usemos el comando U (desensamblar) de DEBUG para examinar el lenguaje de máquina generado.

Page 29: Debug PaulinaChacon

El comando UEl comando U

Muestra el código de máquina para sus instrucciones en lenguaje ensamblador. Se puede usar este comando para indicarle a DEBUG las localidades de la primera y ultima instrucción que quiere ver, en este caso, 100H y 106H. Teclee

U 100,106 (Enter)

Y la pantalla muestra:

Ahora rastree le ejecución del programa, el código de máquina es lo que realmente se ejecuta. Introducir R para desplegar los registros y la primera instrucción , después T sucesivamente para rastrear las instrucciones subsecuentes. Cuando se llega a NOP se puede continuar con la siguiente instrucción si no presionar Q para salir.

Page 30: Debug PaulinaChacon

La instrucción INTA continuación se muestra como accesar el DOS y el BIOS para enviar información acerca del sistema, por el cual se utiliza la instrucción INT (interrupción) la cual sale de un programa, ingresa una rutina del DOS o de BIOS, realiza la función solicitada y regresa a su programa.

Usaremos el comando P (proceder) de DEBUG para ejecutar toda la rutina de interrupción.

Obtener el numero de versión del DOS.Obtener el numero de versión del DOS.

A veces es necesario saber cual es la versión del DOS que la computadora esta corriendo.

La instrucción que entrega el numero de versión es INT 21H del DOS, función 30H; esto es, cargue 30H en el registro AH y solicite INT 21H.

Ingrese A 100 de DEBUG y las siguientes instrucciones en ensamblador:

MOV AH,30

INT 21

NOP (Enter adicional)

Page 31: Debug PaulinaChacon

Para rastrear la ejecución de las instrucciones primero ingresar R para ver los registros y T para rastrear MOV. En lugar de rastrear la instrucción INT, ingrese P para ejecutar toda la rutina del DOS. El proceso termina con la instrucción NOP. Ahora se ve el AL el numero principal de la versión DOS como X en DOS X.20, y en el AH el numero secundario de la versión, como 14H (o 20) en DOS X.20

Page 32: Debug PaulinaChacon

Guardar un programa desde DEBUG

Se puede guardar un programa en disco bajo dos circunstancias:

1. Para leer el programa, modificarlo y después guardarlo:

• Lea el programa bajo su nombre: DEBUG n:nombredearchivo.

• Utilice el comando D para ver el programa en lenguaje de maquina y use E para ingresar los cambios.

• Utilice el comando W (escribir) para grabar el programa revisado.

Page 33: Debug PaulinaChacon

2. Usar DEBUG para escribir un pequeño programa en lenguaje de máquina

que ahora quiera guardar:

• Solicite el programa DEBUG.

• Utilice A (ensamblar) y E (ingresar) para crear el programa.

• Ponga nombre al programa N nombredearchivo.COM la extensión del programa debe ser .COM

• Cuando termine el programa en realidad, indique a DEBUG el tamaño del

programa en bytes

• Utilice R BX para mostrar el BX, e ingrese 0 para limpiarlo

• Ahora use R CX para mostrar el registro CX

• Grabe el programa revisado: W (Enter)

Page 34: Debug PaulinaChacon

100 MOV AX,[11A]

103 ADD AX,[11C]

107 ADD AX,25

10A MOV [11E],AX

10D MOV WORD PTR [120],25

113 MOV BYTE PTR [122],30

118 NOP  

119 NOP  

11A DB 14 23

11C DB 05 00

11E DB 00 00

120 DB 00 00 00

Lenguaje ensamblador: Operador PTR

Aquí otro programa que introduce algunas características nuevas, donde se mueven y se suman datos entre las localidades de memoria y registro. Instrucciones:

Page 35: Debug PaulinaChacon

Una explicación de las instrucciones es:

100Mueve el contenido de las localidades de memoria 11AH-11BH al AX. Los

corchetes indican una dirección de memoria y no valores

103 Suma el contenido de todas las localidades de memoria 11CH-1DH al AX

107 Suma el valor inmediato 25H al AX

10A Mueve el contenido de AX a las localidades de memoria 11EH-11EF

10DMueve el valor inmediato 25H a las localidades de memoria 120h-121H. El operador WORD PTR indica a DEBUG que debe mover el 25H a una palabra

de memoria

113Mueve el valor inmediato 30H a la localidad de memoria 122H. Queremos

mover un byte y el operador BYTE PTR indica longitud.

11ADefine los valores de bytes 14H y 23H. DB (definir bytes) le permite definir

datos que sus instrucciones están referenciado.

11C, 11E y 120 Define otros valores de bytes para uso en el programa.

Se sigue el mismo procedimiento teclear A 100, después todas las instrucciones y un Enter de más. Se introduce R para mostrar el registro y la primera instrucción, después T sucesivamente. Salir de la ejecución cuando se llega a NOP en 118. teclear D 110 para mostrar los contenidos combinados de AX (233E) y de las localidades 11EH-11EF (3e23), 120H-121H (2500) y 122H (30)

Page 36: Debug PaulinaChacon

Conclusión.Conclusión.

DEBUG puede ser uno de los programas mas antiguas que hay pero todavía realiza lo que se le indica.

Como se dijo es útil para probar y depurar programas escritos en lenguaje máquina y en lenguaje ensamblador.

Se espera que lo investigado sea de gran utilidad para investigaciones futuras.

Page 37: Debug PaulinaChacon

Bibliografía.Bibliografía.

Libro:

Lenguaje ensamblador y programación para IBM PC compatibles.

Autor:

Abel Peter

Editorial:

Pearson Educación