asm trouble
Vladimir A. Reznichenko
vladimir.a.reznichenko at gmail.com
Fri May 15 18:41:45 PDT 2009
Asm trouble, again. There is a function in a programm.
void test (inout uint a, uint sh, uint b)
{
version (X86)
{asm {
mov EAX, a;
mov EBX, sh;
mov ECX, b;
push EAX; //a adress saved
//EAX = rotateLeft (a, sh) + b
push [EAX];
push EBX;
call rotateLeft;
add EAX, ECX;
pop EDX; //a adress restored
mov [EDX], EAX;
}}
}
void main ()
{
uint a = 1;
test (a, 5, 25);
writeln (a);
}
When launched the executable,got this: Error: Access Violation
What's intresting, if i change asm code to
(save a address in the stack removed, forcing register values after the call instraction), it works just fine
...
call rotateLeft;
//force registers values
mov EDX, a;
mov ECX, b;
..
So the question is why the call instruction drops register values?
It have to save registers state and restore it after the rotateLeft finished (EAX of course will store a function call result).
More information about the Digitalmars-d
mailing list