Linux0.11最开始的代码是用汇编语言写的bootsect.s,位于boot文件夹下。该文件通过编译后(被编译成二进制文件),存放在启动区的第一扇区
当我们把操作系统代码编译好后存放在硬盘的启动区中,开机后,BIOS 程序就会将代码搬运到内存的 0x7c00 位置,而 CPU 也会从这个位置开始,一条一条指令不断地往后执行
这里需要注意,BIOS只把启动区的512字节加载到内存,但操作系统代码并不是这512字节,操作系统的代码还在硬盘的其他扇区,这些就需要我们自己来处理
bootsect.s的前两行代码
会被编译并存储在启动区,然后搬运到0x7c00,之后也会称为cpu执行的第一条指令
mov ax,0x07c0
mov ds,ax
这两行汇编代码的意思是:把0x07c0这个值复制到AX中,再把AX中的值赋值到DS中
这两行代码执行完了就是DS指向0x7c00这个内存区域
(由于实模式下的寻址方式,这里DS中的值是0x07c0,而实际指向的值是0x7c00,即向左移动了4位)
现在硬件中就是这样的情况
简单总结一下,到现在学习的代码主要完成了这两步操作:第一步,BIOS 将操作系统代码加载到内存 0x7c00;第二步,通过 mov 指令将默认的数据段寄存器 ds 的值改为 0x07c0,方便以后的基址寻址方式。