Label als Basis für einen GDT Eintrag
-
Hi,
ich habe in meinem Code ein Labeltss:
und dieses Label würde ich gerne nutzen, um die Basis in einem Deskriptor zu definieren. Das Problem ist ja nun, dass in einem Deskriptoreintrag die Basis etwas gesplittet ist nämlich auf:
1x WORD Segmentbasisadresse Bit 0-15
1x BYTE Segmentbasisadresse Bit 16-23
1x BYTE Segmentbasisadresse Bit 24-31Wie kann ich also nun das Label, welches ja eine 32-Bit Adresse repräsentiert, auf diese 3 Fragmente korrekt aufsplitten?
Danke schonmal für eure Hilfe!
SeVo
-
Falls statisch: assemblerabhaengig - im Grunde aber die gleichen Operationen wie in Fall 2.
Falls zur Laufzeit: Offset des Labels (evtl. Segmentbasis dazu) in ein allg. 32Bit register kopieren und durch shiften entsprechend aufteilen. Sehe das Problem nicht.
-
Okay,
also nehmen wir an ich lade tss in ein 32 bit register:mov eax, tss
Dann müssten sich doch jetzt in ax die bits 0-15 befinden, also das benötigte WORD.
Nach folgender Operation:shl eax, 16
müssten sich in al bit 16-23 und ah bit 24-31 befinden. Ist das korrekt soweit?
-
sevobal schrieb:
Okay,
also nehmen wir an ich lade tss in ein 32 bit register:mov eax, tss
Dann müssten sich doch jetzt in ax die bits 0-15 befinden, also das benötigte WORD.
Nach folgender Operation:shl eax, 16
müssten sich in al bit 16-23 und ah bit 24-31 befinden. Ist das korrekt soweit?
shl = falscher Befehl! al und ah sind nach shl eax, 16 mit 0 aufgefüllt.
Richtiger Befehl: rol eax, 16 !
-
okay danke euch beiden. Dann werde ich das so machen !