题目:进行不会产生溢出的处罚运算,被除数为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,这样在一看公式我们就明白了,加号的左面就是放商的高位,右面是低位
源代码:
调试结果: