什么是GNUgas中的零?
在以下编译器输出中:
a:
.long 4
b:
.byte 99
x:
.zero 4
c:
.byte 12
f:
.zero 4
该.zero指令是什么意思?它似乎是唯一未在gas directives. 只是从上面看,long是四个字节,.byte是一个字节,我猜是四个字节的.zero零(或指令后面的任何数字)。那是对的吗?
如果是这样,为什么不这样做.long 0。这是否将其放在不同的部分或其他内容中?
回答
不,它不会把它放在不同的部分,它只是把它放在你当前创建的任何部分中。
就其与 的关系而言.long,后者实际上取决于架构。它可能是不同的大小和/或字节序。请注意,字节序对于零值可能无关紧要,但大小可能无关紧要。
.zero另一方面,该指令是.skip(并且.space在某些体系结构上)的别名,并且无论体系结构如何都会生成请求的字节数。
记还留着的是,作为一个别名.skip,你也可以提供价值你想使用的字节数(默认为零),但意义不大像做:
.zero 4, 32
生成四个空格:-)
- @MartinRosenau: you could put `.byte 0` inside a `.rept` (https://sourceware.org/binutils/docs/as/Rept.html)