本文借鉴了同学的博客,但是个人认为他写的不够详细,所以自己添加了许多注释
;功能:进行不会产生溢出的除法运算,
; 被除数为dword型,除数为word型
; 结果为dword型
;参数:(ax) = dword 型数据的低16位
; (dx) = dword 型数据的高16位
; (cx) = 除数
;返回:(dx) = 结果的高16位,(ax) = 结果的低16位,(cx)=余数
; 在写程序之前先回顾一下除法的运算
; 被除数为16位,除数为8位:被除数放在ax中
; 被除数为32位,除数为16位:被除数放在dx和ax
; 其中,dx存放高16位
; ax存放低16位
div_dw:
push bx
;暂时将低位被除数放在栈中
push ax
;处理高位除法
mov ax,dx
;因为是最高位,所以需要将ds置零
mov dx,0
div cx
;除法得的商在ax中,为高位商,暂时存放在bx中
;得的余数放在ds中,不操作,需要作为低位数据的高位
mov bx,ax
;开始处理低位除法,在这里ds中存放了
;上一次高位的余数,作为本次低位除法的高位
pop ax
div cx
;最终的余数放在cx中
mov cx,dx
;高位商放在dx中,低位商在ax中
mov dx,bx
pop bx
同学博客地址:https://blog.csdn.net/iostream992/article/details/83413626