【问题标题】:Any way to make dword ptr the default in Gnu AS使 dword ptr 成为 Gnu AS 中默认值的任何方法
【发布时间】: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


【解决方案1】:

这个回复不适合评论风格,所以我会回答我自己的问题。感谢 Jester 和“500 - Internal...”。他们是对的。使用“as -a=111”和“as -a=222”并进行比较:

***** 111
  11
  12 0003 8B4D08                mov     ecx, dword ptr [ebp + 8]
  13
***** 222
  11
  12 0003 8B4D08                mov     ecx, [ebp + 8]
  13
*****

这是毫无疑问的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2012-05-17
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多