在x86程序集中声明数组

时间:2015-04-09 17:59:40

标签: arrays assembly x86

我正在学习装配,我需要制作一个大型阵列。我已经看过如何声明数组,我遇到了这个。

array db 10 dup(?)

声明了一个包含10个未初始化字节的数组。我尝试了这个并尝试组装它并获得“错误:操作数1后预期的逗号”。我意识到'?'在x86中不支持,因此我将其设为常量并得到了相同的错误。我最终这样做了。

array db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

这很有效!但问题是,我需要大型数组(~100-400整数),并且它们的值并不总是已知。我可以写出400 0,但我认为必须有一个更简单的方法。那么有更好的方法来声明大型数组吗?

我在具有AT& T语法的基于Intel的Macbook Pro上使用x86_64汇编。

3 个答案:

答案 0 :(得分:7)

the GNU assembler使用AT&amp; T语法。您正在寻找的指令是.fill <count>\[, <data-size>\[, <value>\]\]。在400字节的特定情况下:

array:  .fill  400

data-size默认为1(字节)。我相信填充400字节的value默认为零。

<小时/> 如果你实际上使用的是nasm汇编程序(英特尔格式,而不是AT&amp; T),那么times指令就可以正常工作,只要你想要预定义< / em> .text.data部分中的数据。但是,如果您需要在.bss部分(nasm)中保留字节,则可以使用resb(保留字节)指令:

       setion .bss
       ...
arr1   resb  400             ; Reserve 400 bytes (uninitialized)
arr2   times 400 resb 1      ;  Same thing, using times

答案 1 :(得分:6)

您是否尝试过TIMES directive。请使用此代码声明给定大小的数组。

array TIMES 8 DB 0

这将创建一个大小为8的数组

有关详情,请参阅此link

答案 2 :(得分:1)

它实际上取决于您使用的汇编程序。我使用的是Netwide汇编程序,以下语法对我来说非常有用

arr DD 100 DUP(?);声明100个未初始化的4字节字