关于X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N公式的例子

时间:2021-11-04 16:12:30

assume  cs:codeseg

 

stackseg segment

 

  dw 8 dup (0)

 

stackseg ends

 

codeseg  segment

 

start:  mov ax,stack

           mov ss,ax

           mov sp,10H

           mov ax,4240h;被除数为:000F4240H

           mov dx,0FH

           mov cx,0EH;除数为0EH

           call divdw;关于X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N的实现

 

           mov ax,4c00h

           int 21h

 

divdw:push bx;bx中可能含有重要的数据

           push ax

           push dx

           mov dx,0

           pop ax;因为此时要做的是16位的除法,所以要设置AX,DX。根据公式这里做的是被除数的高位除以除数,被除数的高位为0FH,放到在16位除法中就应该是dx=0000h,ax=000fh

           div cx;(ax)=商,(dx)=余数

           mov bx,ax;将商送入bx中存贮

           pop ax;此时有dx(此时已经存放了高位除法的余数了)和ax构成了新的被除数了,即:rem(H/N)*65536+L

           div cx ;(ax)=最终的商低位

           mov cx,dx;(cx)=最终结果的余数

           mov dx,bx;(dx)=最终结果的商高位位

           ;商由dx和ax组成,余数为:cx

           pop bx

           ret

codeseg ends

end start