2010-07-18 4 views
7

Wenn ein PC zum ersten Mal hochfährt, beginnt er mit der physischen Adresse 0xffff0. Diese Adresse enthält eine JMP-Anweisung an das BIOS.0xffff0 und das BIOS

Nun zu meiner Frage nehme ich immer an, dass die physikalischen Adressen RAM zugeordnet sind. Wenn der RAM-Speicher anfänglich Garbage-Werte enthält, was genau setzt die JMP-Anweisung in 0xffff0? Ist der JMP-Befehl immer gleich oder ist er für verschiedene BIOS unterschiedlich? Wird 0xffff0 von RAM auf BIOS abgebildet (was bedeutet, dass es "hard mapped" ist)?

Antwort

19

Die oberen 64 KB oder so sind auf BIOS-ROM, nicht auf RAM zugeordnet.

+0

Perfekt, danke! –

5

Werfen Sie einen Blick auf PC boot sequence. Wie Ignacio bereits geantwortet hat, ist es im BIOS-Read-Only-Speicher "hard-mapped".

3

Eigentlich ist es ein bisschen komplexer als das. Zuallererst beginnt sie bei jedem Prozessor seit dem 386 tatsächlich bei fffffff0 (d. H. 16 Bytes kurz vor dem Anfang des 32-Bit-Adressraums). Bis der Prozessor zuerst einen Fernsprungbefehl ausführt, führt er eine spezielle Zuordnung durch, um den gesamten 32-Bit-Adressraum sichtbar zu machen, obwohl er im Realmodus ausgeführt wird. Nachdem ein Weitsprung ausgeführt wurde, beginnt der "normale" Real-Modus-Betrieb.

In jedem Fall, auf der Hardware-Seite haben Sie normalerweise (Flash) ROM auf diesen Speicherort gemappt, so, wenn es startet, wird Code im ROM ausgeführt. Was am Anfang ausgeführt wird, ist nicht wirklich das BIOS - es ist nur Code, um das echte BIOS vom ROM in den RAM zu dekomprimieren, und dann diesen RAM wieder dem BIOS-Adressbereich zuzuordnen.

4

Schauen Sie sich dieses Intele Handbuch:

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

Geht zu Seite 9-6, und nachfolgenden Seiten, alles beschreibt den anfänglichen Startmodus der CPU. Der erste Befehl geholt wird von ffffff00 (die das ROM BIOS fest verdrahtet):

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. 

Und zu diesem Zeitpunkt immer noch in Erinnerung es Realmode ist:

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

und dann weiter sehen, in Figur 9- 3, ist der Speicherort von 64K Speicher - von ffffffff zu ffff0000 und angegeben, gibt es EPROM oder System BIOS und somit nicht RAM.