Assembly Isn';t本指令中的PTR冗余:调用DWORD PTR[XXXXXXXX]

Assembly Isn';t本指令中的PTR冗余:调用DWORD PTR[XXXXXXXX],assembly,masm,Assembly,Masm,此指令中的PTR不是冗余的吗调用DWORD PTR[XXXXXXXX]。如果指令是调用DWORD[XXXXXXXX]这也表示,调用地址XXXXXXXX处的DWORD长度值 那么为什么要使用PTR呢?如果我没记错的话,“PTR”操作符就存在了,因为在MASM中,有时可以使用一个看起来像正则值但实际上是指针的表达式 如果这两条语句都适用于您,那么我只能说,将它们组合起来,并确保它们生成相同的字节。考虑到[xxxxxxxx]中的“xxxxxxxx”根据定义是一个指针,它们应该是一样的,但我上次在MAS

此指令中的PTR不是冗余的吗
调用DWORD PTR[XXXXXXXX]
。如果指令是
调用DWORD[XXXXXXXX]
这也表示,调用地址XXXXXXXX处的DWORD长度值

那么为什么要使用PTR呢?

如果我没记错的话,“PTR”操作符就存在了,因为在MASM中,有时可以使用一个看起来像正则值但实际上是指针的表达式


如果这两条语句都适用于您,那么我只能说,将它们组合起来,并确保它们生成相同的字节。考虑到
[xxxxxxxx]
中的“xxxxxxxx”根据定义是一个指针,它们应该是一样的,但我上次在MASM中编码已经有一段时间了。(我倾向于支持NASM,但它对这类事情的迷惑性要小得多。)

用masm的说法,DWORD PTR是一种指针覆盖,低于通常所说的强制转换。它的基本意思是“将地址XXXXXXXX视为DWORD指针”

masm实际上键入了它的数据项。因此,如果XXXXXXXX之前被定义为

XXXXXXXX DWORD SomeAddress   ; Presumably a function entry point.
XXXXXXXX  WORD ?
          WORD ?
然后

 CALL XXXXXXXX
足够了,将生成与

  CALL DWORD PTR XXXXXXXX
OTOH,如果出于某种原因,XXXXXXXX被定义为

XXXXXXXX DWORD SomeAddress   ; Presumably a function entry point.
XXXXXXXX  WORD ?
          WORD ?
那么,让MASM组装对XXXXXXXX的调用而不生成mams错误的唯一方法是

  CALL DWORD PTR XXXXXXXX
顺便说一句,在这种情况下,方括号[]不会带来任何东西。对于其他一些汇编器,它们表示间接。在上面的示例中,masm不需要它们。在其他上下文(基+索引表达式)中,它们用于括起索引寄存器和/或值

哦,顺便说一句:

  CALL DWORD [XXXXXXXX]
现在是一种不寻常的masm语法(根据masm 6文档书及其示例),可能是与一些旧的masm语法相对应的兼容性余量