为什么这个程序每次都会崩溃?

时间:2014-10-16 10:37:11

标签: assembly x86 mean masm irvine32

标题:问题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

1 个答案:

答案 0 :(得分:0)

根据您提供的信息,很难说。

崩溃的一个可能原因是您在分割之前没有清除edx。如果您在Intel's manual中阅读DIV的说明,则会发现div r/m32实际上使用64位寄存器对edx:eax作为被除数。如果edx碰巧包含一些任意值,那么你就有机会得到一个不符合32位的商,这将导致异常。

因此,您通常希望在每个edx之前清除div。可以使用mov edx,0xor edx,edx完成此操作。