ejemplos modo protegido.pdf


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


Página 1...15 16 17181991

Vista previa de texto


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

ej02.asm - programa que guarda el BIOS en un archivo
Protected Mode by Examples – 1era Edición - Octubre 2004
Autor:
Mariano Cerdeiro
<m.cerdeiro@soix.com.ar>
http://www.soix.com.ar/links/mpbyexamples.html
compilar: nasm ej02.asm -o ej02.com
Este ejercicio guarda en el archivo bios.dat la parte de BIOS del
start-up. Como es sabido, los procesadores, a partir de la 80386
comienzan a ejecutar el código que encuentran en memoria en el
segmento F000 y offset FFF0. Pero este segmento, a pesar de
encontrarse en modo real, no tiene base igual a F0000h, como se podría
suponer, sino que su base es FFFF0000. A pesar de iniciarse en
modo real, el comportamiento del segmento de código no es el normal de
modo real. La primera vez que se modifique el cs, su base será cargada
normalmente (o sea, la base será 16 veces el valor del cs), en tanto
la base del segmento de código permanecerá en FFFF0000. Ya que el
procesador comienza ejecutando esta sección de la memoria, es de
suponer que en la misma debe haber memoria ROM cuyo código inicialice
a la PC, o al menos los bytes suficientes para llevar a cabo un salto.
Es por esto que las PCs tienen 64 Kbytes de ROM a partir de la
posición de memoria física FFFF0000 y hasta FFFFFFFF.
Para copiar el BIOS a un archivo es necesario entrar a modo protegido,
donde se tendrá acceso a los 4Gb de memoria, y solamente al primer
mega. De esta forma se tendrá acceso a la ROM del BIOS. Por otro lado,
se debe guardar esta información en un archivo. Lamentablemente, el
modo protegido también tiene un defecto y es que no hay rutinas de
BIOS ni DOS para guardar un archivo en disco, por lo cual se puede
hacer un driver de disco para modo protegido (tema que excede al
libro), o bien copiar el BIOS por debajo del mega de memoria,
retornar a modo real y, una vez en modo real, grabar el archivo
mediante las llamadas al sistema convencionales de DOS.
Ahora lo que se necesita conocer es cómo se direcciona la memoria en
modo protegido, para así poder leer el BIOS que se encuentra al final.
En modo protegido, al igual que en modo real, los segmentos tienen una
base y un límite, pero además tienen otros atributos, como permisos de
acceso y otros indicadores. A diferencia del modo real, donde la base
de un segmento es el valor del selector (cs,ds,es,fs,gs,ss)
multiplicado por 16, en modo protegido la misma puede ser cualquier
valor dentro de los 4Gb. Asimismo el límite, que en modo real es de
65536 bytes, puede ser de cualquier valor entre 0 y 4 Gb. Claramente
se puede intuir que toda esta información no puede ser almacenada en
16 bits que poseen cs, ds, es, fs, gs y ss.
Segmentación en modo protegido
En modo protegido los selectores cs, ds, es, fs, gs y ss son un
puntero a una entrada de una tabla, la cual almacena información sobre
cómo es el segmento: base, límite y derechos de acceso. El formato de
los selectores en modo protegido es el siguiente:
15
3 2 1 0
+-------------+---+----+
|
Índice
|TI | PL |