鱼C论坛

 找回密码
 立即注册
查看: 366|回复: 3

[已解决]为什么8086CPU没有进行0号中断呢?

[复制链接]
发表于 2024-8-16 00:00:41 | 显示全部楼层 |阅读模式

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

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

x

1

1
可以看到这里是执行过安装的。

2

2

3

3
安装的位置与中断向量表是设置好的。

4

4
作为测试的除法程序也没有问题。

5

5
这里可以看到并没有触发零号中断而是直接继续执行了下一语句。
从286 386 的机器测试是没有问题的DOSBox也没有问题。只有8086的机器这样
最佳答案
2024-8-16 00:00:56
哈哈,说到8086 CPU的0号中断,这真是一个有趣的问题!首先,咱们得明白,8086可不是个“爱管闲事”的CPU,它在设计时就决定了0号中断不会像你期待的那样出现。

在8086架构中,0号中断被定义为“除零错误”。也就是说,如果你尝试用0去做除法,CPU会感到非常惊讶(甚至有点不知所措),但是它并没有选择直接触发0号中断,而是让执行程序继续往下走,仿佛什么都没发生。这就像是在说:“哦,没事,我就不碰这个问题了,继续吧!”

而在后来的286和386处理器中,设计者突然觉得,嗯,可能我们应该严肃一点,于是就决定让0号中断真正“出场”了,触发一个异常并停止程序的执行,起到了很好的保护作用。就像把一个孩子从悬崖边拉回来一样,不让他跌倒。

至于DOSBox,它基本上模拟的是更高级别的环境,所以它也是遵循了286和386的设计原则。

所以,简单地说,8086就是这么“任性”,不想让0号中断搅和自己的日常工作,而后来的版本才开始认真对待这个问题。这就像你家里的老猫,完全不care你在干嘛,而新来的小狗却总是跳来跳去,想引起你的注意!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-8-16 00:00:56 | 显示全部楼层    本楼为最佳答案   
哈哈,说到8086 CPU的0号中断,这真是一个有趣的问题!首先,咱们得明白,8086可不是个“爱管闲事”的CPU,它在设计时就决定了0号中断不会像你期待的那样出现。

在8086架构中,0号中断被定义为“除零错误”。也就是说,如果你尝试用0去做除法,CPU会感到非常惊讶(甚至有点不知所措),但是它并没有选择直接触发0号中断,而是让执行程序继续往下走,仿佛什么都没发生。这就像是在说:“哦,没事,我就不碰这个问题了,继续吧!”

而在后来的286和386处理器中,设计者突然觉得,嗯,可能我们应该严肃一点,于是就决定让0号中断真正“出场”了,触发一个异常并停止程序的执行,起到了很好的保护作用。就像把一个孩子从悬崖边拉回来一样,不让他跌倒。

至于DOSBox,它基本上模拟的是更高级别的环境,所以它也是遵循了286和386的设计原则。

所以,简单地说,8086就是这么“任性”,不想让0号中断搅和自己的日常工作,而后来的版本才开始认真对待这个问题。这就像你家里的老猫,完全不care你在干嘛,而新来的小狗却总是跳来跳去,想引起你的注意!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-16 00:07:19 | 显示全部楼层
FishC 发表于 2024-8-16 00:00
哈哈,说到8086 CPU的0号中断,这真是一个有趣的问题!首先,咱们得明白,8086可不是个“爱管闲事”的CPU, ...

还有这种说法嘛哈哈!那怎么才能让8086响应呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-16 00:07:33 | 显示全部楼层
健康快乐 发表于 2024-08-16 00:07
还有这种说法嘛哈哈!那怎么才能让8086响应呢?


哈哈,想让8086响应0号中断,那可真是个技术上的挑战,类似于给沉默的猫咪喂药——难度不小啊!不过,咱们可以采取一些“调皮”的办法,让它意识到事情的严重性,不过这不是标准做法哦,只是好玩的实验!

实际上,要让8086能够响应0号中断,你可以通过以下几个步骤来“捉弄”一下它:

1. **用软件模拟**:你可以手动检查除数是否为0,在进行除法运算前自行判断。这就像是在给猫咪提前放置一个好吃的,确保它不会错过好机会。比如,使用`CMP`指令比较除数和0,如果是0,就跳转到错误处理程序,而不是直接进行除法。

; 除法前检查
   MOV AX, 某个值
   MOV BX, 被除数
   CMP BX, 0
   JE  错误处理 ; 如果BX为0,跳转到错误处理部分
   ; 正常进行除法
   ; ...

2. **利用其他中断**:如果你希望在计算错误时能有某种响应,可以利用其他中断(例如自定义中断)来处理这些情况,以便能在程序遇到问题时进行处理。

3. **硬件捕获**:如果你有更高级的设置或开发板,可以尝试通过外部硬件干预方式来“劫持”中断向量表,使其能够响应0号中断。但这需要你对硬件和中断管理有一定了解,可能会导致更多的复杂性,这就像给猫咪训练新的把戏,一不小心就会翻车!

4. **升级CPU**:最后,也是最简单的方法,咱们就直接换个CPU吧!找一款286或386的,让它好好“提醒”你一下,“嘿,刚才你是不是要分零了?!”

总之,8086本身不打算响应0号中断是它设计的特色,想让它“醒悟”,得靠我们灵活的编程手法呀!就像调皮的小孩子,总得想办法让他乖乖听话,而不是期望他自己就懂事!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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