标题:汇编程序中除法的问题
只看楼主
longxies
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-11-14
 问题点数:0 回复次数:5 
汇编程序中除法的问题
哪位老师能给指点一下 ,除法溢出的问题啊,我看了王爽的汇编语言,可还是不能明白出发益处怎么解决!!!!!!
搜索更多相关主题的帖子: 汇编程序 除法 
2007-12-28 16:00
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
书的最后有证明的啊

第313~315页

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-12-28 19:30
longxies
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-11-14
得分:0 
谢谢,永夜的极光
数学不好,证明也没看懂,简单点
mov ax,1000h
mov dx,0010h
mov bx,2
div bx
帮忙编程演示一下吧
2007-12-28 19:46
loveajtl
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-7-5
得分:0 
push bx ;保存bx
mov bx,ax ;先把低16位保存
mov ax,dx ;高16位移到低16位
mov dx,0 ;高16位置零
div cx ;除
push ax ;保存商
mov ax,bx ;取出原来保存的低16位,高16位是上次除法的余数,已经在dx里面了
div cx ;再除
mov cx,dx ;把余数保存到cx
pop dx ;把第一次除的商,放入dx,作为结果的高16位
pop bx
=================================
以上是永夜的极光的回答,呵呵.
2007-12-28 22:57
longxies
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-11-14
得分:0 
div cx
没看懂
cx里面是什么?
2007-12-29 10:43
longxies
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-11-14
得分:0 
谢谢了,我找到了
不会溢出的除法(32位除16位,商如果只能是16位,则可能溢出,比如FFFFF div 1)
;因此,把商也要增大到32位
;输入参数:ax 保存被除数低16位,dx 保存被除数高16位,cx 保存除数
;输出参数:ax 保存商低16位,dx 保存商高16位,cx保存余数
;计算方法:商的高16位=被除数高16位 div 除数 的 商
; 商的低16位=((被除数高16位 div 除数 的 余数)*FFFF+被除数低16位)div 除数 的 商
; 余数=上式的余数
public divdw
segdivdw segment 'code'
divdw proc far
push bx ;保存bx
mov bx,ax ;先把低16位保存
mov ax,dx ;高16位移到低16位
mov dx,0 ;高16位置零
div cx ;除
push ax ;保存商
mov ax,bx ;取出原来保存的低16位,高16位是上次除法的余数,已经在dx里面了
div cx ;再除
mov cx,dx ;把余数保存到cx
pop dx ;把第一次除的商,放入dx,作为结果的高16位
pop bx ;恢复bx
ret ;返回
divdw endp
segdivdw ends
end
2007-12-29 11:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-194836-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.226195 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved