Site hosted by Angelfire.com: Build your free website today!

Tec Virtual

Instituto Tecnológico de Villahermosa
Villahermosa, Tabasco, Mex.

Prácticas de Laboratorio

Lenguaje Ensamblador
Prof. L.I. José Juan Ulín Ricárdez



 
 

DEBUG

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.

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

Practica Num. 1  Usando el comando D, para mostrar el contenido de la memoria
 

1.1. 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 despliege 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 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
 

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

Teclee:
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
 

1.3. 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.
 

1.4.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
 

1.5. 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 modelo 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 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
 


Practica Num. 2  Como introducir un programa simbólico en ensamblador

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.

2.1. Mi 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. Teclee :
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.

2.1. Uso de la instrucción INT

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,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(proced, 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.

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,2A
INT       21
NOP
Ingrese 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:
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.