进入保护模式的步骤是:
1、关中断;
2、打开A20地址线,使之能访问1M以上的内存;
3、设置GDT; GDT知识可查看《Intel微处理器 第8版》p541 也可以查看 Intel开发手册
4、加载GDT;
5、进入保护模式,跳转到setup.s
boot.s的源代码如下所示
.text
.global start
.include "kernel.inc"
.code16
start:
jmp $0x0, $code
msg:
.string "1kos booting......\x0"
code:
movw $0xb800,%ax #显存地址在0xb8000
movw %ax, %es
xorw %di, %di #es:di = 0xb8000
xorw %ax, %ax
movw %ax, %ds #ds:si = msg
movw $msg, %si
cld #si和di自增
movb $0x07, %ah #字符属性:黑底白字
#打印msg信息
print_c:
cmp $0x0, (%si)
je load
lodsb #ds:[si] -> al, ++si
stosw #ax -> es:[di], di += 2 #al=字符 ah=属性
jmp print_c
#读取kernel到0x7e00上
load:
#设置临时栈
xorw %ax, %ax