上图是我自己想的图,大家看看有什么错误帮忙指出
有几个不明白的地方..
1.书上说的GDTR中的LDT段和LDT表有什么关系?
2.xxxx:yyyyyyyy xxxx应该和LDTR是两个段寄存器吧?
3是不是当xxxx中的TI位=1才使用LDTR寄存器?
有没有好心人带带小弟...278518173
先谢谢各位..
------解决方案--------------------------------------------------------
Intel手册 卷三,大概第42页,那个表看懂就行
------解决方案--------------------------------------------------------
两个不同的寄存器,分别用来使用ldt和gdt用的。使用的区别就是selector的局部描述符置位,ldt和gdt区别不大,但用处完全不一样。
------解决方案--------------------------------------------------------
我也刚学汇编,说说我的理解,可能有误,仅供参考。
1. xxxx:yyyyyyyy 是一个虚拟地址,xxxx在段选择器中,比如ds,es等。
2. T1为0时,表示在GDT中,很容易理解。
3. T1为1时,表明段描述符在LDT。这时要先找到LDT,此时GDTR中为GDT基址,LDTR为这个LDT在GDT中的描述符索引,执行完这步我们才得到LDT,然后根据xxxx的高13为索引从前面LDT中得到段描述符。
说了这么多,通俗点,就是使用LDT时,多了一个间接索引,也就是你说的“GDTR中的LDT段”。这个索引保存在LDTR中,而从GDT中根据索引得到实际LDT。得到LDT后就跟T1为0时从GDT中取段描述符一样了。
感觉win32中好多间接索引概念的东西,像上下文中中断表,页表等。