2010-07-18 9 views
7

Cuando una PC se inicia por primera vez, comienza a ejecutarse en la dirección física 0xffff0. Esta dirección contiene una instrucción jmp para el BIOS.0xffff0 y la BIOS

Ahora, para mi pregunta, siempre asumo que las direcciones físicas están mapeadas en la memoria RAM. Si la RAM inicialmente contiene valores basura, ¿qué coloca exactamente la instrucción jmp en 0xffff0? ¿La instrucción jmp es siempre la misma o es diferente para diferentes BIOS? ¿0xffff0 se correlaciona desde RAM a BIOS entonces (lo que significa que es "mapeado duro")?

Respuesta

19

Los mejores 64kB están asociados a la ROM del BIOS, no a la RAM.

+0

Perfecto, gracias! –

5

Eche un vistazo a PC boot sequence. Como Ignacio ya respondió, está "mapeado" a la memoria de solo lectura del BIOS.

3

En realidad, es un poco más complejo que eso. En primer lugar, en cualquier procesador desde el 386, en realidad comienza en fffffff0 (es decir, 16 bytes por debajo de la parte superior del espacio de direcciones de 32 bits). Hasta que el procesador ejecute por primera vez una instrucción de salto lejano, realiza una asignación especial para hacer visible todo el espacio de direcciones de 32 bits aunque se esté ejecutando en modo real. Después de que se ejecuta un salto lejano, comienza la operación de modo real "normal".

En cualquier caso, en el lado del hardware, normalmente tiene una ROM (Flash) asignada a esa ubicación, por lo que cuando comienza a ejecutarse, está ejecutando el código en la ROM. Sin embargo, para empezar, lo que se ejecuta no es BIOS en realidad: es solo código para descomprimir el BIOS real de la ROM en RAM, y luego volver a mapear esa RAM en el rango de direcciones del BIOS.

4

Salida este manual Intel:

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

Ir a la página 9-6, y en las páginas siguientes, se describen todas ellas la puesta en marcha inicial del modo de la CPU. La primera instrucción extraída es de ffffff00 (que cableada a la BIOS ROM):

The first instruction that is fetched and executed following a hardware reset is 
located at physical address FFFFFFF0H. This address is 16 bytes below the 
processor’s uppermost physical address. The EPROM containing the software- 
initialization code must be located at this address. 

Y recordando en esta etapa todavía se encuentra en modo real:

The CS register has two parts: the visible segment selector part and the 
hidden base address part. In real-address mode, the base address is normally 
formed by shifting the 16-bit segment selector value 4 bits to the left to produce a 
20-bit base address. However, during a hardware reset, the segment selector in the 
CS register is loaded with F000H and the base address is loaded with FFFF0000H. The 
starting address is thus formed by adding the base address to the value in the EIP 
register (that is, FFFF0000 + FFF0H = FFFFFFF0H). 

Y luego mirar más lejos, en la figura 9- 3, es la ubicación de la memoria de 64 K - de ffffffff a ffff0000 e indicó que hay EPROM, o BIOS del sistema, y ​​por lo tanto no RAM.

Cuestiones relacionadas