我很难找到nasm manual中概述的“ resb”指令的等效操作。
我也很难找到等价于“ db”,“ dw”等。它们似乎分别是“ .byte”,“。short”和“ .long”,分别对应于“ db”,“ dw”和“ dd”,但是我不确定,因为我只是从随机代码片段中收集了这些信息。我找不到等价于“ dq”。
没有人知道这些伪运算的适当等价词,并且可能有详尽地列出所有AT&T语法等效项的参考吗?
阅读GAS手册(https://sourceware.org/binutils/docs/as/)以获取其支持的指令的详尽列表。请注意,这些指令在GAS支持的所有目标上基本相同,而并非特定于x86 AT&T语法。它们的设计理念与NASM / YASM略有不同,但是至少您不必为ARM,AArch64,RISC-V或任何其他语言重新学习它们。
[通常,如果您需要了解如何使用GAS语法进行操作,请查阅手册和/或编译一些需要执行相同操作的C,例如在https://godbolt.org/z/QUqvL2上自行编译int foo;
在文件中。
[GAS语法对于resw/d/q
没有等效项,对于.space
/ .skip
/ .zero
仅具有.space
。对同一事物具有三个同义词的冗余来自于GAS,其目的是与各种历史记录所提供的汇编程序兼容Unix供应商。
此外,您可以在BSS中保留空间无使用.skip
(或仅使用.zero
)切换到该部分,然后使用resb
(未导出的符号)或.section .bss
(全局符号)
您必须手动将元素计数乘以2/4/8才能获得字节数,例如
.bss
我认为从逻辑上讲,它等效于.lcomm
; .lcomm
; .comm
IIRC,如果要使用.lcomm private_32byte_bss_object, 4*8
为BSS对象提供额外的对齐方式,则可能需要.pushsection .bss
。或使用第三个参数label: .space ...
某些目标允许将第三个参数与.lcomm一起使用。此参数指定bss部分中符号的所需对齐方式。