【问题标题】:resd instruction in AT&T syntaxAT&T 语法中的 resd 指令
【发布时间】:2020-03-24 23:13:16
【问题描述】:

我无法找到 nasm manual 中所述的“resb”指令的等效操作。

我也很难找到“db”、“dw”等的等价词。 它们似乎是分别对应于“db”、“dw”和“dd”的“.byte”、“.short”和“.long”,但我不确定,因为我只是从随机代码 sn 中收集到的-ps。我找不到“dq”的等价物。

有没有人知道这些伪操作的正确等价物以及可能详尽列出所有 AT&T 语法等价物的参考资料?

【问题讨论】:

  • 对于dq,请使用.quad。详情请阅读the manual

标签: assembly x86 gnu-assembler att


【解决方案1】:

阅读 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 / .zeroresb 等效。 同一事物具有三个同义词的冗余来自 GAS 旨在与汇编程序兼容由各种历史悠久的 Unix 供应商提供。

另外,您可以在 BSS 中保留空间 使用.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

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

【讨论】:

  • 谢谢!当考虑到指令在所有平台上通用的事实时,这更有意义。我假设在编写 x86 精灵的情况下“.short”和“.long”与“.2byte”和“.4byte”相同?出于类似的原因?我注意到一些命令,如 .intel_syntax 和 .att_syntax 似乎对我不起作用,但没有返回错误消息。某些指令是否没有错误消息说明使用不正确,或者这只是意味着它不受支持?
  • 另外,关于切换到 bss 并返回。我注意到您使用了 .pushsection 和 .popsection,但我也可以使用 .section .bss 然后 .section .text(如果我之前在文本部分中)?我对是否可以重复使用这样的部分感到困惑。
  • @23scurtu: 是的,你可以使用.section .text 或简单地使用.text,如果你知道你以前在哪个部分。我使用push/pop 部分是因为我在描述.lcomm 的工作原理在一般情况下。将部分视为可以在它们之间切换的多个输出流,每个输出流最终将在.o 目标文件中连续结束。 (然后在链接时,每个部分将链接到可执行文件中的 ELF segment。)
  • @23scurtu: .intel_syntax noprefix 对我来说适用于 GAS 和 clang 的内置汇编程序。您是否可能忘记了 noprefix 部分,所以汇编程序仍在寻找寄存器名称上的 % 装饰,在科学怪人的语法组合中?是的,关于 .short 和 .long,你是对的。
  • 我再次尝试使用.intel_syntax noprefix,它现在可以工作了。我意识到我之前遇到的错误是由于使用了其中包含不支持的 NASM 指令的 intel 语法代码,即使使用 .intel_syntax noprefix 也是如此。有没有办法也支持 nasm 指令?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2010-12-28
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 2010-12-09
  • 2021-03-28
相关资源
最近更新 更多