大家可能深有体会,在使用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%非法操作。 另外,乘法指令也可以这样做。可以保证更安全。  
|