在该指令中不是PTR冗余CALL DWORD PTR [XXXXXXXX]
。如果指令是CALL DWORD [XXXXXXXX]
这也是说,调用位于地址XXXXXXXX的DWORD长度值。在这条指令中PTR不是冗余的:CALL DWORD PTR [XXXXXXXX]
为什么PTR呢?
在该指令中不是PTR冗余CALL DWORD PTR [XXXXXXXX]
。如果指令是CALL DWORD [XXXXXXXX]
这也是说,调用位于地址XXXXXXXX的DWORD长度值。在这条指令中PTR不是冗余的:CALL DWORD PTR [XXXXXXXX]
为什么PTR呢?
如果我没有记错,那么“PTR”运算符就在那里,因为在MASM中,有时您可以拥有一个看起来像常规值但实际上是指针的表达式。
如果两条语句都适合您,我只能说,将它们组合起来并确保它们都生成相同的字节。他们应该是一样的,考虑到[xxxxxxxx]
中的“xxxxxxxx”是定义的指针,但是自从我上次用MASM编码以来已经有一段时间了。 (我倾向于倾向于NASM,对此类事情的疑惑就少得多了。)
用masm的说法,DWORD PTR是一个指针重写,IOW通常称为一个强制转换。它基本上是指“将地址XXXXXXXX视为DWORD指针”。
masm实际上键入其数据项。所以,如果XXXXXXXX已被确定为
XXXXXXXX DWORD SomeAddress ; Presumably a function entry point.
然后
CALL XXXXXXXX
是够了,就会产生,如果由于某种原因,XXXXXXXX是不是定义相同的代码
CALL DWORD PTR XXXXXXXX
OTOH, as
XXXXXXXX WORD ?
WORD ?
那么唯一的办法让MASM装配到XXXXXXXX呼叫而不产生MAMS错误会
CALL DWORD PTR XXXXXXXX
方括号[]不带任何东西到板在这种情况下,BTW。对于其他一些汇编程序,它们表示间接性。在上面的例子中,masm并不需要它们。在其他上下文中(基本+索引表达式),它们用于包围索引寄存器和/或值。
哦,顺便说一句:
CALL DWORD [XXXXXXXX]
今天是一个不同寻常的MASM语法(每MASM 6文档,书籍和他们的例子),大概相当于一些较老的MASM语法兼容津贴。