BIOS是否将512字节的引导加载程序复制到0x7c00



我正在写一个内核;在写这么复杂的东西之前,我认为它不仅是有帮助的,而且是必要的,做一些关于内核,引导加载程序,寄存器,BIOS等的理论阅读。

这篇文章说(我引用):

The boot sector loader. 
This loads the first 512-byte sector from the boot disk into RAM and jumps to it.

然后它接着说:

The first sector of a diskette can be loaded at address 0000:7C00. 

因此,引导扇区加载程序将位于内存地址0x7C00(如果我是对的)的磁盘的512字节数据加载到RAM中;现在,我的问题是:

  • 由于机器正在启动,RAM 为空,因此引导加载程序在RAM的0x0000处加载?
  • (与此上下文无关)是否有任何方法可以获得GRUB Legacy (v .9x)引导加载程序的源代码解释?
  • 最后,我应该读什么文章/书籍来让自己熟悉内核等?

我有6年的编程经验,但他们都是在系统上使用高级语言,这是由内核实现的。

任何帮助都是感激的。谢谢!:)

…引导扇区加载程序将位于内存地址0x7C00(如果我是对的)的磁盘的512字节数据加载到RAM

由于机器正在启动,RAM必须为空,因此引导加载程序在RAM的0x0000处加载?

0000:7C00RAM地址。RAM的意思是"随机存取存储器",意思是存储器中的每个位置都可以直接访问。没有什么比"空ram"更好的了。您也可以参考INT13中断函数"从驱动器读取扇区":其中一个参数(在ES:BX中传递)需要指向将存储扇区内容的目标地址。因此,BIOS所做的就是从驱动器加载512字节并将其存储到0000:7C000000:7DFF,然后跳转到0000:7C00执行主引导加载程序代码。

我应该读什么文章/书来让自己熟悉内核等?

这个Wiki非常有用:http://wiki.osdev.org/Main_Page。关于引导过程,请查看http://wiki.osdev.org/Boot_Sequence.

由于机器正在启动,RAM必须为空,因此引导加载程序加载在0x0000的RAM?

即使是启动,RAM也不是空的。因此,它将无法使用0x00000。因为在O/S执行之前,BIOS也会在RAM中创建中断表。(这就是为什么你可以按f2, f10或删除等键,进入BIOS设置。如果没有中断处理程序,您将无法这样做。)

相关内容

  • 没有找到相关文章

最新更新