ejemplos modo protegido.pdf

Vista previa de texto
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
ej00.asm - programa hola mundo
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 ej00.asm -o ej00.com
El primer ejercicio tiene por finalidad mostrar la estructura básica
de un programa en nasm y el modo en que es cargado en memoria por el
DOS. También se explican algunos conceptos básicos, como la
segmentación en modo real y las diferencias entre un segmento de 16 y
uno de 32 bits.
En modo real (el modo en que se enciende la CPU y en el que se
mantiene cuando corre el sistema operativo DOS) se accede a la memoria
mediante segmentos y desplazamientos. El desplazamiento (u offset) es
un valor de 16 bits que se suma a la base del segmento para conocer la
memoria lineal y física (las cuales, en modo real, coinciden).
Siempre que se direcciona memoria, se hace mediante un segmento y un
offset. Para conocer cuál es la posición física de la memoria se deben
sumar la base del segmento y el offset. En modo real, la base de un
segmento es 16 veces su valor.
Por ejemplo: el segmento 0040:0037, al escribirlo de esta forma, se
hace referencia al segmento:offset (ambos en hexadecimal) que apunta a
la dirección de memoria 00437h.
Por lo cual, para acceder a cualquier posición de memoria, existen
4096 formas distintas de hacerlo ya que, por ejemplo, 4000:FFFF
será físicamente la misma posición que 4001:FFEF (físicamente ambas
direcciones serán 4FFFF, o sea, el byte número 327679 de la memoria).
El DOS es quien carga los programas .com, que son los únicos que se
utilizan en este libro. A diferencia de los archivos .exe, que poseen
un header con información para el sistema, los archivos .com son
directamente copiados a memoria y ejecutados, pero existen ciertas
reglas a conocer:
- cuando se ejecuta un archivo .com, el mismo se carga en memoria
a partir del primer segmento libre de memoria que tenga
disponible el DOS.
- se le asigna toda la memoria hasta los 640 Kbytes.
- se carga el contenido del del archivo .com a partir del offset
100h, quedando así 256 bytes para el sistema, los cuales se
denominan PSP (Program Segment Prefix).
EL PSP almacena información de la aplicación (en Internet se puede
averiguar cómo está conformado). Sin embargo, lo más importante a
saber es que en el offset 80h se encuentra un byte que indica la
cantidad de caracteres que contiene la línea de comandos, y a partir
del offset 81h se encuentra la línea de comandos.
Al cargar el .com se inicializan los registros
0, el sp en FFFCh y cs,ds,es,ss en el segmento
ip en 100. Por lo que se puede observar que el
superponen en el mismo segmento y éstos con la
ax,bx,cx,dx,bp,si,di en
de memoria libre, y el
código y los datos se
PILA. Por eso se debe
