Está en la página 1de 10

FACULTAD REGIONAL CÓRDOBA

Guía de instalación y uso de DOSBOX y DEBUGX


para MS Windows, GNU/Linux y Android

Equipo de Cátedra
Ing. Pablo Cayuela
Ing. Norma Mascietti
Ing. Luis Oliva Sevilla

Se recomienda el uso de una máquina virtual o emulador DOSBOX que nos permite
aislarnos de la computadora y sistema operativo real que estemos corriendo, para evitar
dañarlos y para mostrar la estructura más simple y primitiva de las actuales PCs, teniendo
control directo del hardware virtual subyacente.

Instalación de DOSBOX y DEBUGX en MS Windows y GNU/Linux


Descargue DOSBOX de la versión más adecuada para su caso, sea MS Windows, Fedora,
Debian, etc. También puede descargar el código fuente completo y recompilarlo para su
sistema Linux si no se encuentra versión precompilada. Siga las instrucciones de
instalación del sitio para cada caso.

Descargue Enhanced Debug del final de la página


https://sites.google.com/site/pcdosretro/enhdebug
o con el enlace siguiente
https://sites.google.com/site/pcdosretro/enhdebug/DEBUGX.ZIP?attredirects=0
Descomprima el contenido en un directorio bajo, por ejemplo c:\debugx

Ejecute DOSBOX y dentro de él, realice el enlace lógico siguiente:


Z:\> mount c: c:\debugx
Z:\> c:
C:\> debug

Esto convierte a los contenidos del directorio real c:\debugx en el disco virtual c: del
DOSBOX. Allí podremos ejecutar debug de manera directa sin afectar la PC real.

Instalación de DOSBOX (aFreeBox) y DEBUGX en Android


Instale desde GooglePlay el programa gratis aFreeBox versión 2.1.21 publicado por
Fishstix; tiene un tamaño de 6.18 MB.
Luego de instalarlo figurará como FreeBox, que es una implementación de DOSBOX para
Android.
El programa ya tiene montado el disco emulado C:\ en el directorio
/storage/emulated/0/Download

Pag.-1-
FACULTAD REGIONAL CÓRDOBA

En la barra superior aparecerá el ícono del teclado que lo hará aparecer en pantalla para
ingresar comandos en la línea de comandos del DOS.

Descargue Enhanced Debug del final de la página


https://sites.google.com/site/pcdosretro/enhdebug
o con el enlace siguiente
https://sites.google.com/site/pcdosretro/enhdebug/DEBUGX.ZIP?attredirects=0
Descomprima el contenido en el directorio de descargas mismo, generalmente
/storage/emulated/0/Download/.

Introducción

Comandos de DOS útiles.


dir lista el contenido del directorio
dir/p lista por páginas el contenido del directorio
dir/ad lista solo los directorios que haya en el directorio
type nombrearchivo.ext
muestra el contenido de texto de un archivo
debug /? informa el método de ejecución del programa Debug
debugx /? informa el método de ejecución del programa Debugx (Enhanced Debug)

Comandos de DEBUG.
A Ensamblar instrucciones simbólicas y pasarlas a código máquina
D Mostrar el contenido de un área de memoria
E Introducir datos en memoria, iniciando en una localidad específica
Pag.-2-
FACULTAD REGIONAL CÓRDOBA
G Correr el programa ejecutable que se encuentra en memoria
N Nombrar un programa
P Proceder o ejecutar un conjunto de instrucciones relacionadas
Q Salir de la sesión o entorno 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

Verificación del equipo del sistema


Una palabra del estado del equipo en el área de datos del BIOS, ofrece una indicación
rudimentaria de los dispositivos instalados. Esta 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 del segmento y 10 para el desplazamiento desde la dirección del segmento.
Teclee lo siguiente:

D 40:10 [ Enter ]

el despliegue debe empezar con algo como esto:

0040:0010 63 44

En este ejemplo, los 2 bytes en la palabra del estado del equipo contienen los valores
hexadecimales 63 y 44. Invierta el orden de los bytes(44 63) y conviértalos a binario:

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

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

BITs DISPOSITIVO
15-14 Número de puertos paralelos para impresoras conectados = 1 (binario 01)
11-09 Número de puertos seriales conectados = 2 (binario 010)
07-06 Número de dispositivos de disco flexible = 2 (donde 00 = 1, 01 = 2, 10 = 3 y 11
= 4)
05-04 Modo inicial de video = 10 (donde 01 = 40 x 25 en color, 10 = 80 x 25 en color y
11 = 80 x 25 monocromático)
1 1 = coprocesador matemático está presente
1 = unidad de disco flexible está presente

Pag.-3-
FACULTAD REGIONAL CÓRDOBA

Verificación del tamaño de la memoria (Localidades : 413H y 414H)


D 40:13 [ Enter ]

Despliegue (depende de cada PC):


0040:0013 .. .. .. xx xx

Los primeros dos bytes mostrados en el desplazamiento 0013H son los KB de memoria en
hexadecimal, con los bytes en secuencia inversa.
Ejemplo:
HEXADECIMAL INVERSO HEXADECIMAL CORREGIDO VALOR DECIMAL(K)
00 02 02 00 512
80 02 02 80 640

Verificación del número de serie y la nota de derechos reservados


(Localidad : FE000H)
La pantalla debe mostrar un número de serie de siete dígitos seguido, en máquinas
convencionales, de una nota de derechos reservados. El número de serie se muestra como
número hexadecimal, mientras que la nota de derecho reservados es mas renonocible en el
área ASCII a la derecha. La nota de derechos reservados puede continuar pasando sobre lo
que ya está mostrado; para verla, basta con presionar D, seguida de la tecla Enter.

Verificación 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
verla teclee:
D FFFF:5 [Enter]
El conocimiento de esta fecha puede ser útil para determinar la edad y modelo de la
computadora.

Verificación de la identificación del modelo (FFFFEH)


Teclee:
D FFFF:E [Enter]
CODIGO HEX. MODELO
F8 PS/2 modelos 70 y 80
F9 PC convertible
FA PS/2 modelo 30
FB PC-XT (1986)
FC PC-AT, PC-XT 286, PS/2 modelos 50 y 60, etc.
FE PC-XT (1982), portátil (1982)
FF Primera IBM PC

Ahora que ya sabe cómo usar el comando para desplegar información, puede ver el
contenido de cualquier localidad de almacenamiento. También puede avanzar por la
memoria con sólo presionar D de forma repetida: DEBUG muestra de manera sucesiva 8
líneas, continuando a partir de la última operación D.
Para finalizar, teclee Q (quit), para salir de DEBUG, ó continúe con la siguiente práctica.

Pag.-4-
FACULTAD REGIONAL CÓRDOBA
Cómo introducir un programa simbólico
El Comando A
El comando A (Assemble, ensamblar) le dice a DEBUG que acepte instrucciones simbólicas
en ensamblador y las convierta a lenguaje de máquina.

Primeros pasos en ensamblador


a). Inicialice la dirección de inicio en el segmento de código con desplazamiento 100h para
sus instrucciones como
A 100h [Enter]
DEBUG muestra el valor del segmento de código y el desplazamiento como xxxx:0100.
b). Ingrese el siguiente programa:
MOV AL,25 [Enter]
MOV BL,32 [Enter]
ADD AL,BL [Enter]
NOP [Enter, Enter]

Nota: El segundo [Enter] de la última instrucción(NOP), indica a DEBUG que ya no hay


mas instrucciones por ingresar. Al terminar DEBUG debe mostrar lo siguiente:
xxxx:0100 MOV AL,25
xxxx:0102 MOV BL,32
xxxx:0104 ADD AL,BL
xxxx:0106 NOP

c). Examinar el lenguaje máquina generado. Uso del comando U (unassemble,


desensamblar), indicar a DEBUG las localidades de la primera y última instrucción que
quiere ver, en este caso, 100h y 106 h:
U 100,106 [Enter]
Nota: 100 indica en donde inicia el programa, y 106 indica en donde está la ultima
instrucción (xxxx:106 NOP)
La pantalla debe mostrar columnas para la localidad, el código de máquina y el código
simbólico:
xxxx:0100 B025 MOV AL,25
xxxx:0102 B332 MOV BL,32
xxxx:0104 00D8 ADD AL,BL
xxxx:0106 90 NOP
Ahora rastree la ejecución del programa:
Empiece por introducir R para desplegar los registros y la primer instrucción, y después T
de manera sucesiva para rastrear las instrucciones subsecuentes. Cuando llegue a NOP de
la localidad 106h, presione Q para salir de la ejecución.

Uso de la instrucción INT


Los tres ejemplos siguientes muestran cómo acceder al DOS y al BIOS para enviar
información acerca del sistema. Para este fin, se utiliza la instrucción INT (interrupción), la
cual sale de su programa, ingresa una rutina del DOS o de BIOS. Realiza la función
solicitada y regresa a su programa. En lugar de avanzar un solo paso, usaremos el
comando P (Proceed, proceder) de DEBUG para ejecutar toda la rutina de interrupción.

Pag.-5-
FACULTAD REGIONAL CÓRDOBA
Obtener el número de versión del DOS
La instrucción que entrega el número de versión es INT 21h del DOS, función 30h; esto es,
cargue 30h en el registro AH y solicite INT 21h.
a). Ingrese el comando
A 100 (de DEBUG)
b). Ingrese las instrucciones en ensamblador:
MOV AH,30
INT 21
NOP (seguido por un [enter] adicional)

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

Cómo obtener la fecha actual (INT 21h, función 2Ah)


El valor de la función debe ser asignado a: AH
MOV AH,2A
INT 21
NOP
Ingrese R para mostrar los registros, T para ejecutar MOV, y P (proceed) para INT, la
operación se detiene en NOP. Los registros muestran esta información:
AL : Día de la semana(0=Domingo)
CX : Año(en hexadecimal, por ejemplo, 07DH = 1997)
DH : Mes (01 a 12)
DL : Día del mes (01 a 31)
Presione Q, para salir.

Pag.-6-
FACULTAD REGIONAL CÓRDOBA
Práctica
1.- Se pide sumar los valores (200 y FFF). Ingrese el siguiente código y comente a
continuación de cada línea cual es su función:

MOV AX, 200


MOV BX, FFF
ADD AX, BX
INT 20

Luego analice:
a) Antes de correr el programa, realice la operación de manera manual en papel.
b) Verifique el tamaño de las instrucciones y explique por qué hay diferencias.
c) Verifique el modo en que se almacena en memoria los números y código en relación
a la dirección de memoria. Esquematice.
d) Ejecute el programa paso a paso (comando T) y observe el registro de banderas.
Explique si hubo cambios y lo que estos indican.

2.- Modifique el código anterior para que se realice las mismas operaciones para llegar al
mismo resultado, pero obteniendo los datos de la memoria y no de los registros.
a) Observe su ejecución paso a paso anotando los cambios de la memoria y los registros

3.- Especifique y compruebe en el debug, tres o más modos de poner a cero el registro AX
haciendo uso del mismo y sin importar su contenido. Use para ello, operaciones
aritméticas y lógicas. Ejecute el código y anote los cambios ocurridos en el registro de
banderas.

4.- Escriba el código que permita sumar el contenido de una dirección y de una constante.
Luego ejecútelo paso a paso observando cada resultado.

5.- Escriba un código que permita obtener la diferencia entre dos números utilizando
registros siendo el primero menor que el segundo. Explique por que es necesario el cambio
que se produce en el registro de estado.

6.- Se pide multiplicar valores de 8 bits sin signo. Ingrese el siguiente código y comente a
continuación de cada línea cual es su función:

MOV AL,08
MOV CL,FE
MUX CL,AL
INT 20

a) Realicen el cálculo de la multiplicación manualmente sobre papel.


b) Observe lo sucedido en los diferentes registros anotando sus cambios
c) ¿Cómo piensa que se resuelve desde el hardware del uP esta operación? Intente diseñar
un esquema del mismo.

Pag.-7-
FACULTAD REGIONAL CÓRDOBA
7.- Se pide la multiplicación de valores con signo. Ingrese el siguiente código y comente a
continuación de cada línea cuál es su función:
-a
1987:0100 mov al,8
1987:0102 mov cl,-2
1987:0104 imul cl
1987:0106 int 20
1987:0108
-u 0100 0108
1987:0100 B008 MOV AL,08
1987:0102 B1FE MOV CL,FE
1987:0104 F6E9 IMUL CL es igual que decir mul ax,cl
1987:0106 CD20 INT 20
1987:0108 CC INT 3

a) Determine (anote) cuales son los resultados y que es lo que el uP ejecutó. ¿Cuáles son las
razones de lo sucedido?
b) ¿Qué pasa si se toma AX en lugar de AL?
c) ¿Qué sucedió con los bits de bandera?
d) ¿Están correctos o hay errores en ellos?

8.- Realice el mismo programa anterior con la diferencia de la siguiente instrucción


MOV CL, -1
Explique paso a paso la ejecución del uP.

9.- Realizados los ejemplos anteriores y convenientemente analizados podemos pasar a


realizar ejercicios con registros completos. Observe y anote los caso en que ocurre
desborde de los registro.

10.- Multiplique un número positivo por un número negativo


a) Con valores pequeños.
b) Con valores grandes.
c) Con dos números con signo negativo.
d) Ingrese el siguiente programa, comente la función de cada linea y obtenga el resultado
de la operación en papel. Compruebe el correcto análisis ejecutando el código.
-a 100
1987:0100 mov bx,ffff
1987:0103 mov cx,-1
1987:0106 imul cx
1987:0108 imul bx
1987:010A int 20
1987:010C
-

11.- Implementemos la división de dos números enteros.


El microcódigo también permite operaciones de División a través de dos instrucciones:
DIV que divide dos valores sin signo.
IDIV que divide dos valores con signo.
Pag.-8-
FACULTAD REGIONAL CÓRDOBA
En una división de valores enteros se supone en primer lugar que el dividendo siempre
será mayor que el divisor.
Aclaraciones: Para un divisor de 8 bits el dividendo será de 16 bits, por lo tanto el
dividendo lo ubicaremos en AX (16 bits) y el divisor en CL (8bits)
El programa es:
-a
1987:0100 mov ax,8
1987:0103 mov cl,4
1987:0105 div cl Daría lo mismo escribir div ax,cl
1987:0107 int 20
1987:0109

a) Realicen un programa utilizando dos números que no sean múltiplos y analice el


registro AX.
b) Realice un programa cuyo divisor sea cero e informe que sucede y porqué.
c) Realice un programa que permita dividir los siguientes valores FFFF y 2, pero en este
caso el divisor será BX. Observe todos los registros e informe.
c) Realice un programa que permita la dividir FFFF por –1 y analice.

12.- Dado el siguiente código


-u 100 011a
1987:0100 EB11 JMP 0113
1987:0102 53 PUSH BX
1987:0103 61 DB 61
1987:0104 6C DB 6C
1987:0105 7461 JZ 0168
1987:0107 6D DB 6D
1987:0108 6F DB 6F
1987:0109 7320 JNB 012B
1987:010B 7661 JBE 016E
1987:010D 7269 JB 0178
1987:010F 61 DB 61
1987:0110 7320 JNB 0132
1987:0112 69 DB 69
1987:0113 BA0201 MOV DX,0102
1987:0116 B409 MOV AH,09
1987:0118 CD21 INT 21
1987:011A CD20 INT 20
-
a) Analice las instrucciones de salto.
b) ¿Cuál es la relación entre estas instrucciones y los registros de bandera?
c) Según su criterio: ¿cuáles son las banderas que intervienen en cada instrucción de salto?

13.- Para realizar este ejercicio vamos a utilizar una nueva instrucción que es XCHG, que
realiza el pasaje del contenido entre dos registros. No importa la manera en que se
especifiquen los registros en la instrucción. Para ello damos el siguiente ejemplo para
analizar:

C:\>debug
Pag.-9-
FACULTAD REGIONAL CÓRDOBA
-a 100
1987:0100 mov ax,333
1987:0103 mov bx,222
1987:0106 xchg bx,ax
1987:0107 int 20
1987:0109

Pag.-10-

También podría gustarte