鱼C论坛

 找回密码
 立即注册
查看: 3341|回复: 11

溢出问题

[复制链接]
发表于 2012-1-18 21:27:45 | 显示全部楼层 |阅读模式
1鱼币
assume cs:codesg
codesg segment
start:
    mov ax,7fffh
    mov cl,0eh
    div byte ptr cl
    mov ax,4c00h
    int 21h
codesg ends
end start
这段代码能运行 , 但得不出结果 , 是不是因为商为924h , al不能完全存储?若是,这种问题怎么解决?如果解决的方法仅是把被除数放在32位上,那么商是超过16位的数又该怎么解决?????????????



最佳答案

查看完整内容

运行出错就是因为al不能完全存储商。一个通用的解决办法,你可以看王爽教材里面的某个课程设计(忘了是哪个了)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-1-18 21:27:46 | 显示全部楼层
运行出错就是因为al不能完全存储商。一个通用的解决办法,你可以看王爽教材里面的某个课程设计(忘了是哪个了)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-19 17:35:29 | 显示全部楼层
对于这个知识我也有些遗忘了,我回去好好再重习一下。暂时这里有我个建议,
你可以把div byte ptr cl  改写为 div word ptr cx   相应前面的指令mov cl,0eh改写为mov cx,0eh再试试
结果用到两个寄存器,ax 与 dx 它们两个有一个是商的高16位,一个是存商的低16位。
确定答案,我会在我重新复习之后,再给答复。实际答案,小甲鱼老师在课程里已经告诉我们了。这关系到8位除法与16位除法的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-1-20 14:51:51 | 显示全部楼层

朋友,改掉之后的商存在ax里,余数存放在dx里的吧?的确,这个问题可以这样解决,但碰上一个商超过16位的情况呢,那样ax就不能将其储蓄了,该怎么办啊???????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-21 04:04:06 | 显示全部楼层
怎么超哦...被除数FFFFH够大了吧?那除数1够小了吧?商FFFFH够大了吧?咋超?ax寄存器好像只有16位啊...
额,个人看法,也许我很菜~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-21 11:21:50 | 显示全部楼层
除法分为八位除法与十六位除法
你以上的做法,会出现除法溢出,因此不能用八位除法,因此也就不能用cl来存储除数,要用cx,这样计算机才会采用十位的除法来进行对其运算。十六位除法得出的商放在ax 寄存器中,余数放在dx中。因此程序应该这样写:
assume cs:codesegment
codesegment segment
start:
       mov ax,7fffh
       mov cx,oeh
       div cx
        mov ax,4c00h
        int 21h
codesegment ends
end start
注意商是放在ax中的,但如是高是超过16位的数,就会产生进位,通过标志寄存器可以看到。好像是标志寄存器CF位吧,忘记那个位了。汇编后面有讲的,你再看看。
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-21 11:42:50 | 显示全部楼层
Push 发表于 2012-1-21 04:04
怎么超哦...被除数FFFFH够大了吧?那除数1够小了吧?商FFFFH够大了吧?咋超?ax寄存器好像只有16位啊...
额 ...

我不是说过有进位标志寄存器吗,到那里面去了。通过进位寄存器你就知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-21 11:49:39 | 显示全部楼层
小甲鱼实验十详细讲了。自己看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-21 13:08:37 | 显示全部楼层
事事如意 发表于 2012-1-21 11:42
我不是说过有进位标志寄存器吗,到那里面去了。通过进位寄存器你就知道了。

进位的就扔到CF去啊..好像这个不用我们来操心吧.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-22 19:48:41 | 显示全部楼层
我想到了...是你需要用到一个16位通用寄存器作为中介...那这样就不会出现越界的行为了...小甲鱼的汇编27课中有提到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-1-22 20:55:02 | 显示全部楼层
学习 学习 学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-17 10:32:16 | 显示全部楼层
据说可以看教程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-25 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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