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

wei*_*nda 4 linux assembly kernel floppy bios

我在写一个内核; 在编写这么复杂的东西之前,我认为它不仅是有用的,而且对于对内核,引导加载程序,寄存器,BIOS等进行理论读取也是不完美的.

这篇文章说(我引用):

The boot sector loader. 
This loads the first 512-byte sector from the boot disk into RAM and jumps to it.
Run Code Online (Sandbox Code Playgroud)

然后继续说:

The first sector of a diskette can be loaded at address 0000:7C00. 
Run Code Online (Sandbox Code Playgroud)

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

  • 由于机器正在启动,RAM 必须为空,因此引导加载程序在RAM的0x0000处加载?
  • (与此上下文没有关系)是否有任何方法可以获取GRUB Legacy(v .9x)引导加载程序的源代码说明?
  • 最后,我应该阅读哪些文章/书籍以熟悉内核等?

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

任何帮助表示赞赏.谢谢!:)

And*_*ter 7

...引导扇区加载器将磁盘数据的512字节加载到RAM中,该磁盘位于存储器地址0x7C00(如果我是正确的话)

...

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

No. 0000:7C00是指RAM地址.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.


Kas*_*tha 6

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

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