【发布时间】:2014-06-11 14:58:29
【问题描述】:
我在 GNU AS 中使用 intel 语法,因为我从前就习惯于 X86 汇编器,而且我犯的错误比使用 AT&T 语法时少。回到 16 位时代,这样的指令:
mov ax, [bx]
会将 bx 处的字节指针移动到 ax 中。一些汇编器对此假设进行了覆盖,通常使用指令。现在我使用的是 32 位汇编,几乎每一行都是:
mov eax, dword ptr [bx]
有没有办法让它成为默认值,或者我是否到处都使用“dword ptr”?我确实意识到我可以去 AT&T 并拥有 movl 和 movq 等......
【问题讨论】:
-
你不能改用
nasm吗? AFAIK 它可以生成与 gcc/ld 兼容的目标文件。 -
汇编器足够聪明,可以在可能的情况下计算出操作大小。
mov eax, [ebx]将自动使用dword ptr。 -
不熟悉该汇编程序,但您的示例中的
dword ptr是多余的。目标寄存器已经定义了大小。在 MASM 中,仅当无法推断大小时才需要 size 指令,例如push dword ptr []. -
这实际上是有道理的。我记得 MASM 会做到这一点,并且我记得使用 byte ptr 覆盖一个普通的单词移动到 ax。我会尝试两种方式并获得一个十六进制转储......
-
有汽油会让人很不舒服;)
标签: assembly x86 gnu-assembler