Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 任何使dword ptr成为Gnu中默认值的方法_Assembly_X86_Gnu Assembler - Fatal编程技术网

Assembly 任何使dword ptr成为Gnu中默认值的方法

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等等。这个回复不适合评论风格,所以我将回答我自己的问

我在GNU中使用intel语法,就像我在过去习惯X86汇编程序一样,我犯的错误比在AT&T语法中犯的要少。回到16位时代,一条指令如下:

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。我会尝试两种方法,并得到一个六边形转储…有气体可以是非常不愉快的;)