2014-10-16 82 views
-3

標題:問題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

'DIV'也影響'EDX',它沒有被初始化。 – rkhb 2014-10-16 11:41:01

回答

0

根據您提供它是很難說的信息。

崩潰的一個可能原因是您在分割之前沒有清除edx。如果您閱讀Intel's manual中的DIV的說明,您會發現div r/m32實際上使用64位寄存器對edx:eax作爲分紅。如果edx恰巧包含一些任意值,則可能會得到一個不適合32位的商,這將導致異常。

因此,您通常要在每個div之前清除edx。這可以通過mov edx,0xor edx,edx完成。