Lowlevel
Lowlevel => OS-Design => Thema gestartet von: BlackSun1102 am 01. May 2006, 18:09
-
Hi,
Wie kann ich im Real Mode auf die EFlags-Register zugreifen?
Mit popf/pushf wird ja nur das Flags-Register in den Stack geladen...
Ich brauche aber die Bits über 16! Gibt es da einen Umweg?
Gruß Chris
-
Hi,
Wie kann ich im Real Mode auf die EFlags-Register zugreifen?
Mit popf/pushf wird ja nur das Flags-Register in den Stack geladen...
Ich brauche aber die Bits über 16! Gibt es da einen Umweg?
Gruß Chris
Das geht z.B. so:
pushfd
pop eax
;eax verändern
push eax
popfd
bitmaster
-
Hehe nein nicht ganz...
pushfd
pop AX
;eax verändern
push AX
popfd
Im RM werden dabei nur 16-Bit Flags gepuscht und er will ja 32 Bit haben.
Gruss
Noooooooooos
-
Hehe nein nicht ganz...
pushfd
pop AX
;eax verändern
push AX
popfd
Im RM werden dabei nur 16-Bit Flags gepuscht und er will ja 32 Bit haben.
Gruss
Noooooooooos
Das ist falsch. Du schiebst so dann ja das 32 Bit EFlags register auf dem Stack und willst dann aber 16 Bit vom Stack nach ax kopieren. und dann wieder ax auf dem Stack und 32 Bit vom Stack nach dem EFlags. Das wäre ja ein durcheinander. Wieso ax mit 32 Bit EFlags? Und dein Satz sagt ja ebend das er 32 Bit haben will. popf/pushf bewirken im RM 16 Bit (FLAGS) und popfd/pushfd bewirken im RM 32 Bit (EFLAGS).
bitmaster
-
Mit pop AX werden aber 16 Bit Flags geladen!?
Naja das pop EAX funktioniert wäre mir aber neu...
Wenn pushfd 32 Bit (2x 16 Bit) ablegt müsste ich das ja so laden:
pop AX
shift EAX, 10
pop AX
und je nach Reihenfolge der Flags noch:
rol EAX, 10
Oder wie jetzt?
EDIT: Wie würde pushfd/popfd im PMode bewirken?
Gruß Chris
-
Mit pop AX werden aber 16 Bit Flags geladen!?
Naja das pop EAX funktioniert wäre mir aber neu...
Wenn pushfd 32 Bit (2x 16 Bit) ablegt müsste ich das ja so laden:
pop AX
shift EAX, 10
pop AX
und je nach Reihenfolge der Flags noch:
rol EAX, 10
Oder wie jetzt?
EDIT: Wie würde pushfd/popfd im PMode bewirken?
Gruß Chris
Hä? Natürlich geht push/pop eax auch im RM. So wie ich es geschrieben habe ist es richtig:
pushfd
pop eax
or eax,1
push eax
popfd
bitmaster
EDIT: popf/popfd und pushf/pushfd ist im 32 Bit PM genau das selbe. Nur der 16 Bit Modus unterscheidet dies. Wie gesagt ist es richtig wie ich es geschrieben habe. glaube mir
bitmaster
-
Ne aber pushfd ist ein PM-Befehl und funktioniert meines Wissens nicht im RM.
Im PM ginge bitmasters variante natürlich schon.
-
Oh! Sorry bitmaster, das waren die 8 Bit Register die nicht auf den Stack gelegt werden können...
Warum verwechsle ich immer alles :oops:
Gruß Chris
-
Ne aber pushfd ist ein PM-Befehl und funktioniert meines Wissens nicht im RM.
Im PM ginge bitmasters variante natürlich schon.
Was ist loß mit euch? Wollt ihr mir nicht glauben? Dann Fragt doch PorkChicken oder die anderen Genies, die werden euch das bestätigen. Natürlich geht pushfd/popfd im RM.
bitmaster
-
Oh! Sorry bitmaster, das waren die 8 Bit Register die nicht auf den Stack gelegt werden können...
Warum verwechsle ich immer alles :oops:
Gruß Chris
Ja genau, 32 Bit geht und 16 Bit, nur 8 Bit nicht.
bitmaster
-
Jupp, ich habs grad Probiert... Es tut!
Danke :!:
Gruß Chris
-
PUSHFD geht natürlich auch im Realmode! Da wird dann vom Assembler einfach ein OperandSize Prefix vor den Opcode von PUSHF gehauen ;)
-
PUSHFD geht natürlich auch im Realmode! Da wird dann vom Assembler einfach ein OperandSize Prefix vor den Opcode von PUSHF gehauen ;)
ganz genau
-
mov eax,cr0
;Flags in eax nach belieben verändern
mov cr0,eax
:P
-
es war nach den flags, nicht nach cr0 gefragt :P
-
OK, ich hab da schrecklich was verwechselt. :oops: