进入保护模式,并显示一个'L'
保护模式之前,开A20,载入gdt,
lmsw ax,载入机器状态字一句话就可以进入保护模式。
进入后要立即长跳转到32位代码。
/*设置文件*/
.code16
.text
mov $3,%ax
int $0x10
/*显示进入设置文件*/
mov %cs,%ax
mov %ax,%ds
mov %ax,%es
mov %ax,%fs
mov %ax,%ss
mov $0x1000,%sp
/*关中断*/
cli
/*打开A20*/
inb $0x92,%al
orb $0x02,%al
outb %al,$0x92
/*加载gdt*/
lgdt gdt_48
/*进入保护模式*/
mov $1,%ax
lmsw %ax
/*跳转到32位模式下偏移地址*/
ljmp $0x08,$start32
.code32
start32:
mov $0x10,%ax
mov %ax,%ds
mov %ax,%es
movl $0x28000,%esi
movb $'L',%ds:(%esi) /*在(0,0)处显示一个L*/
jmp .
gdt:
.word 0,0,0,0 /*空描述符,保留*/
/*内核代码段 段基地址0x90000,段限4G*/
.word 0xffff
.word 0x0000
.word 0x9a09
.word 0x00cf
/*内核数据段 段基地址0x90000,段限4G*/
.word 0xffff
.word 0x0000
.word 0x9209
.word 0x00cf
gdt_48: /*指示了gdt的位置和大小*/
.word 0x800 /*最大0x800*/
.word gdt /* 32位基地址,这里拆分成2个字*/
.word 0x9