ASM access to array

Heinz malagana15 at yahoo.com
Thu Feb 3 21:45:00 PST 2011


Thanks 4 the code (this goes to Matthias Pleh too):

Both codes work amazingly fine after modifying them a bit to work with DMD1.030.
This helped me a lot!
Still don't know how the asm version implicitly returns a value (no return keyword
needed). It seems that the returned value is EAX, not the variable "value". To
return "value", first the content of EAX should be moved to "value", right? (mov
value, EAX;)

I found this site: http://www.swansontec.com/sregisters.html
It helped me to resolve optimal register usage. It also details wich registers can
use offsets.

I finally ended with this ASM code:

// I have to rotate every int of an uint[3]. For some reason i can't directly
reference the array pointer so i create a local variable to the function.

void myFunct()
{
    uint* p = myarray.ptr;
    asm
    {
        mov EBX, p;

        mov EAX, [EBX + 4];
        rol EAX, 8;
        mov [EBX + 4], EAX;

        mov EAX, [EBX + 8];
        rol EAX, 16;
        mov [EBX + 8], EAX;

        mov EAX, [EBX + 12];
        rol EAX, 24;
        mov [EBX + 12], EAX;
    }
}

Hope this helps someone else.
Cheers.

Heinz


More information about the Digitalmars-d-learn mailing list