2010-10-23 11 views
5

Cuando un 8086 o 8088 se enciende por primera vez, ¿en qué dirección comienza a ejecutarse el procesador? Sé que el Z80 comienza en 0, y el 6809 busca en FFFF una dirección para comenzar, pero a menudo me he preguntado cómo comienza el x86.¿En qué dirección comienza a ejecutarse el x86?

EDIT:

Esto es suponiendo ninguna intervención del BIOS. ES DECIR. si tuviera mi propia EEPROM para arrancar, ¿dónde debería estar ubicada en la RAM para que la máquina se inicie?

Respuesta

9

Esta es una pregunta mucho más compleja de lo que probablemente se haya dado cuenta. En el 8086, es bastante simple: se inicia en FFFF: 0000 (16 bytes antes del final de la memoria).

La parte engañosa está en el 286 o superior (es decir, cualquier cosa remotamente moderna). En estos casos, aún se inicia 16 bytes antes del final de la memoria, pero, por supuesto, con el direccionamiento de 24 bits (286) o el direccionamiento de 32 bits (386+), la dirección física es diferente. Que muchos no parecen complejos, pero realmente lo es. La complejidad surge del hecho de que el procesador comienza a ejecutarse en modo real, pero esa dirección (y todas las que están cerca) no son visibles para el procesador en modo real. Por lo tanto, inicialmente se ejecuta en un modo bastante extraño donde está en modo real desde la mayoría de las perspectivas, pero algunos de los bits altos de la dirección que parece ejecutar se ignoran y en su lugar básicamente están conectados a 1, por lo que la parte superior de la dirección física el espacio es visible para el procesador. Luego, cuando ejecuta un salto lejano, el procesador cambia silenciosamente al modo real "normal".

El BIOS se inicia en modo real, pero por lo general se ejecuta de esa manera por poco tiempo antes de configurar un entorno de modo protegido (mínimo) y cambiar al modo protegido. A partir de ahí, el BIOS ejecuta la autoprueba de encendido normal, descomprime el BIOS y lo copia en la RAM que es en realidad ubicada en FFFF: 0000, vuelve al modo real y ejecuta el código en ROM periféricas adicionales si ' re marcado para ejecutarse automáticamente (por lo general, volver al modo protegido en el proceso, pero volver al modo real cuando haya terminado). Uno de ellos normalmente será el controlador de disco duro que tendrá el código para leer automáticamente en un bloque de arranque desde un disco, y ejecutarlo para comenzar a cargar el sistema operativo y tal.

+0

Puntos de bonificación para una explicación detallada, ¡gracias! –

-1

8086 restablecer establece el contador de programa en FFFF0h.

+0

Eso está en algún lugar del área de la BIOS. A continuación, el BIOS realiza algunas inicializaciones y lee el sector de inicio (512 bytes) a 0x7C00 y salta allí. – ruslik

+0

@ruslik: la pregunta era sobre la arquitectura 8086, no la PC de IBM. Por lo tanto, el BIOS no tiene nada que ver con esto: después de todo, es perfectamente posible construir una máquina alrededor de 8086 sin usar el BIOS (como se suele entender). – Schedler

0

El (selector de código) cs registro se establece en (puntero de instrucción) y 0xffffip se establece en 0x0000.

Esto corresponde a la ubicación de memoria física 0xffff0 pero los contenidos de cs/ip son importantes ya que afectan la cantidad de memoria que puede usar sin salto lejano y también cómo se debe generar el código si no es independiente de la posición.

Básicamente, es como en los viejos 8080 días en los que tienes un fragmento de 64K en el que puedes escribir tu código. Una vez que cambias cs, todos los cambios cambian por supuesto.

Cuestiones relacionadas