汇编语言-DIV指令(除法指令)

DIV指令:

div 指令是8086汇编中的除法运算指令,它的结果不是浮点数,而是两个整数:商和余数。

A / B 其中,A 是被除数,B 是除数 ,

除数B有 8位16位两种,保存在一个 reg寄存器 里 或是 内存单元 中 ,

被除数 A 默认存放在 AX 中(16位以内)

或 AX 和 DX 中(32位,DX存放高16位,AX存放低16位)

结果:

如果除数 B 是8位,那么除法的结果AL保存商,AH保存余数,

如果除数 B 是16位,那么除法的结果 AX保存商,DX保存余数。

例如:


div byte ptr ds:[0]

含义:

(al)=(ax)/((ds)*16+0) 的商

(ah)=(ax)/((ds)*16+0) 的余数


div word ptr es:[0]

(高十六位)+(低十六位)

含义:

(ax)=[(dx)*10000H+(ax)]/((es)*16+0) 的商

(dx)=[(dx)*10000H+(ax)]/((es)*16+0) 的余数

div byte ptr [bx+si+8]

含义:

(al)=(ax)/((ds)*16+(bx)+(si)+8) 的商

(ah)=(ax)/((ds)*16+(bx)+(si)+8) 的余数


div word ptr [bx+si+8]

(高十六位)+(低十六位)

含义:

(ax)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8) 的商

(dx)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8) 的余数

运算要求:

除法指令正确执行是有条件的

这个条件是:被除数的高一半,必须小于除数 ,

如果数据不满足这样的条件,被除数的高一半大于或者等于除数,就会产生除法溢出,

若发生除法溢出,会自动触发0号中断 --- 除法溢出中断,

举个粟子:

被除数 1000 ,写成16进制格式是3E8H,

它的高一半(高8位)是03H,低一半(低8位)是0E8H ,

若以它作为被除数,则除数必须大于4(4>03H)才能正确执行 ,

这样,除得的商必然只有 8位,可以正确地保存在AL中 ,

若你的除数是3或更小的 2 、1 甚至 0 ,则在程序运行到这一条除法指令时会发生0号中断出错。


另外 如果做16位除法前需要现将 DX 清零,如:xor dx,dx

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余十步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值