Hallo!
Ich habe es bereits erfolgreich hinbekommen "normale" Task-Switches via TSS und Jump auf das Task-Gate durchzuführen.
Ich möchte aber zeitweise 8086 Code ausführen, weshalb ich den Virtual-8086-Modus brauche. Intel sagt, man schaltet in den Virual-8086-Mode, indem man das VM-Bit im EFLAG-Image des TSS für den neuen Task setzt. Dies habe ich wie folgt gemacht:
Wenn ich nun weiter unten in meinem Code den Task-Switch durchführe, bekomme ich eine "General Protection Exception".
Setze ich das VM-Bit im EFLAG-Image nicht, wird der Task ordnungsgemäß geswitcht und es kommt keine Exception.
Kann mir bitte jemand sagen, was ich falsch mache bzw. wie ich richtig in den Virtual-8086-Mode schalte?
PS: Ich bin mir 100%-ig sicher, dass die "General Protection Exception" beim Task-Switch kommt, und nicht schon irgendwo davor.
Ich habe es bereits erfolgreich hinbekommen "normale" Task-Switches via TSS und Jump auf das Task-Gate durchzuführen.
Ich möchte aber zeitweise 8086 Code ausführen, weshalb ich den Virtual-8086-Modus brauche. Intel sagt, man schaltet in den Virual-8086-Mode, indem man das VM-Bit im EFLAG-Image des TSS für den neuen Task setzt. Dies habe ich wie folgt gemacht:
Code: [Auswählen]
pushfd
pop eax
or eax, 00020000h
mov [es:36], eax ; bei es:36 befindet sich das EFLAG-Image
Wenn ich nun weiter unten in meinem Code den Task-Switch durchführe, bekomme ich eine "General Protection Exception".
Setze ich das VM-Bit im EFLAG-Image nicht, wird der Task ordnungsgemäß geswitcht und es kommt keine Exception.
Kann mir bitte jemand sagen, was ich falsch mache bzw. wie ich richtig in den Virtual-8086-Mode schalte?
PS: Ich bin mir 100%-ig sicher, dass die "General Protection Exception" beim Task-Switch kommt, und nicht schon irgendwo davor.

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert