Memory 在引导过程中,IVT和BDA物理内存地址和大小设置是否始终相同?

Memory 在引导过程中,IVT和BDA物理内存地址和大小设置是否始终相同?,memory,x86,bootloader,legacy,bios,Memory,X86,Bootloader,Legacy,Bios,在引导序列期间,IVT(中断向量表)和BDA(BIOS数据区)被加载到内存中,IVT起始地址分别为0x00000000和BDA起始地址分别为0x00000400 IVT 0x00000000 ~ 0x000003FF BDA 0x00000400 ~ 0x000004FF 不管硬件如何,这种情况是否“始终”存在 更具体地说 问题1。IVT起始地址是否始终设置为0x00000000 问题2。IVT大小是否始终为1024字节 第三季度。BDA起始地址是否始终设置为0x00000400 第四季度。B

在引导序列期间,IVT(中断向量表)和BDA(BIOS数据区)被加载到内存中,IVT起始地址分别为0x00000000和BDA起始地址分别为0x00000400

IVT 0x00000000 ~ 0x000003FF
BDA 0x00000400 ~ 0x000004FF
不管硬件如何,这种情况是否“始终”存在

更具体地说

问题1。IVT起始地址是否始终设置为0x00000000

问题2。IVT大小是否始终为1024字节

第三季度。BDA起始地址是否始终设置为0x00000400

第四季度。BDA大小是否始终为256字节

出现这些问题的原因是,例如,当检查地址指针(如0x40E处的EBDA(扩展BIOS数据区))以确定是否需要条件操作时

问题1。IVT起始地址是否始终设置为0x00000000

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

问题2。IVT大小是否始终为1024字节? 第三季度。BDA起始地址是否始终设置为0x00000400

这些东西之间没有任何“硬屏障”。IVT本身是1kib,但各种条目(尤其是接近末尾的条目)用于BIOS数据,因此更像是IVT和BDA相互交织和重叠

第四季度。BDA大小是否始终为256字节

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

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

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

问题1。IVT起始地址是否始终设置为0x00000000

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

问题2。IVT大小是否始终为1024字节? 第三季度。BDA起始地址是否始终设置为0x00000400

这些东西之间没有任何“硬屏障”。IVT本身是1kib,但各种条目(尤其是接近末尾的条目)用于BIOS数据,因此更像是IVT和BDA相互交织和重叠

第四季度。BDA大小是否始终为256字节

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

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


注意:即使引导代码仍然需要BIOS,引导代码也没有理由读取BDA本身中的任何内容(它只需要避免破坏数据,以便BIOS可以读取数据)。例如,您可以使用
int0x12
(或
int0x15,eax=0xE820
)而不是查看0x040E。我见过人们使用BDA的唯一其他用途是确定软盘驱动器类型和串行端口数(这些都是BIOS设置中可能被用户设置错误的内容,因此不可靠且无用).

默认情况下,所有支持传统BIOSS的机器的实模式IVT为0x00000,大小为1024字节。BDA通常在0x00400到0x00500之间运行,尽管在古老的IBM PC上,它可能是0x00400到0x00520,尽管您遇到这种情况的可能性几乎为零。您可以假设BDA不超过256字节。谢谢Michael Petch。你的评论总是很有帮助的!默认情况下,支持传统BIOS的所有计算机的实模式IVT为0x00000,大小为1024字节。BDA通常在0x00400到0x00500之间运行,尽管在古老的IBM PC上,它可能是0x00400到0x00520,尽管您遇到这种情况的可能性几乎为零。您可以假设BDA不超过256字节。谢谢Michael Petch。你的评论总是很有帮助的!谢谢你完整的回答,布伦丹。不仅是答案,而且这张纸条也是很有价值的。谢谢你完整的回答布伦丹。不仅答案很有价值,而且这张纸条也很有价值。