AT&T 语法中的 resd 指令



我很难找到nasm手册中概述的"resb"指令的等效操作。

我也很难找到"db"、"dw"等的等价词。它们似乎分别对应于"db"、"dw"one_answers"dd"的".byte"、".short"one_answers".long",但我不确定,因为我只是从随机代码片段中收集到的。我找不到与"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在文件中自行编译CCD_ 1。

GAS语法对于resw/d/q没有等效项,对于resb只有.space/.skip/.zero同一事物有三个同义词的冗余来自GAS,目的是与不同历史Unix供应商提供的汇编程序兼容。

此外,您可以在BSS中保留空间,而无需使用.section .bss(或仅.bss(切换到该部分,然后使用.lcomm(非导出符号(或int foo;0(全局符号(返回

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

.lcomm  private_32byte_bss_object, 4*8

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

IIRC,如果您想使用.p2align为BSS对象提供额外的对齐,则可能需要.section .bss。或者使用.lcommm的第三个参数

一些目标允许第三个参数与.lcom一起使用。此参数指定bss部分中符号的所需对齐方式。

最新更新