在 x86 程序集中声明数组
Declaring Arrays In x86 Assembly
我正在学习汇编,我需要制作一个大数组。我查看了如何声明数组并遇到了这个问题。
array db 10 dup(?)
其中声明了一个包含 10 个未初始化字节的数组。我尝试了这个并尝试 assemble 它并得到 "error: comma expected after operand 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 程序集。
您试过了吗TIMES directive
。使用此代码声明给定大小的数组。
array TIMES 8 DB 0
这将创建一个大小为 8 的数组
请参阅此 link 了解更多信息。
the GNU assembler. The directive you're looking for is .fill <count>\[, <data-size>\[, <value>\]\]
使用 AT&T 语法。在 400 字节的特定情况下:
array: .fill 400
data-size
默认为1
(字节)。我相信填充 400 字节的 value
默认为零。
如果您实际上使用的是 nasm
汇编程序(Intel 格式,而不是 AT&T),那么 times
指令将起作用,正如 avinash 指出的那样,只要您想要 predefine .text
或 .data
部分中的数据。但是,如果需要在.bss
段(在nasm
中)保留字节,可以使用resb
(保留字节)指令:
setion .bss
...
arr1 resb 400 ; Reserve 400 bytes (uninitialized)
arr2 times 400 resb 1 ; Same thing, using times
这实际上取决于您使用的汇编程序。我使用的是 Netwide 汇编程序,以下语法对我来说非常有效
arr DD 100 DUP(?) ;声明 100 个未初始化的 4 字节字
我正在学习汇编,我需要制作一个大数组。我查看了如何声明数组并遇到了这个问题。
array db 10 dup(?)
其中声明了一个包含 10 个未初始化字节的数组。我尝试了这个并尝试 assemble 它并得到 "error: comma expected after operand 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 程序集。
您试过了吗TIMES directive
。使用此代码声明给定大小的数组。
array TIMES 8 DB 0
这将创建一个大小为 8 的数组
请参阅此 link 了解更多信息。
the GNU assembler. The directive you're looking for is .fill <count>\[, <data-size>\[, <value>\]\]
使用 AT&T 语法。在 400 字节的特定情况下:
array: .fill 400
data-size
默认为1
(字节)。我相信填充 400 字节的 value
默认为零。
如果您实际上使用的是
nasm
汇编程序(Intel 格式,而不是 AT&T),那么 times
指令将起作用,正如 avinash 指出的那样,只要您想要 predefine .text
或 .data
部分中的数据。但是,如果需要在.bss
段(在nasm
中)保留字节,可以使用resb
(保留字节)指令:
setion .bss
...
arr1 resb 400 ; Reserve 400 bytes (uninitialized)
arr2 times 400 resb 1 ; Same thing, using times
这实际上取决于您使用的汇编程序。我使用的是 Netwide 汇编程序,以下语法对我来说非常有效
arr DD 100 DUP(?) ;声明 100 个未初始化的 4 字节字