|
2鱼币
中断向量表自己编写中断程序的时候,都是用串指令传送到0:200的内存处,通过ds:[si],还有es:[di]
我想问一下,为什么不是直接往0:200处写入呢?
本帖最后由 jackz007 于 2022-3-25 19:48 编辑
你的代码被加载到什么内存地址不是由你,而是由操作系统来决定的,具体地址要看操作系统已经占用了多少,在此基础上向上浮动,水涨船高,你不可能有办法把程序指定加载到 0:200 这个地址内,如果要向这片内存写入代码,必须使用数据传送指令。
DOS 一共预设了 256 个中断,中断号范围 0~ffh,每个中断向量占用 4 个字节,中断向量表一共 400h 字节,占用内存 0:0 ~ 0:400 的范围,0:200 开始的内存实际上是用于存放 int 80h 及以后中断向量的内存空间,属于操作系统的占用空间,原则上我们不可以向这片内存写入代码,因为,如果有程序编写了 int 80h ~ int ffh 的自用中断,之前被写入内存地址 0:200 的代码就会被无条件覆盖,你的中断处理程序就会意外被破坏,而这一切都是因为你自己没有遵守约定,把代码写入了受操作系统保护的内存区域造成。
编写自用中断服务程序可以使用 DOS 的 TSR 技术,只要以 ah = 31h 调用 int 21h,你的程序就可以按照驻留内存的方式结束。你所编写的中断服务程序就会受到操作系统的保护,别的程序始终可以进行正常调用你所编写的中断服务程序。
|
最佳答案
查看完整内容
你的代码被加载到什么内存地址不是由你,而是由操作系统来决定的,具体地址要看操作系统已经占用了多少,在此基础上向上浮动,水涨船高,你不可能有办法把程序指定加载到 0:200 这个地址内,如果要向这片内存写入代码,必须使用数据传送指令。
DOS 一共预设了 256 个中断,中断号范围 0~ffh,每个中断向量占用 4 个字节,中断向量表一共 400h 字节,占用内存 0:0 ~ 0:400 的范围,0:200 开始的内存实际上是用于 ...
|