在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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值