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。现在修好了。