鱼C论坛

 找回密码
 立即注册
查看: 3077|回复: 7

关于除法溢出的问题

[复制链接]
发表于 2011-12-24 16:57:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教各位高手,这个公式中X/N的结果是商吗
那么余数该如何得到

X/N=INT(H/N)*65536+[REM(H/N)*65536+L]/N
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-24 19:58:59 | 显示全部楼层
不会没人听懂我的意思吧

就是X/N的结果是商,但是余数怎么办呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-25 14:45:00 | 显示全部楼层
余数是否应该是L除N的低8位,的余数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-28 07:09:39 | 显示全部楼层
难道大家都不明白吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-31 23:09:37 | 显示全部楼层
这个问题很复杂吧,嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-31 23:38:45 | 显示全部楼层
个人感觉,牵涉到其他语言了,是不是C啊,我只学过VB。反正我记得div的结果商和余数是放在寄存器的高低位的,你看看视频吧。我也忘记了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-2 15:11:32 | 显示全部楼层
千万别看这个公式,虽然书里的解法我是明白了,但这个公式还是看不懂。
我的理解是比如1000h/1
1000h放ax里,1放bl
指令为div bl
因为要溢出,解决方法是                       
1000/1  先把1000h的低位先保存起来,把高位放到al里,ah置0运算
10/1    然后得到al商 10,ah余数 0
然后把al的值保存到ch,把前面保存的低位放入al,因为余数已经在高位了
所以不用再弄高位了,这时候做0 00/1得到商0,余数0
把商放入cl把余数放入dx就得到商cx1000,余数dx0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-2 15:13:46 | 显示全部楼层
附上我的代码,都有注释,也许能帮你
assume cs:code, ss:stack

stack segment stack
dw 8 dup(0)
stack ends

data segment
dd 2001;20342357 ;给出被除数
dw 2;291 ;给出除数
data ends

code segment
start:
mov ax, stack ;设置栈段
mov ss, ax
mov sp, 16
mov ax, data ;设置用户数据
mov ds, ax

mov ax, ds:[0] ;给出子程序的参数低位
mov dx, ds:[2] ;给出子程序的参数高位
mov cx, ds:[4] ;给出子程序的参数除数
call divdw ;调用子程序进行运算

mov ax, 4c00h ;运算结束
int 21h

;在主程序dx中给出被除数的高位
;在主程序ax中给出被除数的低位
;在主程序cx中给出除数
;程序将返回商的高位在dx,低位在ax,余数在cx
;程序会占用bx寄存器,继承dx,ax,cx寄存器
divdw:
push bx ;计算中用到bx故先保存bx
push ax ;先将低位被除数ax入栈
mov ax, dx ;将高位给ax做高位商运算
mov dx, 0 ;将dx置0
div cx ;得到高位的商在ax余数在dx
mov bx, ax ;将高位商保存到bx
pop ax ;取出低位被除数到ax
div cx ;计算低位的商和余数分别在ax和dx
mov cx, dx ;将余数给cx
mov dx, bx ;将bx保存的高位商给dx
pop bx ;将保存的主程序bx的值返回
ret ;子程序返回

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 14:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表