鱼C论坛

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

关于除法溢出的问题

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

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

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

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

X/N=INT(H/N)*65536+[REM(H/N)*65536+L]/N
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-24 19:58:59 | 显示全部楼层
不会没人听懂我的意思吧

就是X/N的结果是商,但是余数怎么办呢
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-25 14:45:00 | 显示全部楼层
余数是否应该是L除N的低8位,的余数
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-28 07:09:39 | 显示全部楼层
难道大家都不明白吗
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-31 23:09:37 | 显示全部楼层
这个问题很复杂吧,嘿嘿
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-31 23:38:45 | 显示全部楼层
个人感觉,牵涉到其他语言了,是不是C啊,我只学过VB。反正我记得div的结果商和余数是放在寄存器的高低位的,你看看视频吧。我也忘记了
小甲鱼最新课程 -> https://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了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-2 15:13:46 | 显示全部楼层
附上我的代码,都有注释,也许能帮你
  1. assume cs:code, ss:stack

  2. stack segment stack
  3. dw 8 dup(0)
  4. stack ends

  5. data segment
  6. dd 2001;20342357 ;给出被除数
  7. dw 2;291 ;给出除数
  8. data ends

  9. code segment
  10. start:
  11. mov ax, stack ;设置栈段
  12. mov ss, ax
  13. mov sp, 16
  14. mov ax, data ;设置用户数据
  15. mov ds, ax

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

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

  22. ;在主程序dx中给出被除数的高位
  23. ;在主程序ax中给出被除数的低位
  24. ;在主程序cx中给出除数
  25. ;程序将返回商的高位在dx,低位在ax,余数在cx
  26. ;程序会占用bx寄存器,继承dx,ax,cx寄存器
  27. divdw:
  28. push bx ;计算中用到bx故先保存bx
  29. push ax ;先将低位被除数ax入栈
  30. mov ax, dx ;将高位给ax做高位商运算
  31. mov dx, 0 ;将dx置0
  32. div cx ;得到高位的商在ax余数在dx
  33. mov bx, ax ;将高位商保存到bx
  34. pop ax ;取出低位被除数到ax
  35. div cx ;计算低位的商和余数分别在ax和dx
  36. mov cx, dx ;将余数给cx
  37. mov dx, bx ;将bx保存的高位商给dx
  38. pop bx ;将保存的主程序bx的值返回
  39. ret ;子程序返回

  40. code ends
  41. end start
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-30 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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