理解0.11内核setup.s中实模式与保护模式的切换

mov ax,#0x0001 ! protected mode (PE) bit

lmsw   ax     ! This is it!

lmsw加载机器状态字(对应CR0寄存器位15-0),即CR016位状态为

其它位(15位)

启用保护标志PE

0

1

jmpi   0,8    ! jmp offset 0 of segment 8 (cs)

跳转的逻辑地址为

段选择符(16位)

偏移量(32位)

8

0

其中段选择符

描述符索引(13位)

表指示标示TI1位)

请求特权级RPL2位)

0000000000001

0

00

表示请求特权级0(内核级),使用全局描述符表GDT中第1个段描述符项,该项找出代码的基地址是0。跳转前全局描述符表设置为如下(红色部分为选取的描述符项,共64位)

gdt:

    .word  0,0,0,0       ! dummy

 

    .word  0x07FF     ! 8Mb - limit=2047 (2048*4096=8Mb)

    .word  0x0000     ! base address=0

    .word  0x9A00     ! code read/exec

    .word  0x00C0     ! granularity=4096, 386

 

    .word  0x07FF     ! 8Mb - limit=2047 (2048*4096=8Mb)

    .word  0x0000     ! base address=0

    .word  0x9200     ! data read/write

    .word  0x00C0     ! granularity=4096, 386

 

全局描述表GDT的地址是通过GDTR寄存器得到的,在跳转指令执行之前已通过指令
lgdt   gdt_48     ! load gdt with whatever appropriate

设置好了,指令中gdt_48
gdt_48:

    .word  0x800      ! gdt limit=2048, 256 GDT entries

    .word  512+gdt,0x9   ! gdt base = 0X9xxxx

GDTR寄存器为

32位线性基地址

16位表长度

0x90200 + gdt

0x800

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值