Frage

Ich arbeite an einem Bootloader auf einer x86-Maschine.

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

Ich weiß, dass die Segmentregister normalerweise auf 0 gesetzt sind, manchmal aber auch 0x7c0.Was ist mit den anderen Hardwareregistern?

War es hilfreich?

Lösung

Diese frühe Ausführungsumgebung ist stark durch die Implementierung definiert, d. h. durch die Implementierung Ihres speziellen BIOS.Machen Sie niemals Annahmen über den Inhalt von Registern.Sie können auf 0 initialisiert sein, sie können aber genauso gut einen Zufallswert enthalten.

von dem Betriebssystem-Entwickler-Wiki, Hier erhalte ich Informationen, wenn ich mit meinen Spielzeug-Betriebssystemen spiele

Andere Tipps

Die beste Option wäre, nichts anzunehmen.Wenn sie eine Bedeutung haben, werden Sie diese auf der anderen Seite finden, wenn Sie die Informationen benötigen, die sie liefern.

Undefiniert, glaube ich?Ich denke, es hängt vom Mainboard und der CPU ab und sollte zu Ihrem eigenen Wohl als Zufall behandelt werden.

Am sichersten ist es, undefiniert anzunehmen.

Gehen Sie immer von undefiniert aus, sonst stoßen Sie auf schlimme Probleme, wenn Sie jemals versuchen, Architekturen zu portieren.

Es gibt nichts Schöneres als die Mühe, Code zu portieren, bei dem davon ausgegangen wird, dass alles, was nicht initialisiert wurde, auf Null gesetzt wird.

Das Einzige, von dem ich weiß, dass es genau definiert ist, ist der Prozessorstatus unmittelbar nach dem Zurücksetzen.

Für die Aufzeichnung finden Sie Das In Intels Software-Entwicklerhandbuch Band 3, Kapitel 8:„PROZESSORVERWALTUNG UND INITIALISIERUNG“ in der Tabelle mit dem Titel „IA-32-Prozessorzustände nach Einschalten, Zurücksetzen oder INIT“

Sie können sie jederzeit selbst initialisieren, um mit einem bekannten Status zu beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top