BIOS提供的中断服务程序究竟放在内存的哪里?

qlmi 2005-12-04 04:24:13
从中断向量表里可以查到中断对应的IP:CS的值,但是中断号相邻的中断程序对应的CS的值并不是固定不变的。另为,不是说BIOS的入口地址在FFFF:0吗,但是查到的中断服务程序的地址也并不是在这个段内。这究竟是怎么回事?请高手指点一二!
...全文
1128 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoFanYingXiong 2006-01-24
  • 打赏
  • 举报
回复
终于找到了比较完整的解答。请参考下面这张图片:
http://bbs.xml.org.cn/uploadfile/2005121311185427778.jpg
NeoZero 2006-01-24
  • 打赏
  • 举报
回复
可以看一下梁肇新的《编程高手箴言》,里面有介绍。唉,现在书在学校……
MoFanYingXiong 2005-12-12
  • 打赏
  • 举报
回复
正在研究之中,尚未找到问题的答案。请再等待一些时日。
qlmi 2005-12-10
  • 打赏
  • 举报
回复
MoFanYingXiong(模范英雄) 老兄,研究出来了吗?
luck1225 2005-12-09
  • 打赏
  • 举报
回复
路过
MoFanYingXiong 2005-12-08
  • 打赏
  • 举报
回复
mydo(坎道斯|Kinds)老兄是说rom bios 例行程序装载在从 0f0000h 开始的 64k 空间中;而MoFanYingXiong(模范英雄)老兄却说BIOS的中断服务程序是放在FFFF:0000以后的。究竟是怎么回事?

被你这么一问,我也糊涂了。搞不明白,我还得再去仔细研究一下。
qlmi 2005-12-07
  • 打赏
  • 举报
回复
对不起邮箱地址搞错了:ql.mi@163.com
qlmi 2005-12-07
  • 打赏
  • 举报
回复
mydo(坎道斯|Kinds)老兄是说rom bios 例行程序装载在从 0f0000h 开始的 64k 空间中;而MoFanYingXiong(模范英雄)老兄却说BIOS的中断服务程序是放在FFFF:0000以后的。究竟是怎么回事?另外,DOS为什么要修改BIOS的中断向量表呢?好像很多书上都没有提到这一点。


另外我得邮箱:qlmi@163.com,谢谢wenwen227(过河卒)。
迷你苑 2005-12-07
  • 打赏
  • 举报
回复
我以前写过,要可以发给你。wenwen227@126.com
迷你苑 2005-12-07
  • 打赏
  • 举报
回复
你可以写个程序,功能和debug d差不多,存在软盘里第一扇区,然后设成软盘启动,就可以看到没有被操作系统改过的那1M的内存数据
MoFanYingXiong 2005-12-07
  • 打赏
  • 举报
回复
BIOS的中断服务程序是放在FFFF:0000以后的。
至于你看到的,入口地址在00A7:1068处,那是因为操作系统修改了中断向量表,用自己的中断服务程序代替了BIOS的中断服务程序。
事情就是这样简单。
2005-12-06
  • 打赏
  • 举报
回复
开机后,cpu的CS:IP被自动设置成ffff:0,此处是一条跳转语句,然后去执行bios中的硬件系统检测和初始化程序。

可见,是电器工程师把cpu的开机默认值设置成ffff:0,然后去执行bios中相应程序,并不是说bios的入口地址ffff:0,没这个说法。但可以说bios中某个函数的入口地址

看来楼住对入口地址不是很清楚,用汇编写个procedure然后自己调用一下,就会有个具体的理解。
nillge 2005-12-06
  • 打赏
  • 举报
回复
保护模式下不是在那个地方,IDT是可以放在其他地方的,DOS下就是1M下。
codesphere 2005-12-06
  • 打赏
  • 举报
回复
放在ROM里嘛
Fiven_Luo 2005-12-06
  • 打赏
  • 举报
回复
就是函数指针嘛。
中断处理程序不就是一个函数而已吗?最后用IRET返回,仅此而已。
无谓何被执行程序,这不是exe。
qlmi 2005-12-06
  • 打赏
  • 举报
回复
那FFFF:0000处的跳转指令本身是不是也是ROM BIOS的一部分呀?
qlmi 2005-12-06
  • 打赏
  • 举报
回复
老兄那为什么我用debug查看内存0000:0000开始的内存时里面显示的CS的内容却不在f0000处呢?
如下:
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.

D:\DOCUME~1\BILLGA~1>debug
-d 0000:0000
0000:0000 68 10 A7 00 8B 01 70 00-16 00 90 03 8B 01 70 00 h.....p.......p.
0000:0010 8B 01 70 00 B9 06 12 02-40 07 12 02 FF 03 12 02 ..p.....@.......
0000:0020 46 07 12 02 0A 04 12 02-3A 00 90 03 54 00 90 03 F.......:...T...
0000:0030 6E 00 90 03 88 00 90 03-A2 00 90 03 FF 03 12 02 n...............
0000:0040 A9 08 12 02 A4 09 12 02-AA 09 12 02 5D 04 12 02 ............]...
0000:0050 B0 09 12 02 0D 02 E1 02-C4 09 12 02 8B 05 12 02 ................
0000:0060 0E 0C 12 02 14 0C 12 02-1F 0C 12 02 AD 06 12 02 ................
0000:0070 AD 06 12 02 A4 F0 00 F0-37 05 12 02 2C 42 00 C0 ........7...,B..
那为什么int 0的入口地址在CS:00A7;IP:1068处呢?(其他中断也有这个问题)而不是在BIOS所在的f0000h处?
beepbug 2005-12-06
  • 打赏
  • 举报
回复
“请问下什么是入口地址?是不是就是被执行程序的第一行代码的地址?”
在这里就是所执行的中断服务例程的第一条指令的地址。不一定是中断服务例程的首地址。你自己设计一个中断服务例程,完全可以从中间某条指令开始执行。
qlmi 2005-12-05
  • 打赏
  • 举报
回复
请问下什么是入口地址?是不是就是被执行程序的第一行代码的地址?
beepbug 2005-12-05
  • 打赏
  • 举报
回复
BIOS有两块。一块放在ROM,地址是固定的,代码也是固定的。另一块在DOS的BIOS模块里,系统启动时,装入内存的RAM里。入口地址在中断矢量表里。地址和代码都是可变的。
加载更多回复(6)

21,498

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧