Durante las primeras prácticas utilizaremos el programa DEBUG, el cual se puede ejecutar desde la línea de comandos del DOS. Este programa permite visualizar la memoria, introducir programas en ella y rastrear su ejecución. Una característica de DEBUG es que despliega todo el código del programa y los datos en formato hexadecimal.
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
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 con DEBUG
R Mostrar el contenido de uno o mas 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
D 40:10 [ Enter ]el despliege debe empezar con algo como esto:
0040:0010 63 44En este ejemplo, los 2 bytes en la palabra del estado del equipo contienen los valores hexadecimales 63 y 44. Invierta 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-9 Número
de puertos seriales conectados = 2(binario 010)
7,6
Número de dispositivos de disco flexible = 2(donde 00 = 1, 01 =
2, 10 = 3 y 11 = 4)
5,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 monocromático)
1
1 = coprocesador matemático está presente
0
1 = unidad de disco flexible está presente
D 40:13 [ Enter ]Despliegue(depende de cada PC) :
0040:0013 .. .. .. xx xxLos 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
D FFFF:5 [Enter]El conocimiento de esta fecha puede ser útil para determinar la edad y modelo de la computadora
D FFFF:E [Enter]CODIGO HEX. MODELO
Ahora que ya sabe cómo usar el comando para desplegar inoformació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, ó
continue con la siguiente práctica
El comando A(Assemble, ensamblar) le dice a DEBUG que acepte instrucciones simbólicas en ensamblador y las convierta a lenguaje de máquina.
a). Inicialice la dirección de inicio en el segmento de código con desplazamiento 100h para sus instrucciones comoA 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]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:
MOV BL,32 [Enter]
ADD AL,BL [Enter]
NOP [Enter, Enter]xxxx:0100 MOV AL,25c). 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. Teclee :
xxxx:0102 MOV BL,32
xxxx:0104 ADD AL,BL
xxxx:0106 NOPU 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,25Ahora rastree la ejecución del programa:
xxxx:0102 B332 MOV BL,32
xxxx:0104 00D8 ADD AL,BL
xxxx:0106 90 NOP
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.
Los tres ejemplos siguientes muestran cómo accesar el DOS y el 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 (Proced, proceder) de DEBUG para ejecutar toda la rutina de interrupción.2.1.1. Cómo 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,30Para 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(proced, proceder) para ejecutar toda la rutina del DOS. El proceso termina con la instrucción NOP.
INT 21
NOP (seguido por un [enter] adicional )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.
2.1.1. Cómo obtener la fecha actual( INT 21h, función 2Ah)
El valor de la función debe ser asignado a: AH
MOV AH,2AIngrese R para mostrar los registros, T para ejecutar MOV, y P(proced) para INT, la opearción se detiene en NOP. Los registros muestran esta información:
INT 21
NOPAL : Día de la semana(0=Domingo)Presione Q, para salir.
CX : Año(en hexadecimal, por ejemplo, 07DH = 1997)
DH : Mes (01 a 12)
DL : Día del mes (01 a 31)