匿名通过本文主要向大家介绍了idiv,idiv指令,汇编idiv,idiv ecx,idiv 20等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>
大家可能深有体会,在使用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%非法操作。
另外,乘法指令也可以这样做。可以保证更安全。
</div>
</div>
</div>
</div>
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%非法操作。
另外,乘法指令也可以这样做。可以保证更安全。