AT&T 语法中的 resd 指令

resd instruction in AT&T syntax

我无法找到 "resb" 指令的等效操作,如 nasm manual 中所述。

我也很难找到 "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 语法做某事,请查看手册 and/or 编译一些需要做同样事情的 C,例如关于 https://godbolt.org/z/QUqvL2 自己在文件中编译 int foo;

GAS 语法没有 resw/d/q 的等效项,只有 .space / .skip / .zero resb 具有三个同义词的冗余同样的事情来自 GAS,旨在与各种历史 Unix 供应商提供的汇编程序兼容。

此外,您可以在 BSS 中保留 space,而无需 使用 .section .bss(或只是 .bss)切换到该部分,然后返回,使用 .lcomm(非导出符号)或 .comm(全局符号)

您必须手动将元素计数乘以 2/4/8 以获得字节数,例如

.lcomm  private_32byte_bss_object, 4*8

我认为这在逻辑上等同于 .pushsection .bsslabel: .space ...; .popsection

IIRC,如果你想使用 .p2align 给 BSS 对象额外对齐,你可能需要 .section .bss。或者使用第三个参数 .lcommm

Some targets permit a third argument to be used with .lcomm. This argument specifies the desired alignment of the symbol in the bss section.