保护模式下ldt使用

;kernel.s

[BITS 16]

ORG 0
lgdt [GDT]
start:
mov ax,0x18
lldt ax
jmp 4:0;犯过错,写成3:0,结果13异常,cs==0
jmp start
GDT:
DW 31;犯过错,写成30,结果13号异常,index>xxxx
DW gdt,0
gdt:
DW 0,0,0,0
DW 0xffff
DW 0X0000
DW 0X9E00
DW 0X0000
DW 0Xffff;段限0xffff
DW 0X8000;基地址0x0b8000
DW 0XF20b;不可拓展可写
DW 0X0000
DW 0Xffff;0x18,ldt
DW LDT
DW 0X8200;ldt描述符有自己的格式
DW 0X0000
jmp start
LDT:
DW 0Xffff
DW TASK0
DW 0X9E00
DW 0X0000
TASK0:
mov ax,0x10
mov gs,ax
mov bl,'t'
mov [gs:((80*0+0)*2)],bl

jmp TASK0

总结:

1.向GDT中加入LDT描述符

>ldt描述符跟gdt是不一样的。ldt是系统描述符,而且type一定为2。(这个描述符跟LDT表中的描述符要注意区分)

>基地址可以用LDT符号

2.准备好LDT表

>LDT表的第一个描述符可以用

>表中的数据段,代码段和GDT的数据段,代码段没有区别

>基地址可以用TASK0符号

3.lldt 

>lldt 0x18,是不允许直接接操作数的。

>如果操作数写错了,可能发生13号异常。

4.jmp

>jmp ldt选择子:0就ok。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值