您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:224 来源:未知

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

相关文章

汇编语言的高级语言特性
实模式和任何特权级下可执行的指令
保护方式简介
仿FDISK及PQMAGIC列出分区逻辑盘符的prw.as
DEBUG命令详解
系统托盘中的快捷图标
只能在保护模式下执行的指令
任务状态段和控制门
程式语言效率分析(1)
学习更多关于“绘制”文本串的知识
建立自己的动态链接库
超类化
驱动程序的动态加载
用汇编编写屏幕保护程序
控制转移(2)
Win32编程中请慎用ebx/esi/edi
结构化程序方法在汇编语言中的应用
请求执行时间段与Shell函数
中断和异常的转移方法
驱动程序的编译和连接

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31