标题:问题5
INCLUDE Irvine32.inc
.data
x dword ?
y dword ?
z dword ?
.code
Main PROC
Call ReadInt
Mov eax, x
Add eax, y
Add eax, z
Mov ebx, 3
div ebx
call Dumpregs
call crlf
exit
main ENDP
END main
答案 0 :(得分:0)
根据您提供的信息,很难说。
崩溃的一个可能原因是您在分割之前没有清除edx
。如果您在Intel's manual中阅读DIV
的说明,则会发现div r/m32
实际上使用64位寄存器对edx:eax
作为被除数。如果edx
碰巧包含一些任意值,那么你就有机会得到一个不符合32位的商,这将导致异常。
因此,您通常希望在每个edx
之前清除div
。可以使用mov edx,0
或xor edx,edx
完成此操作。