AT&T语法中的resd指令

问题描述 投票:0回答:1

我很难找到nasm manual中概述的“ resb”指令的等效操作。

我也很难找到等价于“ db”,“ dw”等。它们似乎分别是“ .byte”,“。short”和“ .long”,分别对应于“ db”,“ dw”和“ dd”,但是我不确定,因为我只是从随机代码片段中收集了这些信息。我找不到等价于“ dq”。

没有人知道这些伪运算的适当等价词,并且可能有详尽地列出所有AT&T语法等效项的参考吗?

assembly x86 gas att
1个回答
0
投票

阅读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部分中符号的所需对齐方式。

© www.soinside.com 2019 - 2024. All rights reserved.