第十章实验(二)除法溢出的问题

题目:进行不会产生溢出的处罚运算,被除数为dword型,除数为word型,结果为dword。
参数:(ax)=dword型数据的低16位
      (dx)=dword型数据的高16位
      (cx)=除数
返回:(dx)=结果的高16位
      (ax)=结果的低16位
      (cx)=余数
应用举例:计算1000000/10(f4240h/0ah)
解答:
这里主要是运用公式X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N来进行计算。这里面的H是被除数X的高16位,N是除数,L是被除数的低16位。int()是取商,比如int(38/10)=3;rem()是取余数,比如rem(38/10)=8。这里的关键是要明白乘以65536的意思,int(H/N)*65536中的65536所扮演的不是乘数的角色,而是一个位移量,假设说首先我们想想用dx和ax那种除法
比如被除数是12222H,那么dx=1,ax=2222 那么这里的dx和ax是怎样表示12222H的?就是dx×10000H+ax,这样在一看公式我们就明白了,加号的左面就是放商的高位,右面是低位
源代码:

调试结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值