被除数为dword弄,除数为word型,结果为dword型
参数:
(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
(cx) =word型除数
返回:
(dx)=结果的高16位,(ax)=结果的低16位
(cx)=余数
公式:X/N = int(H/N)*65536 + [rem(H/N)*65536 + L]/N
X:被除数
N:除数
H:被除数高16位
L:被除数低16位
int:描述性运算符,取商,如int(38/10)=3
rem:描述性运算符,取余,如rem(38/10)=8
分析:
1.a=int(H/N)*65536的值是32位的,b=[rem(H/N)*65536 + L]/N的值是16位的,a+b相当于将a的值放入dx,将b的值放入ax
2.分别计算a和b的值,然后相加
assume cs:code
code segment
start: mov ax,4240h
mov dx,0fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21
divdw:mov bx,ax
mov ax,dx
mov dx,0
div cx ;H/N
push ax ;保存最终结果的高16位值
mov ax,bx ;将被除数的低16位值存入ax
div cx ;此时,dx保存着上一步的余数,因此当前dx,ax的组合刚好可以表示[rem(H/N)*65536 + L]
;div cx相当于[rem(H/N)*65536 + L]/N
;div cx后dx保存着最终结果的余数,ax存着最终结果的低16位
mov cx,dx ;因为返回值要求余数保存在cx中,因此进行此步
pop dx ;把保存的最终结果的高16位赋予dx
;现在返回值ax,cx,dx都有正确值拉,返回
ret
code ends
end start