VLA in Assembler
btdc via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Dec 17 04:54:43 PST 2014
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
More information about the Digitalmars-d-learn
mailing list