FASM:动态数组

时间:2012-01-25 16:38:51

标签: assembly fasm

如何将变量存储在数组中,该数据的大小仅在运行时才知道?如何访问此数组的元素?我觉得应该很容易,但我没有办法。

我的意思是像C中的动态数组。

4 个答案:

答案 0 :(得分:4)

也许this article about heap可以帮到你。

答案 1 :(得分:0)

您没有说明哪个操作系统,但在Windows下,VirtualAlloc是分配粗略内存块的简单方法。它返回一个指针,您可以将其加载到寄存器中并用作基址。

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

答案 2 :(得分:0)

您还可以在函数开头的堆栈上分配具有静态大小的内存:

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

它的缺点是具有静态大小(上例中为256字节)但您不必调用特定于平台的特定API(如VirtualAlloc),并且在您离开函数时将其清除(无需跟踪您分配的数据并调用VirtualFree())。

答案 3 :(得分:0)

对于WinAPI,这就像:

invoke HeapAlloc, hHeap, flags, size
mov    [pointer], eax

有关更多信息,请参见此(HeapAlloc)
https://javaee.github.io/javamail/FAQ#proxy
这(Windows中的堆)
https://docs.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-heapalloc