CMi*_*lby 6 arrays x86 assembly
我正在学习装配,我需要制作一个大型阵列.我已经看过如何声明数组,我遇到过这个问题.
array db 10 dup(?)
Run Code Online (Sandbox Code Playgroud)
声明了10个未初始化字节的数组.我尝试了这个并尝试组装它并获得"错误:操作数1后预期的逗号".我意识到'?' 在x86中不支持,因此我将其设为常量并得到了相同的错误.我最终这样做了.
array db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Run Code Online (Sandbox Code Playgroud)
这有效!但问题是,我需要大型数组(~100-400整数),并且它们的值并不总是已知.我可以写出400 0,但我认为必须有一个更简单的方法.那么有更好的方法来声明大型数组吗?
我在具有AT&T语法的基于Intel的Macbook Pro上使用x86_64汇编.
GNU汇编程序使用AT&T语法.你正在寻找的指令是.fill <count>\[, <data-size>\[, <value>\]\]
.在400字节的特定情况下:
array: .fill 400
Run Code Online (Sandbox Code Playgroud)
data-size
默认为1
(字节).我相信value
这会将400字节的默认值填充为零.
nasm
汇编程序(英特尔格式,而不是AT&T),那么times
只要您想要在或部分中预定义数据,该指令就可以正常工作.但是,如果您需要在(in )部分中保留字节,则可以使用(保留字节)指令:.text
.data
.bss
nasm
resb
setion .bss
...
arr1 resb 400 ; Reserve 400 bytes (uninitialized)
arr2 times 400 resb 1 ; Same thing, using times
Run Code Online (Sandbox Code Playgroud)
你试过吗.使用TIMES directive
这段代码来声明一个大小为10的数组
array TIMES 8 DB 0
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此链接.