Autor Thema: Im Real Mode auf das EFlags-Register zugreifen  (Gelesen 6970 mal)

BlackSun1102

  • Beiträge: 44
    • Profil anzeigen
Gespeichert
« 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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #1 am: 01. May 2006, 18:16 »
Zitat von: BlackSun1102
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
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. May 2006, 18:20 »
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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #3 am: 01. May 2006, 18:26 »
Zitat von: nooooooooos
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
In the Future everyone will need OS-64!!!

BlackSun1102

  • Beiträge: 44
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 01. May 2006, 18:26 »
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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #5 am: 01. May 2006, 18:30 »
Zitat von: BlackSun1102
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
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 01. May 2006, 18:31 »
Ne aber pushfd ist ein PM-Befehl und funktioniert meines Wissens nicht im RM.

Im PM ginge bitmasters variante natürlich schon.

BlackSun1102

  • Beiträge: 44
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 01. May 2006, 18:33 »
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

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #8 am: 01. May 2006, 18:34 »
Zitat von: nooooooooos
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
In the Future everyone will need OS-64!!!

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #9 am: 01. May 2006, 18:35 »
Zitat von: BlackSun1102
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
In the Future everyone will need OS-64!!!

BlackSun1102

  • Beiträge: 44
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 01. May 2006, 18:35 »
Jupp, ich habs grad Probiert... Es tut!
Danke :!:

Gruß Chris

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 01. May 2006, 18:37 »
PUSHFD geht natürlich auch im Realmode! Da wird dann vom Assembler einfach ein OperandSize Prefix vor den Opcode von PUSHF gehauen ;)
Agieren statt Konsumieren!

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #12 am: 01. May 2006, 18:50 »
Zitat von: n3Ro
PUSHFD geht natürlich auch im Realmode! Da wird dann vom Assembler einfach ein OperandSize Prefix vor den Opcode von PUSHF gehauen ;)
ganz genau
In the Future everyone will need OS-64!!!

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 02. May 2006, 01:00 »
mov eax,cr0
;Flags in eax nach belieben verändern
mov cr0,eax


:P
db 0x55AA

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 02. May 2006, 11:19 »
es war nach den flags, nicht nach cr0 gefragt :P
Dieser Text wird unter jedem Beitrag angezeigt.

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 02. May 2006, 18:06 »
OK, ich hab da schrecklich was verwechselt.  :oops:
db 0x55AA

 

Einloggen