Assembly 如何在nasm中初始化数组?
我尝试初始化的是这样一个数组:Assembly 如何在nasm中初始化数组?,assembly,nasm,Assembly,Nasm,我尝试初始化的是这样一个数组: int array_int[10] = {1, 2, 3, 4}; 我的nasm代码是: array_int db 1, times 3 db 0, 2, times 3 db 0, 3, times 3 db 0, db 4, times 1Bh db 0 汇编程序仅输出: error: expression syntax error 谁能给我一些帮助吗? 谢谢大家! 鉴于您的尝试: array_int db 1, times 3 db 0, 2, tim
int array_int[10] = {1, 2, 3, 4};
我的nasm代码是:
array_int db 1, times 3 db 0, 2, times 3 db 0, 3, times 3 db 0, db 4, times 1Bh db 0
汇编程序仅输出:
error: expression syntax error
谁能给我一些帮助吗?
谢谢大家! 鉴于您的尝试:
array_int db 1, times 3 db 0, 2, times 3 db 0, ...
看起来您有一个32位的小endian架构,所以有几种方法可以做到这一点
第一个是相当冗长的:
array_int db 1, 0, 0, 0 ; a[0]
db 2, 0, 0, 0 ; a[1]
db 3, 0, 0, 0 ; a[2]
db 4, 0, 0, 0 ; a[3]
db 0, 0, 0, 0 ; a[4]
db 0, 0, 0, 0 ; a[5]
db 0, 0, 0, 0 ; a[6]
db 0, 0, 0, 0 ; a[7]
db 0, 0, 0, 0 ; a[8]
db 0, 0, 0, 0 ; a[9]
第二是认识到dd
可用于定义32位值,而无需手动计算db
布局:
array_int dd 1, 2, 3, 4, 0, 0, 0, 0, 0, 0
这不是数组吗?dword 1,2,3,4?@BlackBear closer,但不完全是这样:这将得到一个包含4个元素的数组。OP需要一个由10个元素组成的数组,其中前4个元素是预先初始化的。“int”排序意味着
dword
,不是吗?我认为数组\u int dd 1、2、3、4、0、0、0、0、0
可能会满足您的需求。如果你想使用times
,把每个times
放在新行上,Nasm可能会吃掉它。“看起来你有一个32位的big-endian架构”似乎不太可能,因为Nasm是一个x86汇编程序。对不起,@Michael,有点愚蠢,我当然是指小endian。现在修好了。