我很难找到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 .bss
;label: .space ...
;.popsection
IIRC,如果您想使用.p2align
为BSS对象提供额外的对齐,则可能需要.section .bss
。或者使用.lcommm
的第三个参数
一些目标允许第三个参数与.lcom一起使用。此参数指定bss部分中符号的所需对齐方式。