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

ikfrs5lh  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在写一个汇编程序,我希望它能够完成以下(基本)工作:

x = 100;
y = int[x]

例如,y的大小取决于x的值。
注意:我在64位Ubuntu系统上使用NASM指令集。
在汇编中,我知道数组的大小需要在文件的数据部分声明,例如:

myvariable resq 1000

问题是,我不知道该把它做多大,直到我做了一个预先的计算。我真正想要的是:

mov rax, 100
myvariable resq rax

但这是不允许的,对吗?只是在汇编中的数组访问/声明上有一些混乱。
感谢您的指点!

x7rlezfr

x7rlezfr1#

C语言的例子只适用于在堆栈上声明数组,或者使用malloc或类似的方法从堆中提取内存的情况。对于小值,使用堆栈是非常好的(而且更快):

mov rax, 100   # 100 elements
shl rax, 3     # multiply with 8, the size of an element
sub rsp, rax   # rsp now points 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 points to the return address again

相关问题