【发布时间】:2013-10-10 04:18:53
【问题描述】:
正如我所说:
这些代码:
mov EBX, 0
mov EBX, ofn.nFileOffset
add EAX, EBX ;; error
得到错误:指令操作数的大小必须相同。
但是当我编辑时:
mov EBX, 0
mov BX, ofn.nFileOffset
add EAX, EBX
没关系。 我还测试了 Ollydbg 以跟踪寄存器,但我没有看到任何不同。
谁能解释一下
【问题讨论】:
-
添加 eax,ebx 不是错误所在,而是它上面的那一行。 ofn.nFileOffset 是 2 个字节(字),这就是为什么你可以将其移入 bx,移入 ebx,将 mov 更改为 movzx
-
啊,它是 MASM,它的语法很奇怪......不要使用它。 :)
-
xor ebx, ebx等价于mov ebx, 0并节省三个字节。清除寄存器时使用第一种形式。 -
@johnfound 我看不出有多么奇怪的语法涉及试图直接将显然是 16 位的东西移动到 32 位寄存器的非法操作???
-
@Gunner:谢谢,但是当我签入 Ollydbg 时,我想如果使用 MOV EBX,ofn.nFileOffset,它会自动将零位扩展为完整的 EBX。而MOVZX也是如此。有什么不同???