在Ubuntu下,从零开始写操作系统(2)-笔记

进入保护模式,并显示一个'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

 

你可能感兴趣的:(编程)