2008-08-21 6 views
7

Ich arbeite an einem Bootloader auf einer x86-Maschine.Status der Register nach dem Start

Wenn das BIOS den Inhalt des MBR nach 0x7c00 kopiert und zu dieser Adresse springt, gibt es eine Standardbedeutung für den Inhalt der Register? Haben die Register Standardwerte?

Ich weiß, dass die Segmentregister normalerweise auf 0 gesetzt werden, aber manchmal 0x7c0. Was ist mit den anderen Hardware-Registern?

Antwort

8

Diese frühe Ausführungsumgebung ist sehr implementationsdefiniert, was die Implementierung Ihres speziellen BIOS bedeutet. Nimm niemals irgendwelche Vermutungen über den Inhalt von Registern vor. Sie können auf 0 initialisiert werden, sie können aber auch einen zufälligen Wert enthalten.

vom OS dev Wiki, das ist, wo ich Informationen bekomme, wenn ich mit meinem Spielzeug OS ich spiele

1

Die beste Option wäre, nichts anzunehmen. Wenn sie Bedeutung haben, werden Sie das von der anderen Seite finden, wenn Sie die Informationen benötigen, die sie zur Verfügung stellen.

1

Nicht definiert, glaube ich? Ich denke, es hängt vom Mainboard und der CPU ab und sollte für sich selbst als zufällig behandelt werden.

1

Sie können sie immer initialisieren, sich mit einem bekannten Zustand zu starten.

1

Sicherste Wette ist, undefined anzunehmen.

1

Das einzige, was ich weiß, um gut definiert zu sein, ist der Prozessorstatus unmittelbar nach dem Zurücksetzen.

Für die Aufzeichnung Sie dass in Intel's Software Developer's Manual Vol 3 Kapitel 8 finden: "PROCESSOR MANAGEMENT UND INITIALISIERUNG" in der Tabelle mit dem Titel "IA-32-Prozessor Staaten Nach Einschalten, Reset, oder INIT"

1

Nimm immer undefiniert an, sonst wirst du schlechte Probleme bekommen, wenn du jemals versuchen wirst, Architekturen zu portieren.

Es gibt nichts wie der Schmerz der Portierung Code, der davon ausgeht, dass alles nicht initialisiert auf Null gesetzt wird.