博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决除法溢出的问题
阅读量:7007 次
发布时间:2019-06-27

本文共 1048 字,大约阅读时间需要 3 分钟。

名称:divdw

功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。

参数:(ax)=dword型数据的低16位

         (dx)=dword型数据的高16位

         (cx)=除数

返回:

  (dx)=结果的高16位,(ax)=结果的低16位

      (cx)=余数

应用举例:计算1000000/10(F4240H/0AH)

 

提示

给出一个公式:

X:被除数,范围:[0,  FFFFFFFF]
N:除数,范围:[0, FFFF]
H:X高16位,范围:[0, FFFF]
L:X低16位,范围:[0, FFFF]
int():描述性运算符,取商,比如,int(38/10) =3
rem():描述性运算符,取余数,比如,rem(38/10)= 8
公式:X/N = int(H/N) * 65536 +[rem(H/N) * 65536 + L] / N
这个公式将可能产生溢出的除法运算:X/N,转变为多个不会产生溢出的除法运算。公式中,等号右边的所有除法运算都可以用div指令来做,肯定不会导致除法溢出。

assume  cs:codecode  segmentstart:            mov ax, 4240H        mov dx, 000FH        mov cx, 0AH        call divdw mov ax, 4c00h        int 21hdivdw:      push bx      push si         mov bx,ax        mov ax, dx        mov dx, 0        div cx          ;ax = int(H/N), dx = rem(H/N)        mov si, ax      ;si = int(H/N), (dx) = rem(H/N) * 65536        mov ax, bx        div cx          ;(rem(H/N) * 65536 + L) / N, ax保存的低16位商,(dx) = 余数        mov cx, dx        mov dx, si      pop si      pop bx        retcode  endsend   start

 

转载于:https://www.cnblogs.com/gkp307/p/9928613.html

你可能感兴趣的文章
WordPress条件标签(Conditional Tags)实现页脚js动态加载
查看>>
android短信发送器
查看>>
Vue项目webpack打包部署到Tomcat
查看>>
mac安装redis管理工具rmd
查看>>
struts 2 监听器
查看>>
更简单的用 Emacs 连接 maven 启动的 clojure:swank 服务端
查看>>
国内最火的五款HTML5前端开发框架
查看>>
javaweb 进阶之路
查看>>
CGLib动态代理原理及实现
查看>>
selenium模拟鼠标悬停操作
查看>>
mysql事务,select for update,及数据的一致性处理
查看>>
java8-Lambda
查看>>
Bash 实例,第 2 部分
查看>>
eclipse JavaEE版"javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法...
查看>>
【crowdin】快速国际化
查看>>
CSS3实现背景颜色渐变 摘抄
查看>>
CentOS 6.8 安装vnc
查看>>
阿里云提供的一个监测cpu和内存的shell脚本(get_cpu_mem_info.sh)
查看>>
怎么让input不失去焦点
查看>>
jsp中getParameter与getAttribute的区别
查看>>