Assembly 任何使dword ptr成为Gnu中默认值的方法
我在GNU中使用intel语法,就像我在过去习惯X86汇编程序一样,我犯的错误比在AT&T语法中犯的要少。回到16位时代,一条指令如下:Assembly 任何使dword ptr成为Gnu中默认值的方法,assembly,x86,gnu-assembler,Assembly,X86,Gnu Assembler,我在GNU中使用intel语法,就像我在过去习惯X86汇编程序一样,我犯的错误比在AT&T语法中犯的要少。回到16位时代,一条指令如下: mov ax, [bx] 将bx处的字节指针移动到ax。一些汇编程序对此假设具有重写,通常使用指令。现在我使用32位汇编,几乎每一行都是: mov eax, dword ptr [bx] 有没有办法让它成为默认值,或者我和“dword ptr”住在一起?我确实意识到我可以去AT&T,拥有movl和movq等等。这个回复不适合评论风格,所以我将回答我自己的问
mov ax, [bx]
将bx处的字节指针移动到ax。一些汇编程序对此假设具有重写,通常使用指令。现在我使用32位汇编,几乎每一行都是:
mov eax, dword ptr [bx]
有没有办法让它成为默认值,或者我和“dword ptr”住在一起?我确实意识到我可以去AT&T,拥有movl和movq等等。这个回复不适合评论风格,所以我将回答我自己的问题。感谢Jester和“500-内部…”。他们是对的。使用“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
*****
那是毫无疑问的 您不能改用
nasm
吗?当然,它可以生成与gcc/ld兼容的对象文件。汇编程序足够聪明,可以在可能的情况下计算出操作大小mov eax,[ebx]
将自动使用dword ptr
。不熟悉该汇编程序,但示例中的dword ptr
是多余的。目标寄存器已经定义了大小。在MASM中,仅当无法推断大小时才需要size指令,例如在push dword ptr[]
中。这实际上是有意义的。我记得MASM会做到这一点,并且我记得使用字节ptr来覆盖一个普通的词移动到ax。我会尝试两种方法,并得到一个六边形转储…有气体可以是非常不愉快的;)