DIV时程序异常退出问题

在程序中使用Div时,程序莫明其妙的给退出了.使用Ollydbg一步跟踪到Div处,就Bye了.反复检查代码,没有发现在问题.后来只好求助于Google大侠.

网上找到这篇文章:

大家可能深有体会,在使用div/idiv指令时,运行程序常常会莫明其妙的弹出”该程序执行非法操作”的错误,通常是”除法溢出”,但是,你的代码可能如下:
mov eax,1000
cwd
div cx
一般在使用了cwd指令后,就可以正常,但是很不稳定,我就觉得奇怪,为什么会这样?
huitiansou的解答:
对:“关于div/idiv/mul/imul指令的用法 by AoGo”产生Bug的原因
那是因为被除数达到了双精度值,
所以不能用符号扩展,
而只能将高16位送0
我们只要保证edx为0就可以了,在运行32位数的除法时,建议使用这个方法,绝对不会操作非法操作(当然除0/溢出除外)

例子:
xor edx,edx
mov eax,6527363
mov ecx,28732
div ecx
你只要把上面的xor edx,edx指令一去掉,保证100%非法操作。
另外,乘法指令也可以这样做。可以保证更安全

原来是向高位扩展时没有对EDX清零,汗

发表评论





XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>