Sei sulla pagina 1di 18

UNIVERSIDAD DE EL SALVADOR

MICROPROGRAMACION.
MIP-115
CICLO I-2006

Gua de Laboratorio No. 2 DEBUG


Por que el nombre Debug? Bueno, como ya habrn odo hablar, una de las
primeras computadoras electrnicas fue la llamada ENIAC (Electronics
Numerics Integrator and Calculator), la cual fue utilizada en 1945 por los
Britnicos y los Norteamericanos para realizar clculos balsticas en campo
abierto (en la segunda guerra mundial). Este era una computadora diseada
con tubos al vaci, y debido a que Expedia mucho calor, esta atraa una gran
cantidad de insectos. Pues bien, la traduccin de insecto al ingles es Bug. Pues
debido a estos insectos, eventualmente ocurran cortocircuitos por lo que era
necesario correr y reemplazar el tubo o el elemento en cuestin daado. De ah
el termino Debug, el cual literalmente significa remover o quitar insectos. Es
por ello que aun en nuestro tiempo se emplea el termino debug que es para
encontrar y remover errores de un programa.
Debug es una utilidad de MS-DOS que nos facilita la depuracin y el
ensamble de programas pequeos, auxilindonos de las distintas funciones
que posee, las cuales son:
Ejecucin de un programa paso a paso
Lectura y/o modificacin de registros y banderas
Desensamble de cdigo
Modificacin de cdigo
A pesar de ser un programa con bastantes limitaciones para programar en
assembler, su facilidad de uso lo convierte en un buen candidato para los
primeros pasos de programacin en assembler. En esta prctica usted
aprender a escribir pequeos programas y poder depurarlos.
El primer paso es entrar al sistema operativo MS-DOS, desde el cual
accederemos la herramienta DEBUG, mediante su lnea de comandos.
Una vez estamos en el smbolo del sistema, escribimos Debug y presionamos
la tecla enter, tal como se muestra a continuacin:

JVASQUEZ. 1

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Una vez aparece el guin de la izquierda nos es posible escribir a


continuacin de este los comandos de Debug.

JVASQUEZ. 2

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Para ver la lista de comandos que Debug posee, basta que una vez hayamos
entrado, digitemos el carcter de interrogacin ? y presionemos la tecla
enter, dando la lista de los comandos disponibles.

Vamos a ver a continuacin para que sirve cada uno de ellos, as como un
ejemplo de su uso.

JVASQUEZ. 3

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Listado de comandos de DEBUG.


Ensamblar
A [direccin]
Este comando permite ensamblar el cdigo en ensamblador, es decir, es el
comando mediante el cual el usuario le es posible introducir los programas.
Es de agregar que este comando necesita un parmetro que es la direccin a
partir de la cual se comenzara a introducir el programa. En caso que no se le
de argumento, tal como se muestra en la figura de abajo, entonces comenzara
despus de la ultima lnea de cdigo que se haya ingresado con el comando A.

Comparar
C [Com1] L [Longitud] [Com2]
Realiza una comparacin byte a byte entre dos bloques de memoria. Se le
deben ingresar 3 parmetros, direccin de comienzo primer bloque, direccin
de final del primer bloque y direccin de comienzo segundo bloque.

JVASQUEZ. 4

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Volcar
D [Direccin Inicial] [Direccin Final]
Muestra un espacio de memoria mostrando byte a byte en formato
hexadecimal (recuerde que esta herramienta toma todos los datos en formato
hexadecimal). En el caso que no se den argumentos y sea el primer comando
de este tipo que se da en ensamblador, lo que har es volcar la memoria a
partir de la direccin XXXXh:0100h. Si ya se ha ejecutado el comando y
nuevamente se introduce sin argumentos, entonces mostrara el contenido de la
memoria a partir de la direccin donde se quedo el volcado anterior (Ver
figura), mostrndonos los 80H bytes. La otra forma de utilizar el comando, y
que es la mas comn, es dando la direccin inicial y final; por ejemplo si
queremos mostrar el contenido de la memoria desde la direccin
xxxxH:0200H hasta la xxxxH:0207H, entonces digitamos lo siguiente:
D 200 207. (o tambin D 200 L 8 ; donde L nos sirve para poder indicar la
longitud en bytes de la memoria a mostrar)

Introducir
E direccin [lista]
Este comando nos permite poder modificar el valor de una o unas
determinadas posiciones de memoria. La sintaxis que se debe seguir es
escribir E, luego la direccin a partir de la cual se desea modificar los valores
y por ultimo la lista de valores a ingresar a partir de esta direccin (Vea la
figura siguiente). En el caso que no se de una lista de valores, entonces se
mostrara el actual valor de la posicin de memoria que se digito, y despus de
un punto se espera que se introduzca el nuevo valor. En caso de no querer
modificar el valor, puede presionar Enter o escribir el mismo valor. Y en caso
JVASQUEZ. 5

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

que quiera introducir valores a las siguientes posiciones de memoria, pues


basta con presionar la barra espaciadora una vez se ha introducido el valor
anterior, o podemos retroceder presionando la tecla -. A continuacin
encontrara algunos ejemplos de su uso.

Llenar
F Direccin Inicial [Direccin final] [Valor]
Este comando llena una porcin de memoria especificada por la direccin
inicial hasta la direccin final con el valor o cadena que se haya digitada. En
caso que no se de la direccin final, entonces se llenara con la cadena los 80H
bytes a partir de la direccin inicial.

JVASQUEZ. 6

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Ir
G [=direccin][direcc.]
El nombre puede resultar confuso, pero no indica un salto, sino que ejecuta el
cdigo a partir de la direccin especificada por CS:IP, o tambin se puede
especificar la direccin a partir de la cual se desea que ejecute el cdigo,
teniendo en consideracin que esta direccin debe de estar precedida del signo
=. La segunda direccin (opcional) indicara donde quiere que se detenga su
programa. Como puede ver en la figura de abajo, se ejecuta el programa desde
la direccin CS:0100H hasta CS:0108H por lo que se detiene antes de ejecutar
la siguiente instruccin (MOV AX,4C00H)

Aritmtica Hexadecimal
H valor1 valor2
Este comando nos devuelve el resultado de sumar y restar los valores que se
han dado como parmetros.

Entrada
I puerto
Permite leer la direccin de I/O indicada, devolviendo su valor.

JVASQUEZ. 7

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Cargar
L [direccin]
Este comando trabaja en conjunto con el comando N, y su funcin en cargar
en memoria el programa especificado segn la direccin, y en caso que no se
especifique la direccin, esta se tomara a partir de la direccin 0100H.
La longitud del programa queda guardada en los registros BX:CX.
Vea el ejemplo de cmo guardar y cargar un programa utilizando DEBUG.
Mover
M [Direccin inicial] [Direccin final] [Direccin de destino]
Copia una porcin de memoria (delimitada entre las direcciones inicial y final)
en otra, la cual se especifica por medio de la direccin de destino.

Nombre
N [ruta y nombre]
Permite ingresar el nombre del programa. Trabaja en conjunto con los
comandos L y W, ya que dicho nombre lo utilizan las instrucciones antes
mencionadas.
Vea el ejemplo de cmo guardar y cargar un programa utilizando DEBUG.
Salida
O [puerto] [byte]
Permite enviar un byte a la direccin de I/O indicada.

JVASQUEZ. 8

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Continuar
P[=direccin][nmero]
Este comando nos permite ejecutar un programa paso a paso similar al
comando T, con la diferencia que salta las llamadas Call o Int. Este comando
adems nos va mostrando el estado de los registros, as como la instruccin
que se va a ejecutar.
Se puede saltar a una direccin especificada y luego ejecutar un nmero de
lneas.

Salir
Q
Comando para salir del Debug.
Registro
R [registro]
Este comando nos muestra el contenido de todos los registros, banderas y la
direccin que se va a ejecutar (CS:IP), en caso que no le demos un nombre de
un registro en particular. En caso que le demos el nombre de un registro en
particular, entonces nos mostrara su valor, as como nos permitir poder
modificarlo. En caso de no querer modificarlo, simplemente presione la tecla
Enter. Pruebe RF, RAX, RBX, etc.

JVASQUEZ. 9

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Buscar
S [direccin Inicial] [direccin Final] [Lista]
Busca una lista de valores entre dos direcciones de memoria. Estas direcciones
deben de estar dentro del mismo segmento. La lista puede ser una cadena de
caracteres o una secuencia de valores en hexadecimal. Esta instruccin
devuelve las direcciones a partir de las cuales se encuentra una coincidencia
exacta con la lista a buscar.

Seguir
T [=direccin][valor]
Este comando nos permite ejecutar un programa paso a paso similar al
comando P, con la diferencia que entra a las llamadas Call o Int. Este
comando adems nos va mostrando el estado de los registros, as como la
instruccin que se va a ejecutar.
Se puede saltar a una direccin especificada y luego ejecutar un nmero de
lneas.

JVASQUEZ. 10

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Desensamblar
U [rango]
Desensambla un rango de memoria. Se puede dar un rango, dando la direccin
inicial y final, o solamente la direccin inicial, en cuyo caso mostrara una
serie de lneas (20H bytes de memoria). En caso que no se indique ningn
valor, desensambla el programa a partir de la ltima direccin que
desensamblo.

JVASQUEZ. 11

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Escribir
W[direccin]
Escribe en el disco el archivo indicado con la funcin N a partir de la
direccin que se indica. En caso que no se indique, el programa se escribe a
partir de la direccin XXXX:0100H. La cantidad de bytes a guardar se
especifican por medio de la combinacin de los registros BX y CX, de manera
que el valor de los N bytes a almacenar ser BX:CX
Vea el ejemplo de cmo guardar y cargar un programa utilizando DEBUG.
CMO GUARDAR Y CARGAR UN PROGRAMA UTILIZANDO DEBUG
Los pasos para guardar un programa ya almacenado en la memoria son:

Introducir el programa utilizando el comando A de Debug.


Desensamblar el programa para ver la direccin inicial y final del
programa.
Obtener la longitud del programa restando la direccin final de la
direccin inicial (Usar el comando H).
Darle nombre al programa con su respectiva extensin (Comando N)
Poner la longitud del programa mediante los registros BX:CX
Ordenar a Debug que escriba el programa en el disco (Comando W).

JVASQUEZ. 12

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

El archivo ahora se puede encontrar en la carpeta donde se ha estado


trabajando.

Una vez guardado el archivo, los pasos para cargarlo son:


Proporcionar el nombre del archivo que se desea cargar (Utilizando el
comando N)
Cargarlo con el comando L (Load)

Para verificar que el programa fue cargado en memoria, se utiliza el comando


U, lo cual nos presenta el cdigo ya desensamblado.

JVASQUEZ. 13

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Banderas
Como ya sabemos, podemos ver el contenido de los registros y las banderas gracias a comando r de Debug. El
contenido de esta ser interpretado de acuerdo a la siguiente tabla:

Banderas

Activo
No activo
(BIT a
(BIT a 0)
1)
Desbordamiento: SI el resultado de una operacin con signo ha
Desborde
OV
NV
excedido la capacidad del microprocesador
Decremento
Direccin: Controla el incremento o decremento de los registros
DN
UP
ndice SI y DI en las instrucciones de cadenas.
Interrupcin: Habilita la entrada de interrupciones.
Interrupcin
EI
DI
Signo: Indica el signo de la ultima operacin aritmtica.
Cero: indica si el resultado de la ltima operacin fue o no cero.
Acarreo auxiliar: ocurre cuando en una operacin aritmtica, se
produzco un acarreo entre la parte menos significativa y la mas
significativa del resultado.
Paridad: cuenta la cantidad de unos de la ltima operacin.
Acarreo: indica un acarreo o un prstamo en la ltima operacin
aritmtica, usado tambin en operaciones de Corrimiento y como
indicador de error en ciertos programas.

No Desborde
Incremento

NG
ZR
AC

Negativo
Cero
Acarreo

PL
NZ
NA

No hubo
interrupcin
Positivo
No cero
No Acarreo

PE
CY

Par
Acarreo

PO
NC

Impar
No Acarreo

JVASQUEZ. 14

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

Ahora, ya sabiendo esto, haremos una verificacin de posiciones de memoria


y despliegue de datos importantes del sistema.
Verificacin del equipo del sistema
Explore el bloque de memoria correspondiente al segmento 40, posicin 10
(40:10). Utilice el comando D para volcar la memoria a pantalla. De este
bloque de memoria nos interesan los primeros dos bytes.

(El contenido puede variar entre una computadora y otra)


El contenido segn las posiciones de memoria es:
410 23
411 C8
Pero para poder interpretar esta informacin, es necesario invertirla, por lo que
el dato es C823

C823
1100 1000 0010 0011

Hexadecimal
Binario

Datos Obtenidos:

Bits
Dispositivos
15,14 Nmero de puertos paralelos
13,12 Reservados
11,10,9 Nmero de puertos seriales
conectados
8
Reservado

Resultado
Comentario
11
3 puertos
paralelos
00
0
100
4 puertos
seriales
0
0
JVASQUEZ. 15

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006

7,6
5,4

2,3
1
0

Nmero de unidades de disco


flexible (donde 00 = 1, 01 = 2,
10 = 3 y 11 = 4)
Modo de video:
01 = 40 * 25 a color
10 = 80 * 1225 a color
11 = 80 * 1225 monocromtico
Reservado
Indica si hay coprocesador
matemtico
Indica si hay una unidad de
disco flexible presente

00

10

80 * 1225
a color

00
1

0
Hay
coprocesador
Hay una
presente

Verificacin del tamao de la memoria (Localidades : 413H y 414H)

El contenido segn las posiciones de memoria es:


413 80
414 02
Pero para poder interpretar esta informacin, es necesario invertirla, por lo que
el dato es 0280

0280
640

Hexadecimal
decimal

Por lo tanto el tamao de la memoria es de 640K

JVASQUEZ. 16

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006
Verificacin del nmero de serie y la nota de derechos reservados(Localidad :
FE000H)

El texto de los derechos reservados es el siguiente:


Award IBM COMPATIBLE 486 BIOS
COPYRIGHT Phoenix Technologies, Ltd
Phoenix Award Bios v6.00PG 2358
Copyright 1984-2001, Award Software, Inc
FMX36LE R1.04T
Jun. 06 2001 AOpen Inc
IBM IS A TRADEMARK OF INTERNATIONAL BUSINESS MACHINES CORP

Puede observar que la informacin mostrada en pantalla consta de tres partes:


La parte izquierda muestra la direccin inicial del primer byte correspondiente
al bloque de datos central. Dicho bloque central muestra el contenido del
bloque de memoria. Por ultimo, el bloque de la derecha nos muestra el
carcter ASCII correspondiente a cada uno de los datos en hexadecimal del
bloque de datos del centro.

JVASQUEZ. 17

UNIVERSIDAD DE EL SALVADOR
MICROPROGRAMACION.
MIP-115
CICLO I-2006
Verificacin de la fecha en el ROM BIOS (FFFF5H)

La fecha de su ROM BIOS inicia en la localidad FFFF5H, registrada como


mm/dd/aa.

Para esta computadora, la fecha es 03/29/04 es decir del 29 de marzo del 2004.
El conocimiento de esta fecha puede ser til para determinar la edad y modelo
de la computadora
Verificacin de la identificacin del modelo (FFFFEH)

El conocimiento de esta fecha puede ser til para determinar la edad y modelo

CODIGO HEX. MODELO


F8
F9
FA
FB
FC
FE
FF

PS/2 modelos 70 y 80
PC convertible
PS/2 modelo 30
PC-XT (1986)
PC-AT, PC-XT modelo 286, PS/2 modelos 50 y 60, etc.
PC-XT (1982), porttil (1982)
Primera IBM PC

JVASQUEZ. 18

Potrebbero piacerti anche