Zum Inhalt springen

Real Mode

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 20. Januar 2026 um 15:05 Uhr durch imported>Y2kbug (DOS-Extender: Hauptartikel verlinkt).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Der Begriff {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value), eigentlich {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) oder eingedeutscht Real-Modus, bezeichnet eine Betriebsart der x86-Architektur, die ab dem 80286 von Intel unter diesem Namen für den ursprünglich einzigen Betriebsmodus des 8086 existiert.

Charakteristika

Im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) benutzt der Prozessor ohne weitere Maßnahmen die gleiche Methode wie der 8086/8088-Prozessor, um auf den Hauptspeicher zuzugreifen und bleibt dabei auf 1024 KiB beschränkt. Das heißt, aus Sicht des Programmierers ist er wie ein (sehr) schneller 8086 anzusprechen.

Jeder x86-Prozessor startet nach dem Reset im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value). Durch eine spezielle Variante des MOV-Befehls kann man den Prozessor in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) versetzen.

Bedeutung

Der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) ist der Standardmodus von PC DOS, das mit dem IBM Personal Computer im Jahr 1981 eingeführt wurde, und des eigenständig vertriebenen MS-DOS. Dazu kompatible Betriebssysteme werden als PC-kompatibles DOS zusammengefasst, beispielsweise DR DOS und die viel später erschienenen PTS-DOS und FreeDOS, und laufen auf IBM-PC-kompatiblen Computern. Der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) wird auch auf DOS-PCs (das sind x86-PCs, die nicht mit dem IBM PC kompatibel sind) und von nicht mit DOS kompatiblen Betriebssystemen genutzt, beispielsweise CP/M-86. Windows unterstützt den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) noch in der Version 3.0 teilweise (s. Artikel zu Windows 3.x) und wird bis 9x von DOS aus gestartet. Neuere Betriebssysteme für die PC-Plattform verwenden ihn nur noch während der Startphase, wobei praktisch alle modernen Betriebssysteme bereits zu einem sehr frühen Zeitpunkt in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) umschalten.

Zur Ausführung von {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-Betriebssystemen und der dazugehörigen historischen Software bieten sich PC-Emulatoren wie bspw. QEMU, Bochs oder 86Box an. 86Box ist in der Lage, konkrete historische Hardware originalgetreu zu emulieren, benötigt dafür aber deren proprietäre Firmware. Die Emulationssoftware DOSBox emuliert nicht nur die Hardware eines IBM-kompatiblen PCs, sondern auch gleich ein zu MS-DOS kompatibles DOS.

Fehlender Zugriffsschutz

Im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) stellt der Prozessor keinen Zugriffsschutz bereit. Das heißt, dass laufende Programme auf mindestens das ganze erste Megabyte des Arbeitsspeichers (in welchem Bereich z. B. ein PC-DOS untergebracht sein kann) und die Hardware zugreifen können – ein einzelnes abstürzendes Programm also zu einem kompletten Systemabsturz führen kann. Dies ist für (zeitgenössische) Multitasking-Betriebssysteme wie Windows NT 3.1 oder die ersten Linux-Distributionen und deren Nachfolger allerdings nicht akzeptabel.

Segmentregister

Im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) benutzt der Prozessor eine sogenannte Segment:Offset-Adressierung. Es existieren vier Segmentregister: CS ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)), DS ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)), ES ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)) und SS ({{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)); ab dem 80386 kommen noch zwei weitere Segmentregister (FS und GS) dazu. Alle Segmentregister enthalten im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) lediglich 16-Bit-Segmentadressen. Zur Errechnung der realen, linearen Adressen werden die Inhalte mit 16 multipliziert und zum Offset addiert. Da die Offset-Adresse ebenfalls auf 16 Bit begrenzt ist, ergibt sich eine 20-bittige lineare Adresse, wodurch der direkt und ohne Tricks nutzbare Adressraum auf 1024 KiB (220 Byte) beschränkt bleibt. Ab dem 80286er werden bei „Überadressierung“ und offener A20-Adressleitung noch einmal 64 KiB (minus 16 Byte) im Bereich von FFFF:0010 bis FFFF:FFFF im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) erreichbar. Dieser Speicherbereich wird auch als {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) bezeichnet.

Skriptfehler: Ein solches Modul „Vorlage:Anker“ ist nicht vorhanden. Unechter Realmodus („Unreal Mode“, „Big Real Mode“)

Die Beschränkung auf ein Megabyte Hauptspeicher war schon zu MS-DOS-Zeiten für viele Anwendungen völlig unzureichend. Es gibt aber zwei Tricks, mit denen man auch im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) die Segmentregister auf vier GiB erhöhen kann; das Arbeiten im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) jenseits von einem MiB nennt man den „{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)“. Dieser spezielle Modus gilt als undokumentiert und stellt keine eigene Betriebsart dar.

Der einfache „{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)“ wird vor allem in PC-Spielen der ersten Hälfte der 1990er-Jahre genutzt, da diese meist direkt unter dem {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-System MS-DOS ablaufen. Windows war zwar damals bereits ein {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-System, bot aber noch keine besondere Unterstützung für Computerspiele, sodass die wenigen damals existierenden Windows-3.x- oder -NT-Spiele die Rechenleistung des Computers nie voll ausschöpfen konnten.

Beide Tricks beruhen darauf, dass der Prozessor auch im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) die Schattenregister der Segmentregister für die Adressberechnung benutzt, auch wenn diese in diesem Modus grundsätzlich nicht direkt erreichbar sind. Über Umwege kann man jedoch die Schattenregister auf Werte setzen, die einen Zugriff auf Speicherbereiche jenseits der 1-MiB-Grenze erlauben, indem entweder der Segmentanfang auf eine Speicheradresse jenseits der 1-MiB-Grenze gesetzt wird, oder (wenn mindestens ein 80386-Prozessor zur Verfügung steht) die Segmentgröße wird von 64 KiB auf 4 GiB erhöht.

Der LOADALL-Trick

Auf dem 80286 und 80386 (und einigen 486er-Modellen) existiert ein undokumentierter Befehl LOADALL (286) bzw. LOADALLD (386), mit dem man alle Register der CPU mit eigenen Werten füllen kann. Dies betrifft insbesondere auch die Register, die im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) nicht verfügbar sind, womit auch die gewünschten Werte in die Segmentbeschreibungscaches geladen werden können. Auf neueren CPUs lösen diese Befehle eine „Unbekannter Opcode“-Ausnahme aus, welche dazu genutzt werden kann, den Befehl zu emulieren.

Der PM-Trick

Der PM-Trick besteht darin, in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) zu schalten, die Segmentregister inklusive Schattenregister mit den gewünschten Werten zu laden und dann wieder in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) zurückzuschalten, wobei die Werte in den Registern erhalten bleiben.

Beim 80286 kann, neben dem oben erwähnten LOADALL-Trick, nur über einen CPU-Reset unter Zuhilfenahme von Programmcode im CMOS-RAM in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) zurückgeschaltet werden<ref>Robert Collins: Protected Mode Basics. In: rcollins.org. Abgerufen am 25. Juli 2025.</ref>, wobei auch die Inhalte der Segmentdeskriptorcaches auf ihre Standardwerte zurückgesetzt werden. Damit funktioniert diese Methode nur auf 80386-Prozessoren und neuer.

DOS-Extender

Eine andere Möglichkeit, im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) den gesamten Adressraum anzusprechen, sind die DOS-Extender. Diese Spezialprogramme erlauben die Verwendung des {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-Betriebssystems MS-DOS (und kompatibles DOS) durch {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-Programme, indem sie jeweils bei Bedarf zwischen den beiden Modi umschalten: das Anwendungsprogramm selbst läuft im {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value), für DOS-Aufrufe wird jeweils in den {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) geschaltet.

DOS-Extender haben den Vorteil gegenüber dem {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value), dass sie meist auch mit Windows, zumindest mit Windows 95/98/98SE, noch kompatibel sind; derartige DOS-Programme können also meist auch direkt unter Windows gestartet werden. Der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) kann unter diesen Windows-Versionen dagegen nur durch das Starten des Rechners im „MS-DOS-Modus“ genutzt werden, die NTVDM in NT-basierenden Windows-Versionen unterstützt das nicht.

Siehe auch

Weblinks

Einzelnachweise

<references />

<templatestyles src="Erweiterte Navigationsleiste/styles legacy.css" />Vorlage:Klappleiste/Anfang

Betriebsmodi

Real ModeProtected ModeVirtual 8086 ModeSystem Management ModeLong ModeCompatibility Mode

Befehlssatzerweiterungen

x87PAENXAMD64/Intel 64 (x64) ⬝ HTTVT-x/AMD-V/VIA VT3DNow!MMXSSESSE2PadLockSSE3SSSE3SSE4SSE4aSSE5F16CAVXCLMULAES-NIFMATSXBMIMPXSGXSMEFREDAPX

Vorlage:Klappleiste/Ende