在程序集中声明可变大小的数组

时间:2011-12-14 11:59:56

标签: arrays assembly x86-64 nasm

我正在编写一个程序集程序,我希望能够执行(基本)跟随:

x = 100;
y = int[x]

E.g。 y的大小取决于x的值。

注意:我在64位Ubuntu系统上使用NASM指令集。

在汇编中我知道数组的大小需要在文件的数据部分声明,例如。

myvariable resq 1000

问题是,在我完成之前的计算之前,我不知道它有多大。 我真正想要的是:

mov rax, 100
myvariable resq rax

但这是不允许的?只是对汇编中的数组访问/声明有些困惑。

任何指示赞赏!

1 个答案:

答案 0 :(得分:1)

只有在堆栈上声明数组或者使用malloc或类似方法从堆中提取内存时,才能使用C示例。对于较小的值,它使用堆栈非常精细(和更快):

mov rax, 100   # 100 elemtents
shl rax, 3     # muliply with 8, the size of an element
sub rsp, rax   # rsp points now to your array

# do something with the array
mov rbx, [rsp]    # load array[0] to rbx
mov [rsp+8], rbx  # store to array[1]

add rsp, rax   # rsp point to the return address again