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