S
Hallo nochmal,
ich habe noch ein seltsames Verhalten entdeckt.
Nach dem Sprung in den PMode werden die Segmentregister mit ihren Werten
aus der GDT geladen (Zeile 20 - 25)
Jedoch werden nur für DS und ES die Werte 24 eingetragen.
FS hat den Wert 0!
Wenn ich die unsinnige Zeile 24 löschen, bekommt auch FS den Wert 24.
Ab Zeile 52 lasse ich mir diese Werte anzeigen.
; Teilauschnitt
lgdt [GDT] ;GDT laden
cli ;Interrupts aus
mov eax, cr0
or ax, 1
mov cr0, eax ;In den P-Mode wechseln
; db 0eah ;JMP zu Adresse "pmode"
; dw pmode
; dw 0x8
jmp 0x8:pmode
[bits 32]
pmode:
;Selectoren setzen
mov ax, 24d
mov ds, ax
mov es, ax
mov ax, 24d
mov fs, ax
backtodos:
;Selektor für RM Segmente setzen
mov ax, 24
mov ds, ax
mov es, ax
mov eax, cr0
dec ax
mov cr0, eax ;Prozessor in den RM schalten
db 0eah
dw rmode
rmode_cs dw 0 ;JMP zu Adresse "rmode"
[bits 16]
rmode:
xor eax, eax
mov ax, fs
call PRINT
xor eax, eax
mov ax, [testzahl]
call PRINT
xor eax, eax
mov ax, cs ;Wert von Var testzahl nach AX
call PRINT ;Wert anzeigen (DOS)
sti
mov ax, 04c00h
int 21h ;Programm beenden
Hat vielleicht hier jemand eine Ahnung woran das liegen könnte?
Ich kann somit nicht verschiedene Segmentregister mit verschiedenen Deskriptoren laden.
Testsystem: Virtual PC auf Win7-64, virt. OS DOS Modus von Win98SE
Nicky