| 操作系统 办公 实用知识 设计 开发 WEB开发 移动开发 数据库 软件工程 网管 安全 管理 信息化 答疑 渠道 |
关于div/idiv/mul/imul指令的用法 大家可能深有体会,在使用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%非法操作。 另外,乘法指令也可以这样做。可以保证更安全。
今日推荐
|
重点推荐
领军企业技术文库
+更多领军技术文库
最新专题
电子杂志订阅
| ||||||||