注册 登录
编程论坛 汇编论坛

汇编程序中除法的问题

longxies 发布于 2007-12-28 16:00, 2349 次点击
哪位老师能给指点一下 ,除法溢出的问题啊,我看了王爽的汇编语言,可还是不能明白出发益处怎么解决!!!!!!
5 回复
#2
永夜的极光2007-12-28 19:30
书的最后有证明的啊

第313~315页
#3
longxies2007-12-28 19:46
谢谢,永夜的极光
数学不好,证明也没看懂,简单点
mov ax,1000h
mov dx,0010h
mov bx,2
div bx
帮忙编程演示一下吧
#4
loveajtl2007-12-28 22:57
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
=================================
以上是永夜的极光的回答,呵呵.
#5
longxies2007-12-29 10:43
div cx
没看懂
cx里面是什么?
#6
longxies2007-12-29 11:03
谢谢了,我找到了
不会溢出的除法(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
1