打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux源码学习笔记day8 就这几行代码就进入保护模式了?

https://m.toutiao.com/is/BoKM1TG/?= 


上一次我们介绍了全局描述符表(gdt)。 为进入保护模式做好了准备,今天我们接着往下看。

A20地址线

用途:用来突破20位地址线的位宽,变成32位可用,用来增加内存寻址范围。

如果不打开A20地址线,如果给的地址数据超出20位就会把高位忽略

比如下面这个例子,最高位的1就会被忽略。

1 0000 00000000 00000000

具体代码如下:

	mov	$0xD1, %al	# command write	out	%al, $0x64	mov	$0xDF, %al	# A20 on    out	%al, $0x60

模式切换,开始~

接下来就是真正切换模式了。 就是这三行代码:

#mov $0x0001, %ax # protected mode (PE) bit #lmsw %ax # This is it! ljmp $sel_cs0, $0 # jmp offset 0 of code segment 0 in gdt

前面2行,把寄存器cr0 的位0设置成1,就从实模式切换成保护模式了。

接下来又是一个跳转指令, cs寄存器的值是 ip寄存器的值是

前面有说过,模式改成保护模式后,物理地址的转化逻辑就变了,段寄存器里的值是段选择子了。

8 用二进制表示就是:

00000,0000,0000,1000

段选择子的结构是:

所以现在描述符索引值是1,那现在去**全局描述符表(gdt)**中招索引1的描述符。

现在代码段描述符数据段描述符都是0,现在偏移量也是0。 所以,加起来还是0。

接下来就是跳转到内存地址为0的地方开始。 现在的内存地址0处,放的是操作系统的代码。 0地址处的代码就是head.s里的代码。 接下来就要向head.s进军了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
操作系统:CPU工作模式
编写自己的操作系统
保护模式下寻址(易懂)
从头开始编写操作系统(9) 第8章:保护模式 - xiaoxiaoyaya的专栏 - CS...
第11章 保护模式下的程序设计简介
NASM汇编笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服