我在写一个内核;在编写这么复杂的东西之前,我认为它不仅是有用的,而且对于对内核,引导加载程序,寄存器,BIOS等进行理论读取也是不可取的。
This article说(我引用):
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.
因此,引导扇区加载器将磁盘数据的512字节加载到RAM中,该磁盘位于存储器地址0x7C00(如果我是正确的话)。现在,我的问题是:
我有6年的编程经验,但他们都在系统上使用高级语言,这是由内核实现的。
感谢任何帮助。谢谢! :)
答案 0 :(得分:7)
...引导扇区加载程序将磁盘数据的512字节加载到内存地址0x7C00(如果我是正确的话)进入RAM
...
由于机器正在启动,RAM必须是空的,所以它加载到RAM的0x0000的引导加载程序?
没有。 0000:7C00
指的是 RAM地址。 RAM表示"随机存取存储器",表示可以直接访问存储器中的每个位置。没有像"空RAM"。您还可以参考INT13中断函数"Read Sectors From Drive":其中一个参数(在ES:BX
中传递)需要指向将存储扇区内容的目标地址。因此,BIOS的作用是从驱动器加载512个字节并将其存储到0000:7C00
到0000:7DFF
,然后跳转到0000:7C00
以执行主引导加载程序代码。
我应该阅读哪些文章/书籍以熟悉内核等?
这个Wiki非常有用:http://wiki.osdev.org/Main_Page。有关启动过程,请查看http://wiki.osdev.org/Boot_Sequence。
答案 1 :(得分:0)
由于机器正在启动,RAM 必须是空的,所以 引导加载程序在 RAM 的 0x0000 处加载?
即使是开始,RAM也不会为空。因此它将无法使用 0x00000。因为在 O/S 执行 BIOS 之前,也会在 RAM 中创建中断表。 (这就是为什么您可以按 f2、f10 或删除等键并进入 BIOS 设置。如果没有中断处理程序,您将无法这样做。)。这就是 RAM 不为空的原因。