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

Linux BIOS是否将512字节引导加载程序复制到0x7c00,linux,assembly,kernel,bios,floppy,Linux,Assembly,Kernel,Bios,Floppy,我正在写一个内核;在写这么复杂的东西之前,我认为对内核、引导加载程序、寄存器、BIOS等进行一些理论性的阅读不仅有帮助,而且也很重要 说(我引述): 然后它接着说: The first sector of a diskette can be loaded at address 0000:7C00. 因此,引导扇区加载程序将驻留在内存地址0x7C00(如果我是对的话)的磁盘的512字节数据加载到RAM中;现在,我的问题是: 由于机器正在引导,RAM必须为空,因此它在RAM的0x0000处加载

我正在写一个内核;在写这么复杂的东西之前,我认为对内核、引导加载程序、寄存器、BIOS等进行一些理论性的阅读不仅有帮助,而且也很重要

说(我引述):

然后它接着说:

The first sector of a diskette can be loaded at address 0000:7C00. 
因此,引导扇区加载程序将驻留在内存地址0x7C00(如果我是对的话)的磁盘的512字节数据加载到RAM中;现在,我的问题是:

  • 由于机器正在引导,RAM必须为空,因此它在RAM的0x0000处加载的引导加载程序
  • (与此上下文无关)有没有任何方法可以获得GRUBLegacy(v.9x)引导加载程序的源代码解释
  • 最后,为了熟悉内核等,我应该阅读哪些文章/书籍
我有6年的编程经验,但他们都在系统上使用高级语言,这是由内核实现的

感谢您的帮助。谢谢!:)

。。。引导扇区加载程序将驻留在内存地址0x7C00(如果我是对的话)的磁盘的512字节数据加载到RAM中

由于机器正在启动,RAM必须是空的,所以它在RAM的0x0000处加载的引导加载程序

编号。
0000:7C00
指的是RAM地址。RAM意味着“随机存取存储器”,意味着存储器中的每个位置都可以直接存取。没有什么比得上“空内存”。您也可以参考INT13中断功能:其中一个参数(在ES:BX中传递)需要指向存储扇区内容的目标地址。因此,BIOS所做的是从驱动器加载512字节并将其存储到
0000:7C00
0000:7DFF
,然后跳到
0000:7C00
以执行主引导加载程序代码

为了熟悉内核等,我应该阅读哪些文章/书籍

这个Wiki非常有用:。有关引导过程,请参阅

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


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

引导扇区加载程序是BIOS中的代码(通电/复位后),它从磁盘读取引导扇区(前512字节),并将其复制到
0000:7c00
。加载引导扇区后,BIOS将
jmp
转到
0000:7c00
引导扇区代码将开始执行的位置。非常感谢!与java和C++相比,这有点令人困惑。
The first sector of a diskette can be loaded at address 0000:7C00.