在第6篇文章中,我们已能导入操作系统内核(该内核非常小,姑且称为内核),但也只是在实模式下,没有进入保护模式。前面我们已经学习了关于保护模式的很多内容,所以让操作系统进入保护模式是非常简单的。这里先解释一下boot,loader,kernel的意思和作用。boot是引导程序,它的作用是把loader(loader专门用于加载kernel)加载到内存,执行loader。loader是加载程序,它的作用是把kernel加载到内存,并进入保护模式,然后,把cpu交给kernel。kernel是操作系统中与硬件直接相关的部分和经常共用的代码。一句话,boot加载loader到内存,执行loader,再由loader加载内核到内存,并进入保护模式,然后,将cpu交给kernel,那么操作系统就启动起来了。
我们这里暂时不考虑kernel,只是让boot加载loader到内存,执行loader,loader进入保护模式(本来在进入保护模式前我们要加载kernel的,但我们还没有kernel,所以暂时不管)。
下面给出代码,这个代码和第6篇文章中的代码很相似,只是加上了进入保护模式的代码。
myboot.asm 的代码
;;nasm 2.07 汇编
;;nasm myboot.asm -o myboot.img
org 7c00H
call welcome ;调用欢迎模块,显示欢迎字符
call loadloader ;导入loader
welcome: ;欢迎模块
mov ax,cs ;调用BIOS的10号中断显示字符
mov es,ax
mov bp,hello
mov bx,000ch
mov dx,0005h
mov cx,18
mov ax,1301h
int 10h
ret
loadloader: ;导入l