Práctica No II - Facultad de Ciencias de la Computación

Anuncio
BENEMÉRITA UNIVERSIDAD AUTÓNOMA
DE PUEBLA
FACULTAD DE CIENCIAS DE LA
COMPUTACIÓN
PRÁCTICA DE LABORATORIO No II
NOMBRE DE LA PRÁCTICA:
COMANDOS BÁSICOS DE DEBUG( PARTE II)
OBJETIVO: APRENDER A EJECUTAR INTERRUPCIONES, ASÍ COMO A
ENSAMBLAR Y DESENSAMBLAR.
DESARROLLO DE LA PRÁCTICA:
A ¿qué se denomina interrupciones?
Se denomina interrupción a una operación que suspende la ejecución de
un programa de modo que el sistema pueda realizar una acción especial.
La rutina de interrupción ejecuta y por lo regular regresa el control al
procedimiento que fue interrumpido, el cual entonces reasume su
ejecución.
¿Qué interrupciones están reservadas para el DOS?
Las interrupciones desde la 20H hasta la 3FH están reservadas para
operaciones del DOS. Algunas de estas interrupciones son:








INT 20H: Termina el programa.
INT 21H: Petición de función al DOS.
INT 22H: Dirección de terminación.
INT 23H: Dirección de Cltr + Break (para transferir el control a una rutina)
INT 24H: Manejador de error critico.
INT 25H: Lectura absoluta de disco.
INT 26H: Escritura absoluta de disco.
INT 27H: Termina pero permanece residente (reside en memoria).


INT 2FH: Interrupción de multiplexion.
INT 33H: Manejador del ratón.
¿Cuál es la función de la Interrupción 21 y con qué registros trabaja?
Lo que realiza la interrupción 21 es una petición de función al DOS. La
principal operación del DOS necesita una función en el AH (trabaja con
el registro de propósito general AX).
¿Cuál es la función de la interrupción 20?
Su función es terminar el programa. Finaliza la ejecución de un
programa .COM, restaura las direcciones para Cltr + Break y errores
críticos, limpia los bufer de registros y regresa el control al DOS. Esta
función por lo regular seria colocada en el procedimiento principal y al
salir de el, CS contendría la dirección del PSP. La terminación preferida
es por medio de la función 4CH de la INT 21H.
El comando 'G' ( Go to o ir )
Parámetros: [<=dir_origen>] <dir_destino> ( NOTA: HAY QUE INCLUIR EL '=' )
Resultados: se ejecutan instrucciones desde CS:<dir_origen> hasta CS:<ir_destino>, si
no se especifica la dirección origen, se toma como dirección origen CS:IP. Por cierto no
se les ocurra ejecutar el comando 'G' a secas, porque podéis parar en alguna instrucción
que no tiene sentido o podéis obtener un bonito cuelgue de la ventana MS-DOS o un
bloqueo del sistema, si lo estás ejecutando A PANTALLA COMPLETA; a no ser que
por casualidades del destino, DEBUG encuentre una int 20h.
Ejemplo: Voy a usar una interrupción de MS-DOS para presentar una letra por pantalla,
esta subrutina es el servicio 02h de la interrupción 21h, y pasándole como parámetro el
valor hexadecimal del carácter ASCII a.
Ejecuta con G 102 [Enter]
Otro ejemplo: Ejecuta G [Enter]
Si estas seguro que hay una int 20h en tu programa
Ejemplo insertar el código de máquina cd20H al programa anterior
El Comando 'P'
Parámetros: <=dir_origen> <NUM_instrucciones>
Resultados: es como el comando 'T' sin embargo si llamamos a una subrutina y
usáramos el comando 'T' entraríamos dentro del código de la subrutina, por lo que si
ejecutamos una interrupción de MS-DOS no sabríamos que estamos haciendo
Ejemplo:
-r
AX=0261 BX=0000 CX=0000 DX=0061 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2048 ES=2048 SS=2048 CS=2048 IP=0107 NV UP EI PL NZ NA PO NC
2048:0107 CD21 INT 21
-p
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.
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 AH,02 [Enter]
MOV DL,41 [Enter]
INT
21 [Enter]
INT
20 [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 AH,02
xxxx:0102 MOV DL,41
xxxx:0104 INT
21
xxxx:0106 INT
20
xxxx:0108
c). Examinar el lenguaje máquina generado. Usando el 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:108 NOP)
La pantalla debe mostrar columnas para la localidad, el código de máquina y el código
simbólico:
xxxx:0100
xxxx:0102
xxxx:0104
xxxx:0106
xxxx:0108
MOV AH,02
MOV DL,41
INT
21
INT
20
NOP
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.
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.
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.
Ejercicios:
1.-Hacer un programa que escriba su nombre en la pantalla
2.-Hacer un programa que escriba en pantalla su nombre y apellido, tal como se indica
JUAN
PÉREZ ; es decir que incluya un ENTER.
Descargar