WikiDer > Echte Mode

Real mode

echte Mode ist der Zustand von a Prozessor des x86Architektur, in der die ursprüngliche de 8086 simuliert wird.

Tatsächlich läuft ein 8086 immer im Realmodus. Der Begriff 'Realmodus' wurde erst mit der Einführung des 80286, weil das auch in Sicherheitsmodus könnte funktionieren.

Adressierung durch den 8086

Der 8086 hat 20 Adressleitungen und im Real Mode kann 1 MiB Speicher adressiert werden. Das registriert sind jedoch nur 16 Bit groß. Zu Erinnerung Adresse werden zwei 16-Bit-Werte verkettet: Segment und Versatz. Der erste dieser Werte ist in a Segmentregister. Dieser Wert wird um 4 Bit verschoben, wonach der Offset hinzugefügt wird.

Diese Architektur ermöglicht es, ein Programm an einer beliebigen Stelle im Speicher zu platzieren, vorausgesetzt, es ist mehrere von 16. Es bleibt nur noch sicherzustellen, dass die Segmentregister den richtigen Wert haben.

Adressierung durch den 80286

Der 80286 hat 24 Adressleitungen und kann somit 16 MiB adressieren. Die 15 MiB zusätzlicher Speicher waren erweiterter Speicher erwähnt. Im Real-Modus ist dieser Adressraum nicht zugänglich, daher Sicherheitsmodus notwendig geworden. Im Realmodus ist es jedoch möglich, einen kleinen Teil des Erweiterungsspeichers zu adressieren, indem ein hoher Wert in einem Segmentregister gesetzt wird. Man gelangt dann zu FFFF0 FFFF=10FFEF. EIN 8086 würde in diesem Fall rundum Anzeige, so dass 0FFEF angesprochen wird. Infolgedessen liefen einige für den 8086 erstellte Programme nicht auf dem 80286, und um dieses Problem zu lösen, wurden die meisten Computer mit einem A20 Tor, wodurch die Adresszeile 20 immer niedrig (0) wurde. Es versteht sich von selbst, dass dieses Tor im geschützten Modus deaktiviert wurde.

Segmentdeskriptoren

In Wirklichkeit ist die Bedienung der Segmentregister beim 80286 etwas komplizierter. Es gibt Segmentdeskriptoren, die (unter anderem) einen Wert von 24 Bit enthalten können. Jedes Mal, wenn ein Segmentregister im Realmodus geladen wird, wird der Inhalt um vier Bits verschoben zum Segmentdeskriptor kopiert. Bei der Adressierung des Speichers wird das Segmentregister ignoriert, stattdessen wird der Segmentdeskriptor verwendet.

Diese Konstruktion eröffnet interessante Möglichkeiten. Wenn es möglich wäre, im Segmentdeskriptor einen hohen Wert zu setzen, wäre es möglich, den gesamten Erweiterungsspeicher im Realmodus anzusprechen. Leider hat ein Programm keinen direkten Zugriff auf einen Segmentdeskriptor.

Eine Ausnahme gilt jedoch beim Starten des Prozessors. Der 8086 startet nach Empfang eines Reset-Signals bei Adresse F000:FFF0 (Segment F000, Offset FFF0), also bei FFFF0. Das ist die höchste Adresse mit 16 Byte. Der 80286 startet nach Reset bei FFFFF0, und das im Real-Mode. Dies ist möglich, da im Segmentdeskriptor derzeit ein unzulässiger Wert vorhanden ist, nämlich FF0000. Nach dem ersten normalen Sprungbefehl, der das Segmentregister CS lädt, ist der Prozessor endgültig auf den Speicherplatz des 8086 beschränkt.

Eine andere Escape-Option gilt mit der Anweisung ALLE LADEN. Dies ist eine Anleitung von provided Intel nicht dokumentiert ist und es ermöglicht, alle Register unabhängig voneinander zu laden. Der Befehl ermöglicht es, im Realmodus einen beliebigen Wert in einen Segmentdeskriptor zu setzen.