Assembly GNU气体中的零是什么?
在以下编译器输出中:Assembly GNU气体中的零是什么?,assembly,gnu-assembler,Assembly,Gnu Assembler,在以下编译器输出中: a: .long 4 b: .byte 99 x: .zero 4 c: .byte 12 f: .zero 4 .zero指令是什么意思?这似乎是唯一一个没有列入名单的。从上面看,long是四个字节,.byte是一个字节,我猜.zero表示四个字节为零(或者指令后面的数字)。对吗 如果是这样,为什么不直接执行.long 0。这会把它放在不同的部分吗?不,它不会把它放在不同
a:
.long 4
b:
.byte 99
x:
.zero 4
c:
.byte 12
f:
.zero 4
.zero
指令是什么意思?这似乎是唯一一个没有列入名单的。从上面看,long
是四个字节,.byte
是一个字节,我猜.zero
表示四个字节为零(或者指令后面的数字)。对吗
如果是这样,为什么不直接执行
.long 0
。这会把它放在不同的部分吗?不,它不会把它放在不同的部分,它只是把它放在你当前创建的任何部分中
就其与.long
的关系而言,后者实际上取决于体系结构。它可以是不同的大小和/或长度。请注意,endianness对于零值可能并不重要,但大小可能会有所不同
另一方面,.zero
指令是.skip
(在某些体系结构上是.space
)的别名,并生成请求的字节数,而与体系结构无关
还请记住,作为.skip
的别名,您还可以提供要用于字节的值(默认为零),但执行以下操作毫无意义:
.zero 4, 32
要生成四个空格:-)理论上,您可以做一个
。字节0,0,0,…,0
。。。这在替换.zero 1000
时不是很方便。.zero
实际上可能位于不同的部分,因为Godbolt编译器资源管理器在默认情况下隐藏了指令。(不是因为.zero
本身;只有.common
和.lcommon
在BSS中保留空间而不切换到它)。GCC和clang在.bss
中放入零个初始化静态变量,否则.data
或.rodata
。我想他们只在BSS中使用.zero
。@MartinRosenau:你可以把.byte 0
放在.rept
()中,谷歌搜索气体。zero
是(在非旧手册中)最热门的:它是的别名。skip
。在当前手册的目录中。(谷歌搜索“天然气手册”是我最近最喜欢的,但在谷歌知道我想要什么之前,我通常会在谷歌搜索“天然气手册”,因为chrome的URL栏可以通过键入“x86/”自动为我完成这一任务)