FASM: динамический массив - PullRequest
       10

FASM: динамический массив

2 голосов
/ 25 января 2012

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

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

Ответы [ 3 ]

4 голосов
/ 25 января 2012

Может быть эта статья о куче может помочь вам.

0 голосов
/ 01 июля 2016

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

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

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

0 голосов
/ 25 января 2012

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

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