8086汇编不溢出除法

本文介绍了一个16位汇编语言编写的除法子程序,该程序能够处理双字长整数除以单字长整数的情况,并确保结果不会产生溢出。程序详细说明了如何通过两次除法操作来获得最终的商和余数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 assume cs:code, ds:data, ss:stack

stack segment
    db 16 dup (0)
stack ends

code segment
start:
    mov ax, 4240h
    mov dx, 0fh
    mov cx, 0ah
    call divdw

    mov ax, 4c00h
    int 21h

;;;divdw子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;功能:    不产生溢出的除法运算,被除数为dword,除数为word,结果为dword
;参数:    (dx)=dword型数据的高16位
;    (ax)=dword型数据的低16位
;    (cx)=除数
;返回:    (dx)=商的高16位
;    (ax)=商的低16位
;    (cx)=余数
divdw:
    push si
    push di
   
    mov si, ax ;暂存ax

    ;求商的高16位
    mov ax, dx
    sub dx, dx   
    div cx
    mov di, ax ;暂存商的高16位
    ;dx保留第一次除法运算的余数,直接用于第二次除法运算
   
    mov ax, si
    div cx
    ;ax为商的低16位
   
    mov cx, dx ;余数保存在cx
    mov dx, di ;商的高16位

    pop di
    pop si
    ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
code ends
end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值