2010-07-18 21 views
7

Lorsqu'un ordinateur démarre pour la première, il commence à exécuter à l'adresse physique 0xFFFF0. Cette adresse contient une instruction jmp pour le BIOS.0xFFFF0 et le BIOS

Maintenant, pour ma question, je suppose toujours les adresses physiques sont mis en correspondance avec la RAM. Si la RAM contient initialement des valeurs parasites, qu'est-ce qui place exactement l'instruction jmp dans 0xffff0? L'instruction jmp est-elle toujours la même ou est-elle différente pour les différents BIOS? Est-ce que 0xffff0 mappe de la RAM au BIOS (c'est-à-dire qu'il est "mappé")?

Répondre

19

Le top 64K et donc sont mises en correspondance dans le BIOS ROM, RAM non.

+0

Parfait, merci! –

5

Jetez un oeil à PC boot sequence. Comme Ignacio a déjà répondu, il est "mappé" à la mémoire du BIOS en lecture seule.

3

En fait, il est un peu plus complexe que cela. Tout d'abord, sur n'importe quel processeur depuis le 386, il commence réellement à fffffff0 (c'est-à-dire, 16 octets en-deçà du haut de l'espace d'adressage de 32 bits). Jusqu'à ce que le processeur exécute d'abord une instruction de saut éloigné, il effectue un mappage spécial pour rendre visible l'intégralité de l'espace d'adressage 32 bits même s'il s'exécute en mode réel. Après un saut lointain est exécuté, il commence le fonctionnement en mode réel "normal".

En tout cas, du côté matériel que vous avez normalement (Flash) ROM mappé à cet endroit, alors quand il commence à exécuter, il est l'exécution du code dans la ROM. Ce qui est exécuté pour commencer n'est pas vraiment le BIOS - c'est juste du code pour décompresser le vrai BIOS de la ROM en RAM, puis mapper cette RAM vers la plage d'adresses du BIOS.

4

Vérifiez ce manuel 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

Aller à la page 9-6, et les pages suivantes, tout décrire le mode de démarrage initial de la CPU. La première instruction extraite est de ffffff00 (qui câblé au 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. 

Et se rappeler à ce stade, il est encore en realmode:

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). 

Et puis regarde plus loin, dans la figure 9- 3, est l'emplacement de 64 Ko de mémoire - de ffffffff à ffff0000 et indiqué qu'il y a EPROM, ou bios du système, et donc pas de RAM.