鱼C论坛

 找回密码
 立即注册
查看: 2257|回复: 2

[已解决]mov [bx],bx会卡死?

[复制链接]
发表于 2019-1-30 09:48:16 | 显示全部楼层 |阅读模式

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

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

x
1.png

请大家看看这段代码什么问题呀
最佳答案
2019-1-30 10:09:58
本帖最后由 jackz007 于 2019-1-30 10:37 编辑

      你的 loop 指令没有设定循环次数,这个值通过 cx 指定。

      内存地址 00000H - 00400H 为 DOS 操作系统的中断向量表,该表毎 4 个字节对应一个中断服务程序的入口地址,系统总共有 100 H 个中断(int 00H ~ int ffH),所以,中断向量表的长度是 400H 字节。

      楼主程序所要操作的目的地址恰好从 00020H 起,对应于 4H 号中断的服务程序入口地址。

      楼主的程序是在破坏 DOS 操作系统最核心的数据区域,其结果必然是灾难性的。例如,如果数据修改覆盖到 9H 和 16H 号中断,会导致键盘失灵,如果覆盖到 10H 号中断,会导致屏幕显示失灵,如果覆盖到 13H 号中断,会导致磁盘 I / O 失灵,如果覆盖到 21H 号中断,所有的操作系统功能都将失灵。楼主所描述的程序卡死估计和这些原因有关。

      楼主应该自己在程序中专门开辟一个数据段,把所有的操作都约束在自己程序所能掌控的内存范围内,这样就不会出问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-30 10:09:58 | 显示全部楼层    本楼为最佳答案   

必然

本帖最后由 jackz007 于 2019-1-30 10:37 编辑

      你的 loop 指令没有设定循环次数,这个值通过 cx 指定。

      内存地址 00000H - 00400H 为 DOS 操作系统的中断向量表,该表毎 4 个字节对应一个中断服务程序的入口地址,系统总共有 100 H 个中断(int 00H ~ int ffH),所以,中断向量表的长度是 400H 字节。

      楼主程序所要操作的目的地址恰好从 00020H 起,对应于 4H 号中断的服务程序入口地址。

      楼主的程序是在破坏 DOS 操作系统最核心的数据区域,其结果必然是灾难性的。例如,如果数据修改覆盖到 9H 和 16H 号中断,会导致键盘失灵,如果覆盖到 10H 号中断,会导致屏幕显示失灵,如果覆盖到 13H 号中断,会导致磁盘 I / O 失灵,如果覆盖到 21H 号中断,所有的操作系统功能都将失灵。楼主所描述的程序卡死估计和这些原因有关。

      楼主应该自己在程序中专门开辟一个数据段,把所有的操作都约束在自己程序所能掌控的内存范围内,这样就不会出问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-9 18:53:36 | 显示全部楼层
支持楼上分析
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-7 20:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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