代码改变世界

实验10.2_解决除法溢出的问题

2014-04-17 19:20  星星之火✨🔥  阅读(327)  评论(0)    收藏  举报
;子程序描述
;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,结果
;为dword型。
;参数:(ax)= dword型数据的低16位
;        (dx)= dword型数据的高16位
;        (cx)= 除数
;返回:(dx)= 结果的高16位,(ax)= 结果的低16位
;        (cx)= 余数
;应用举例:计算1000000/10(F4240H/0AH)
assume cs:code  
code segment 
start:  mov ax,4240H 
        mov dx,000FH 
        mov cx,0AH 
         
        call divdw 
         
        mov ax,4c00h 
        int 21h 
divdw: push bx;要用到的寄存器bx、di入栈,下面用它来暂存参数的值 
        push di;不要将ax,dx,cx入栈,因为程序的目的最终是要修改它们的值 
        mov bx,ax 
        mov ax,dx 
        mov dx,0 
        div cx;这一步做完以后,ax中为结果的高十六位,即int(H/N),dx中是rem(H/N)的值 
        mov di,ax 
        mov ax,bx 
        div cx;这一步做完以后,ax中为结果的低16位,dx中存储余数 
        mov cx,dx 
        mov dx,di 
         
        pop di 
        pop bx 
        ret 
code ends 
end start 


;结果:(dx)= 0001H,(ax)= 86A0H,(cx)= 0