1
Lowlevel-Coding / gcc register auf den stack pushen / vom stack popen
« am: 15. January 2010, 15:11 »
Hi, ich melde mich auch mal wieder.
Ich arbeite an ein Programm, welches Informationen über den Prozessor ausgibt. Dazu verwende ich den cpuid Befehl und nutze also inline-assembler. Um zu überprüfen, ob der cpuid Befehl überhaupt vorhanden ist, muss man ja testen ob sich das Bit 21 "umdrehen" lässt. Dazu muss man ja an die Bits des Flags-Registers kommen. Das geht ja bekanntlich über das pushf/popf Befehlspaar. Im 32 bit mode werden 32 bit auf dem stack gepusht/gepopt und im 64 bit mode eben 64 bit. Aber um jetzt an die bits zu kommen kann man sie ja z.b. mittels pop vom stack in ein register popen. Aber genau da liegt mein Problem. Wenn ich "pop %%eax;" schreibe, meckert 64 bit g++ und wenn ich "pop %%rax;" schreibe, meckert 32 bit g++. Meine Frage ist also. Gibt es eine möglichkeit dem g++ zu sagen, dass er, falls er 32 bittig ist das eax register nimmt und falls er 64 bittig ist das 64 bit register nimmt? Vielen dank!!!
bitmaster
Ich arbeite an ein Programm, welches Informationen über den Prozessor ausgibt. Dazu verwende ich den cpuid Befehl und nutze also inline-assembler. Um zu überprüfen, ob der cpuid Befehl überhaupt vorhanden ist, muss man ja testen ob sich das Bit 21 "umdrehen" lässt. Dazu muss man ja an die Bits des Flags-Registers kommen. Das geht ja bekanntlich über das pushf/popf Befehlspaar. Im 32 bit mode werden 32 bit auf dem stack gepusht/gepopt und im 64 bit mode eben 64 bit. Aber um jetzt an die bits zu kommen kann man sie ja z.b. mittels pop vom stack in ein register popen. Aber genau da liegt mein Problem. Wenn ich "pop %%eax;" schreibe, meckert 64 bit g++ und wenn ich "pop %%rax;" schreibe, meckert 32 bit g++. Meine Frage ist also. Gibt es eine möglichkeit dem g++ zu sagen, dass er, falls er 32 bittig ist das eax register nimmt und falls er 64 bittig ist das 64 bit register nimmt? Vielen dank!!!
bitmaster