首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在引导过程中,IVT和BDA物理内存地址和大小总是相同的吗?

在引导过程中,IVT和BDA物理内存地址和大小总是相同的吗?
EN

Stack Overflow用户
提问于 2019-08-22 01:50:44
回答 1查看 200关注 0票数 0

在启动过程中,分别将中断向量表( IVT )和BDA(BIOS数据区)加载到内存中,IVT起始地址为0x00000000,BDA起始地址为0x00000400。

代码语言:javascript
复制
IVT 0x00000000 ~ 0x000003FF
BDA 0x00000400 ~ 0x000004FF

不管硬件如何,这种情况总是这样吗?

更确切地说,

Q1。IVT起始地址总是设置为0x00000000吗?

Q2。IVT大小总是1024字节吗?

Q3。BDA的起始地址总是设置为0x00000400吗?

Q4。BDA大小总是256字节吗?

出现这些问题的原因是,例如,当在0x40E上检查地址指针(如EBDA(Extended Area) )时,以确保是否需要条件操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 04:14:45

Q1。IVT起始地址总是设置为0x00000000吗?

只适用于支持BIOS并使用BIOS引导的80x86系统。

Q2。IVT大小总是1024字节吗?Q3。BDA的起始地址总是设置为0x00000400吗?

在这些事情之间没有任何“硬性障碍”。IVT本身是1 KiB,但是各种条目(特别是接近尾端的条目)被用于BIOS数据,因此更像是IVT和BDA相互交织和重叠。

Q4。BDA大小总是256字节吗?

为了与旧DOS的内容兼容,BDA“应该”在0x00000500之前结束。但是,不能保证BIOS关心与旧DOS的兼容性。

一个更好(更谨慎/更保守)的想法是忽略内存的前4位KiB,直到操作系统的引导代码不再需要BIOS,然后将其视为免费可用的RAM (与EBDA不同,操作系统没有理由保存BDA中的数据)。

注意:即使启动代码仍然需要BIOS,也没有理由让引导代码读取BDA本身中的任何内容(它只需要避免破坏数据,这样BIOS就可以读取它)。例如,您可以只使用int 0x12 (或int 0x15, eax=0xE820),而不是查看0x040E。我看到人们使用BDA的唯一其他事情是确定软盘驱动器类型和串行端口的数量(这是BIOS设置中可能被用户设置错的东西,因此是不可靠和无用的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57601076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档