名称: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:code

code  segment

start:    
mov ax, 4240H mov dx, 000FH mov cx, 0AH call divdw
mov ax, 4c00h int 21h divdw:
     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
ret code ends end start

 

posted on 2018-11-08 13:51  迷心迷  阅读(416)  评论(0编辑  收藏  举报