On Wednesday, 17 December 2014 at 10:35:39 UTC, Foo wrote:
Hi,
Could someone explain me, if and how it is possible to allocate a variable length array with inline assembly?
Somewhat like
----
int[] arr;
int n = 42;
asm {
    // allocate n stack space for arr
}
----
I know it is dangerous and all that, but I just want it know. ;)

It's probably something like that:

module runnable;

import std.stdio;
import std.c.stdlib;

ubyte[] newArr(size_t aLength)
{
    asm
    {
        naked;

        mov ECX, EAX;       // saves aLength in ECX

        push ECX;
        call malloc;        // .ptr =  malloc(aLength);
        mov ECX,[EAX];      // saved the .ptr of our array

mov EAX, 8; // an array is a struct with length and ptr
                            // so 8 bytes in 32 bit
call malloc; // EAX points to the first byte of the struct

        mov [EAX + 4], ECX; // .ptr
        pop ECX;
        mov [EAX], ECX;     // .length
mov EAX, [EAX]; // curretnly EAX is a ref, so need to dig...

        ret;
    }
}

try and see ;) Actually it may be wrong

Reply via email to