Está en la página 1de 37

INSTITUTO DE ESTUDIOS SUPERIORES DE CHIAPAS

Salazar Narvez
Ing. Sistemas Computacionales

CHACN AGUIRRE PAULINA YANNETH


Asignatura: Lenguaje Ensamblador

Catedrtico:
4to A

Lic. Enrique Martnez Gutirrez

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

Introduccin.

En la siguiente presentacin se hablara del programa DEBUG que es un programa que se encarga de probar y depurar programas ejecutables desde DOS. Se hablara de sus caractersticas principales cuales son los comandos mas utilizados y su funcin, cual es su estructura, como inicializa entre otras utileras que ofrece DEBUG.

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

Caractersticas de DEBUG:
Despliega todo el cdigo 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 instruccin sobre las localidades de memoria y los registros.

Comandos de DEBUG
Los comandos que proporciona DEBUG nos permiten realizar diferentes operaciones tiles. La mayora de los comandos de DEBUG ejecutan una accin y vuelven al indicador, pero si es un comando largo, como puede ser mostrar un trozo grande de cdigo, puede detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver.

Comand o.
A D E G N P Q R T U W XA XD XM

Descripcin.
Ensamblar instrucciones simblicas pasarlas a cdigo de maquina. Mostrar el contenido de un rea de memoria. Introducir datos en memoria, iniciando en una localidad especifica. Correr el programa ejecutable encuentra en memoria. Nombrar un programa. Proceder a ejecutar un instrucciones relacionadas. Salir de la seleccin con DEBUG. Mostrar el contenido de uno o ms registros. Rastrear la ejecucin de una instruccin. Desensamblar cdigo mquina y pasarlo a cdigo simblico. Escribir o grabar un programa en disco. Asignar memoria expandida. Desasignar memoria expandida. Asignar pginas de memoria expandida. conjunto de que se y

XS

Mostrar estados de la memoria expandida.

Reglas de los comandos de DEBUG.


1. No distingue entre letras minsculas y maysculas.
2. Solo se introduce un solo espacio en donde sea necesario separar parmetros 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 mayscula, con un espacio en blanco despus de l)

DDS:200
dds:200

(comando en mayscula, sin espacio en blanco despus de l)


(comando en minsculas, sin espacio en blanco despus de l)

Note que especifica segmentos y desplazamientos con dos puntos (:). Adems, DEBUG supone que todos los nmeros estn en formato hexadecimal.

El despliegue del DEBUG


Consiste en tres partes:

1. La direccin hexadecimal del


ultimo byte de la izquierda que se despliega en la forma segmento:desplazamiento.

3. Representacin en ASCII de
los bytes que contienen caractersticas desplegables .

Direccin
xxxx:xx10 xxxx:xx20 xxxx:xx30

<----- Representacin Hexadecimal ----> xx . xx-xx . xx xx . xx-xx . xx xx . xx-xx . xx

<--ASCII-> x.x x.x x.x

2.

Representacin hexadecimal del rea desplegada.

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.

Visualizacin de las localidades de memoria.


El nico comando por el cual nos interesaremos es D (Display, mostrar), el cual lista ocho lneas de 16 bytes cada una y muestra su representacin hexadecimal y ASCCI Verificacin 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 direccin de dos partes: 40 para la direccin de segmentos y 10 para el desplazamiento desde la direccin del segmento. Teclear correctamente 40:10

Ahora agarramos la primera lnea 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 convirtalos a binario: Bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Binario:

A continuacin est una explicacin del cdigo hexadecimal.


Bits 15, 14 11, 9 7, 6 5, 4 1 0 Dispositivo Nmero de puertos paralelos para impresora conectados = 3 (binario 11) Nmero de puertos seriales conectados = 4 (binario 100) Nmero de dispositivos de disco flexible = 1 (donde 00 = 1, 01 = 2, 10 = 3 y 11 = 4) Modo inicial de video = 10 (donde 01 = 40 X 25 en color, 10 = 80 X 12 25 en color y 11 = 80 X 12 25 monocromtico. 1 = coprocesador matemtico est presente 1 = unidad de disco flexible est presente

Verificar el tamao 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

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

Hexadecimal Corregido
02 80

Decimal (k) 640

Verificacin del nmero 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 nmero de series de siete dgitos seguido , en maquinas convencionales, de una nota de derechos reservados. Para seguir checando los derechos reservado basta con poner D y un Enter.

Verificacin de la fecha en la ROM BIOS


La fecha de fabricacin 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.

Verificacin de la identidad del modelo.


Ya despus de la fecha de fabricacin del ROM BIOS est la identificacin del modelo en la localidad FFFFEH FFFF:E

Cdigo F8 F9

Modelo PS/2 Modelos 70 y 80 PC Convertible PS/2 Modelo 30 PC-XT (1986) PC-AT (1984), PC-XT Modelo 286 PS/2 Modelos 50 y 60, etc. PC-XT (1982), Porttil (1982)

Aqu algunos de los modelos.

FA FB FC FE

FF

Primera IBM PC

Ejercicio 1 de lenguaje mquina: DATOS INMEDIATOS.


A continuacin se usara DEBUG para introducir un programa directamente en memoria y rastrear su ejecucin. Este programa mostrara un sencillo cdigo de lenguaje maquina, como aparece en el almacenamiento principal y los efectos de su ejecucin. Programa Datos Inmediatos, datos definidos como parte de una instruccin. Se muestra el lenguaje mquina en formato hexadecimal y para legibilidad en cdigo simblico, junto con explicacin . Para la primera instruccin, el cdigo simblico es MOV AX,0123, lo cual mueve (o copia) el valor 0123H al registro AX.

MOV es la instruccin, el registro AX es el primer operando y el valor inmediato 0123H es el segundo operando.
Instruccin de mquina
B82301 052500 BD8 03D8 8BCB 2BC8 2BC0

Cdigo simblico
MOV AX,0123 ADD AX,0025 MOV BX,AX ADD BX,AX MOV CX,BX SUB CX,AX SBU AX,AX

Explicacin
Mover el valor 0123H a AX Sumar el valor 0025H a AX Mover el contenido de AX a BX Sumar el contenido de AX a BX Mover el contenido de BX a CX Restar el contenido de AX a CX Restar AX de AX (limpiar AX)

Las instrucciones de mquina pueden tener uno, dos o tres bytes de longitud. El primer byte es la operacin real y cualesquiera otros bytes, si estn presentes, son operandos: referencia a un valor de inmediato, un registro o una localidad de memoria.

La ejecucin del programa empieza con la primera instruccin de mquina y avanza por cada instruccin, una despus de otra.
Al llegar ha este punto no esperamos que tenga mucho sentido el cdigo de mquina.

Introducir instrucciones de programa.


Para iniciar. Teclee el comando DEBUG y presione Enter. Cuando DEBUG este cargado por completo, despliega su indicador (-). Para introducir el programa directamente en memoria, solo teclee la parte del lenguaje mquina pero no el cdigo simblico o la explicacin. 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 direccin de memoria inicial donde se almacenaran los datos -100H (256) bytes siguiendo al inicio del segmento de cdigo. El comando E hace que DEBUG cada par de dgitos hexadecimales en un byte de memoria, desde CS:100 hasta CS:105.

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 algn comando de manera incorrecta, solo reptalo con los valores correctos.

Comandos

Rastreo de la instruccin de mquina. Formato hexadecimal

Regresar
Registros de banderas

Registro IP

Ejecucin de instruccin 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 ejecucin de la instruccin inicia 100H bytes despus del inicio del segmento del cdigo.

En el registro de las banderas muestra la siguiente configuracin:


NV UP EI PL NZ NA PO NC Esta configuracin significa: no desbordamiento, direccin hacia arriba/abajo, interrupcin habilitada, signo positivo, no cero, no acarreo auxiliar, paridad impar y no acarreo.

Ver figura.

El comando R tambin muestra el desplazamiento 0100H la primera instruccin que es ejecutada. Note que en la figura el registro CS contiene 21C1. Ya que es seguro que su direccin 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 cdigo como xxxx[0]. El valor xxxx:0100 significa desplazarse 100H bytes despus de la direccin del segmento CS xxxx[0]. B82301 es el cdigo de mquina que usted introdujo en CS:100.

MOV AX,0123 es la instruccin simblica en ensamblador para el cdigo mquina. Esta instruccin significa, en realidad, mover el valor inmediato 0123H al registro AX.
En este momento, la instruccin MOV no ha sido ejecutada. Para ese propsito se teclea T, luego Enter. El cdigo de maquina es B8 (mover al registro AX) seguido por 2301. la operacin mueve el 23 a la mitad baja (AL) del registro AX y el 01 a la mitad alta (AH) del registro AX: AH AX AL

01

23

DEBUG muestra los resultados en los registros. El contenido del registro IP es 0103H, que indica la ubicacin del desplazamiento en el segmento del cdigo de la siguiente instruccin que ser ejecutada a saber: xxxx:0103 052500 ADD AX,0025 Para ejecutar esta instruccin, introduzca otra T. la instruccin 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 instruccin que se ejecutara: xxxx:0106 8BD8 MOV BX,AX. Teclee T. la instruccin MOV mueve el contenido del registro AX a BX. Despus 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 instruccin ADD suma el contenido de AX a BX, dando 0290H en BX. Despus el programa mueve el contenido de BX a CX, resta a AX de CX y resta AX de el mismo. Despus de la ultima operacin la bandera de cero se cambia de NZ a ZR para indicar que el resultado de la ultima operacin fue cero. A continuacion se muetra todos los pasos.

Mostrar el contenido de memoria


Para mostrar la ultima instruccin NOP presione T, pero esta instruccin no realiza cosa alguna. En lugar de eso para ver el programa en lenguaje de mquina en el segmento del cdigo requiere el siguiente despliegue: D CS:100

DEBUG muestra 16 bytes de datos en cada lnea. A la derecha esta la representacin ASCII de cada byte. La primera lnea del despliegue inicia en el desplazamiento 100H del segmento del cdigo y representa el contenido de CS:100 hasta CS:10F. La segunda lnea representa el contenido CS:110 hasta CS:11F.

Corregir una entrada.


Si se introduce un valor errneo en el segmento de datos o en el segmento de cdigo, reintroducir el comando E para corregirlo. Tambin se reanuda la ejecucin en la primera instruccin 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, despus se teclea R. DEBUG muestra los registros, banderas y la primera instruccin que ser ejecutada. Ya se puede usar T para volver a rastrear las instrucciones paso a paso.

Introducir un programa simblico en ensamblador.


El ejercicio de programa fue en formato de lenguaje mquina, tambin puede utilizar DEBUG para ingresar instrucciones simblicas en lenguaje ensamblador.

Ahora examinaremos como introducir enunciados en lenguaje ensamblador.

El comando A.
A (ensamblar) le dice a DEBUG que acepte instrucciones simblicas en ensamblador y las convierte en lenguaje maquina. Inicialice la direccin de inicio en el segmento de cdigo con desplazamiento 100H para sus instrucciones como: A 100 (Enter) DEBUG muestra el valor del segmento de cdigo y el desplazamiento como xxxx:0100

A continuacin 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 instruccin. Pero antes de ejecutar el programa usemos el comando U (desensamblar) de DEBUG para examinar el lenguaje de mquina generado.

El comando U
Muestra el cdigo de mquina para sus instrucciones en lenguaje ensamblador. Se puede usar este comando para indicarle a DEBUG las localidades de la primera y ultima instruccin que quiere ver, en este caso, 100H y 106H. Teclee U 100,106 (Enter) Y la pantalla muestra:

Ahora rastree le ejecucin del programa, el cdigo de mquina es lo que realmente se ejecuta. Introducir R para desplegar los registros y la primera instruccin , despus T sucesivamente para rastrear las instrucciones subsecuentes. Cuando se llega a NOP se puede continuar con la siguiente instruccin si no presionar Q para salir.

La instruccin INT
A continuacin se muestra como accesar el DOS y el BIOS para enviar informacin acerca del sistema, por el cual se utiliza la instruccin INT (interrupcin) la cual sale de un programa, ingresa una rutina del DOS o de BIOS, realiza la funcin solicitada y regresa a su programa. Usaremos el comando P (proceder) de DEBUG para ejecutar toda la rutina de interrupcin.

Obtener el numero de versin del DOS.


A veces es necesario saber cual es la versin del DOS que la computadora esta corriendo. La instruccin que entrega el numero de versin es INT 21H del DOS, funcin 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)

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

Guardar un programa desde DEBUG


Se puede guardar un programa en disco bajo dos circunstancias: 1. Para leer el programa, modificarlo y despus 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.

2.

Usar DEBUG para escribir un pequeo programa en lenguaje de mquina 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 extensin del programa debe ser .COM Cuando termine el programa en realidad, indique a DEBUG el tamao 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)

Lenguaje ensamblador: Operador PTR


Aqu otro programa que introduce algunas caractersticas nuevas, donde se mueven y se suman datos entre las localidades de memoria y registro. Instrucciones:
100 103 107 10A 10D 113 118 119 MOV ADD ADD MOV MOV MOV NOP NOP AX,[11A] AX,[11C] AX,25 [11E],AX WORD PTR [120],25 BYTE PTR [122],30

11A
11C 11E 120

DB
DB DB DB

14 23
05 00 00 00 00 00 00

Una explicacin de las instrucciones es:


100 103 107 10A 10D 113 Mueve el contenido de las localidades de memoria 11AH-11BH al AX. Los corchetes indican una direccin de memoria y no valores Suma el contenido de todas las localidades de memoria 11CH-1DH al AX Suma el valor inmediato 25H al AX Mueve el contenido de AX a las localidades de memoria 11EH-11EF

Mueve 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
Mueve el valor inmediato 30H a la localidad de memoria 122H. Queremos mover un byte y el operador BYTE PTR indica longitud.

11A
11C, 11E y 120

Define los valores de bytes 14H y 23H. DB (definir bytes) le permite definir datos que sus instrucciones estn referenciado.
Define otros valores de bytes para uso en el programa.

Se sigue el mismo procedimiento teclear A 100, despus todas las instrucciones y un Enter de ms. Se introduce R para mostrar el registro y la primera instruccin, despus T sucesivamente. Salir de la ejecucin 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)

Conclusin.

DEBUG puede ser uno de los programas mas antiguas que hay pero todava realiza lo que se le indica. Como se dijo es til para probar y depurar programas escritos en lenguaje mquina y en lenguaje ensamblador.

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

Bibliografa.
Libro: Lenguaje ensamblador y programacin para IBM PC compatibles. Autor:

Abel Peter
Editorial: Pearson Educacin

También podría gustarte