2012-01-25 8 views
2

Как хранить переменные в массиве, размер которого известен только во время выполнения? Как я могу получить доступ к элементам этого массива? Я думаю, что это должно быть легко, но я не вижу пути.FASM: Динамический массив

Я имею в виду что-то вроде динамических массивов в С.

ответ

0

Вы не указали, какую операционную систему, но под Windows, VirtualAlloc - это простой способ выделения грубых блоков памяти. Он возвращает указатель, который вы можете загрузить в регистр и использовать в качестве базового адреса.

invoke VirtualAlloc,NULL,size,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE 
mov  [eax],something 
0

Можно также выделить память со статическим размером в стек в начале вашей функции:

proc yourFunction stdcall param1:DWORD 
local yourData[256]:BYTE 
    ;... 
endp 

Это имеет тот недостаток, имеющий статический размер (256 байт в приведенном выше примере), но вам не нужно вызывать специфичные для платформ API, такие как VirtualAlloc, и очищается, когда вы оставляете свою функцию (нет необходимости отслеживать выделенные вами данные и вызывать VirtualFree()).

+0

Или вы можете 'sub rsp, rax' зарезервировать временную переменную количества пространства стека, как вы могли бы получить из компилятора C для функции с локальным массивом переменной длины C99. –