保护模式下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。
[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。
相关文章推荐
- 保护模式下ldt使用
- 保护模式虚拟机使用qemu的snapshot参数引发的惨案
- 使用 gate 构建保护模式的 protected 核心
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- 操作系统实验五:保护模式之初步认知门任务(求助:如何使用其他指令替代或模拟retf指令)
- 使用熔断器设计模式保护软件
- 保护模式下三个重要的系统表——GDT、LDT和IDT
- 使用熔断器设计模式保护软件
- 操作系统实验六:保护模式之使用调用门提升特权级
- 保护模式编程之(一)——分段机制与GDT/LDT
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- 不能正常使用网银Win8.1怎么启用或禁用IE11保护模式
- 实模式/保护模式,GDT/LDT的含义
- 保护模式学习笔记:LDT
- 保护模式下三个重要的系统表——GDT、LDT和IDT
- 《Orange’s 一个操作系统的实现》3.保护模式4----LDT(Local Descriptor Table)
- 《Orange’s 一个操作系统的实现》3.保护模式4----LDT(Local Descriptor Table)
- 实模式/保护模式,GDT/LDT的含义