Wenn ein PC zum ersten Mal hochfährt, beginnt er mit der physischen Adresse 0xffff0. Diese Adresse enthält eine JMP-Anweisung für das BIOS.
Nun zu meiner Frage: Ich nehme immer an, dass die physikalischen Adressen dem 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)?
Die oberen 64 kB oder so sind dem BIOS-ROM zugeordnet, nicht RAM.
Sehen Sie sich die PC-Startsequenz an. Wie Ignacio bereits geantwortet hat, ist es "hard-mapped" auf BIOS-Nur-Lese-Speicher.
Sehen Sie sich dieses Intel-Handbuch an:
Gehen Sie auf Seite 9-6, und die folgenden Seiten beschreiben den anfänglichen Startmodus der CPU. Der erste abgerufene Befehl stammt von ffffff00 (das fest mit dem ROM BIOS verbunden ist):
%Vor%Und zu diesem Zeitpunkt erinnern wir uns noch an realode:
%Vor%Und dann schauen Sie weiter, in Abbildung 9-3, ist die Position von 64K Speicher - von ffffffff bis ffff0000 und zeigt an, dass es EPROM oder Systembios und somit nicht RAM gibt.
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, startet der "normale" Real-Modus-Betrieb.
In jedem Fall haben Sie auf der Hardware-Seite normalerweise (Flash) ROM auf diesen Speicherort gemappt. Wenn es also ausgeführt wird, führt es Code im ROM aus. Was am Anfang ausgeführt wird, ist nicht wirklich das BIOS - es ist nur Code, um das echte BIOS aus dem ROM in RAM zu dekomprimieren, und dann dieses RAM dem BIOS-Adressbereich zuzuordnen.