2013-10-10 22 views
0

正如我所说的:为什么这些代码是错误:指令操作数必须是相同的大小

这些代码:

mov  EBX, 0 
mov  EBX, ofn.nFileOffset 
add  EAX, EBX    ;; error 

得到错误:指令操作数必须是相同的大小。

但是,当我编辑:

mov  EBX, 0 
mov  BX, ofn.nFileOffset 
add  EAX, EBX 

这没关系。 我也测试Ollydbg跟踪注册,但我没有看到任何不同。

任何人都可以解释

+5

添加eax,ebx不在错误所在的位置,而是位于其上方的行。 ofn.nFileOffset是2个字节(字),这就是为什么你可以将它移动到bx中,移动到ebx中,将mov变为movzx – Gunner

+0

啊,它是MASM的奇怪语法......不要使用它。 :) – johnfound

+1

'xor ebx,ebx'相当于'mov ebx,0'并保存三个字节。清除寄存器时使用第一种形式。 –

回答

1

ofn.nFileOffset有ofn.nFileOffset值是2个字节。

和Mov指令需要大小相等的2个参数。

0

你应该尝试:

xor  EBX, EBX 
mov  BX, ofn.nFileOffset 
add  EAX, EBX 

现在,您将在EBX

相关问题