您的位置:首页 > 其它

保护模式下ldt使用

2012-10-03 12:35 197 查看
;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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: