名称: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) =3rem():描述性运算符,取余数,比如,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