日期:2014-05-16  浏览次数:20923 次

关于80x86的寻址的问题:《一个操作系统的实现》
再看于渊老师的《一个操作系统的实现》这本书,在实模式这章的开头3.1卡了好久,现在还是有一点点不明白,想问下各位网友:
  书中说
  selectorVideo equ LABL_DESC_VIDEO - LABEL_GDT
  这里的selectorVideo 是一个选择子,之后又说这个是一个偏移量,我之后也看了些资料,我明白他为什么会是个偏移量了,可是为什么又说它是个选择子呢?说他是偏移量的话嘛,它就是两个地址相减的值,很容易理解成是一个偏移量,可是如果是选择子的话,要用后三位来做TI和RPL,那它又是怎么用两个地址相减后,就得到了他是一个选择器呢?他是怎样控制后三位的呢?不是说要用后三位来判断权限和是否是GDT还是LDT吗?
  谢谢各位啦...

------解决方案--------------------
倒是经常听过此书,一直都未曾拜读过.

所以只说说可能的原因:

dt表中一个元素是8byte
2的3次方就是8
那么就可以利用这后3个bit

比如一个元素偏移地址是0x08

那么我可以传0x08 ~ 0x0f 之间值做为选择子.

然后真正寻值是把它减去余8后的值(这其实是把最后三个bit截断了.这三个bit便可做判断权限用), 就得到真实的偏移.


------解决方案--------------------
gdt每项8bit,也就是说偏移量都会是8的倍数,那么偏移量(也就是选择子的后三位就空出来了),空出的后三位用来设定权限等,比如要设定选择子的rpl为3:
selectorVideo equ LABL_DESC_VIDEO - LABEL_GDT+3就行,也就是说,这个选择子需要偏移量加上一值才行,不知道我说清楚没