ejemplos modo protegido.pdf


Vista previa del archivo PDF ejemplos-modo-protegido.pdf


Página 1...23 24 25262791

Vista previa de texto


;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

ej03.asm - programa con interrupciones
Protected Mode by Examples revision 0.1 - Octubre 2004
Autor:
Mariano Cerdeiro
<m.cerdeiro@soix.com.ar>
http://www.soix.com.ar/links/mpbyexamples.html
Compilar: nasm ej03.asm -o ej03.com
Este es un programa muy simple que muestra el uso de interrupciones en
modo protegido, también muestra cómo verificar si el microprocesador
ya se encuentra en este modo, evitando que, si lo está, el sistema
operativo cierre el programa indicando un error. El programa
intercepta la interrupción 8, es decir la IRQ0, la cual pertenece al
timer. La rutina de interrupción graba, en una variable global, el
scan-code actualmente presente en el puerto 60h (el del teclado),
mientras el programa principal espera hasta que esta variable scancode sea igual a 1 (tecla escape). Antes de comenzar a programar se
debe conocer el funcionamiento de las interrupciones en modo
protegido.
Interrupciones
En modo real se sabe que cuando sucede una interrupción el
microprocesador busca, en una tabla ubicada a partir de la posición
física 0, el vector de interrupción; cada vector ocupa 4 bytes.
Para conocer dónde se encuentra el offset y el segmento a ejecutar en
el caso de una interrupción se busca el vector lejano en la posición
interrupción x 4, a partir del comienzo de la memoria, ya que cada
vector de interrupción ocupa 4 bytes.
En modo protegido el procedimiento es similar, existe una tabla
llamada IDT (Interrupt Descriptor Table). Ésta no guarda vectores de
interrupción, sino que, como su nombre lo indica, almacena
descriptores. Sin embargo, a diferencia de las anteriores dos tablas
(GDT y LDT que aún no se vieron), esta tabla tiene únicamente 256
entradas, ya que es ésta la cantidad de interrupciones del procesador.
Las entradas de la IDT pueden ser de tres tipos y únicamente del
sistema, no se puede definir un segmento de datos en la IDT. Los
tipos son:
- Interrupt Gate
- Trap Gate
- Task Gate
La primera es una interrupción normal en la cual, para ingresar, se
inhabilitan las interrupciones. Ésta es la única característica que
la diferencia de la Trap Gate. Por otro lado, la Task Gate es un
puntero a una tarea. No se han visto tareas todavía, de modo que este
tema quedará para más adelante. Sin embargo, es bueno saber que al
llegar una interrupción se puede ejecutar directamente otra tarea.
Al igual que la GDT, la IDT tiene un registro que indica tanto su base
como su tamaño; se denomina IDTR (Interrupt Descriptor Table
Register) al cual se accede, como al GDTR, mediante dos instrucciones:
- LIDT fword ptr
- SIDT fword ptr