D'ohhhh....
okay, muss ich irgendwas beachten bzgl. Register? Darf ich bestimmte Register nicht modifizieren? (also vorher dann mit push und pop wiederhierstellen) Muss z.B. in eax immer ein Zeiger auf self sein oder kann ich das Register problemlos modifiziert lassen?
Grad noch was anderes festgestellt:
also wenn ich jetzt eax gegen edx tausche bekomme ich wieder die richtigen Rückgabewerte angezeigt. Soweit so gut.
Aber ich hab eine Funktion die true zurückgibt:
Delphi-Quellcode:
function
TmpllCpuSerial.cpuidAvailiable;
register;
asm
PUSHFD
{direct access to flags no possible, only via stack}
POP EAX
{flags to EAX}
MOV EDX,EAX
{save current flags}
XOR EAX,ID_BIT
{not ID bit}
PUSH EAX
{onto stack}
POPFD
{from stack to flags, with not ID bit}
PUSHFD
{back to stack}
POP EAX
{get back to EAX}
XOR EAX,EDX
{check if ID bit affected}
JZ @exit
{no, CPUID not availavle}
MOV AL,True
{Result=True}
@exit:
end;
Da Funktioniert das mit AL. Ersetz ich AL durch
DL bekomm ich ein False zurück... Also wiso ist das hier jetzt AL und NICHT
DL?