参数:
- (ax)=dword型数据的低16位
- (dx)=dword型数据的高16位
- (cx)=除数
返回值:
- (ax)=结果的低16位
- (dx)=结果的高16位
- (cx)=余数
思路是高16位除以除数的商就是返回值的dx,而(dx)=余数(ax)=参数的低16位这个数再除以除数,商就是返回值的ax,余数就是返回值的余数(因为这个数一定小于除数*65536,所以可以用除法可以保证不溢出)。
assume cs:code
code segment
start:
mov ax,08ac7h
mov dx,0a9h
mov cx,05h
call divdw
mov ax,4c00h
int 21h
divdw:
mov bx,ax ;bx=4240h
//;mov ax,0,自己一开始想这么写,发现依旧有溢出问题。应该用下面两行代码
mov ax,dx
mov dx,0
div cx
mov si,ax ;si=高位的商
mov ax,bx
div cx
mov cx,dx
mov dx,si
ret
code ends
end start