Chinaunix

标题: 保护模式下寻址请教 [打印本页]

作者: xiaoQ008    时间: 2009-04-01 14:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: mik    时间: 2009-04-01 14:28
原帖由 haohao06 于 2009-4-1 14:37 发表
当前的LDTR指向GDT中的一个表项,该表项标示所用LDT的基地址.
然后再根据段寄存器中的段选择子在LDT中寻找基地址.
GDTR和LDTR不同.GDTR保存GDT的基地址和长度.LDTR保存LDT在GDT中的选择子


你还没能透彻理解 GDT/LDT、GDTR/LDTR
再好好看看手册
作者: haohao06    时间: 2009-04-01 14:37
标题: 回复 #1 xiaoQ008 的帖子
当前的LDTR指向GDT中的一个表项,该表项标示所用LDT的基地址.
然后再根据段寄存器中的段选择子在LDT中寻找基地址.
GDTR和LDTR不同.GDTR保存GDT的基地址和长度.LDTR保存LDT在GDT中的选择子
作者: mik    时间: 2009-04-01 14:45
是从当前的 LDT 表中取

什么是当前的 LDT 呢?

------> LDTR.base + LDTR.limit 就是当前的 LDT
作者: haohao06    时间: 2009-04-01 14:49
多谢提醒.我再温习温习
作者: haohao06    时间: 2009-04-01 14:59
sorry楼主
.我只记得给LDTR加载段选择子,忘了它base和limit会在load ldtr时自动加载~~~
作者: xiaoQ008    时间: 2009-04-01 15:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: mik    时间: 2009-04-01 15:04
原帖由 xiaoQ008 于 2009-4-1 15:00 发表
我的理解是这样的、
通过LDTR中的选择器,其中的TI=0
通过index(位3-位15)
在GDT中找到段描述符
再根据这个段描述符提供的当前LDT的基地址和limit找到次LDT
是不是这样的

明确地告诉你:不对
作者: xiaoQ008    时间: 2009-04-01 15:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: xiaoQ008    时间: 2009-04-01 15:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: mik    时间: 2009-04-01 15:12
LZ 在自言自语吗
如果这样,偶就不打搅了
作者: xiaoQ008    时间: 2009-04-01 15:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: mik    时间: 2009-04-01 15:38
原帖由 xiaoQ008 于 2009-4-1 15:21 发表

不是的
我只是没能理解你的意思
呵呵
按照您的意思
LDTR.base+LDT.limit表示的是当前的LDT
那么LDTR中的选择子 就是用来在这个LDT中找段描述符了?
是这样的吧?


有5点,你必须要了解的:

1、LDT descriptor,这个是一个 system descriptor。除了类型外,和一般的 segment descriptor 格式一样

2、system descriptor 只能存放在 GDT 中,也就是 LDT descriptor 必须放在 GDT 中

3、LDTR 的内部格式为 16+16+16+64: 16位的 selector +16 位的 attribute + 16 位的 limit + 64 位的 base, 在32位下,只使用低32位 base

4、LDT 的加载过程:使用 LLDT 指令加载 LDT descriptor 时,会使用 LDTR.base = LDTR descriptor.base, LDTR.limit = LDTR descriptor.limit 依次类推

5、 LDT 的加载方式:(1) 使用 LLDT selector 指令, (2) 使用 TSS selector 进行任务切换时 (3) 使用 task gate 进行任务切换时
作者: xiaoQ008    时间: 2009-04-01 16:00
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2