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