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