首页
社区
课程
招聘
[求助]《自己动手写操作系统》中有几个不懂的地方
发表于: 2013-1-26 23:15 4132

[求助]《自己动手写操作系统》中有几个不懂的地方

2013-1-26 23:15
4132
1.书上每次写GDT表中描述符的时候,都要把第一个描述符变为空描述符(即描述符为0),后面几个描述符才是各个段的描述符,为什么?
2.16位代码段中有这样一句:jmp dword SelectorCode32:0,其中SelectorCode32为32位代码段的选择子,定义如下:

SelectorCode32          equ    LABEL_DESC_CODE32 - LABEL_GDT

LABEL_DESC_CODE32是GDT表中的32位代码段描述符,LABEL_GDT就是我前面说过的GDT表开头的空描述符
我知道这句代码的功能是将SelectorCode32装入cs,然后跳转到SelectorCode32:0处,不过,这里的段地址和偏移地址是怎么组合的?以前用DOS学汇编时是段地址x16+偏移地址,现在情况不同了,选择子仅仅是指向描述符的索引,描述符中规定了段的各种属性,需要抽取其中的段基址,段界限等数据,并检查各种属性,才能找到相对应的地址,这都是BIOS干的活?OS只负责写选择子:偏移地址就可以找到对应的地址了?那BIOS怎么知道是用以前那种段地址x16+偏移地址的算法还是用选择子-->描述符-->对应地址这种算法呢?
先在这里谢谢啦!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2120
活跃值: (73)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
1. 参看Intel手册Vol3A 3-21
The first descriptor in the GDT is not used by the processor.
规定第一个GDT没有被使用

2. 不是BIOS寻址的, 是CPU. 在jmp dword SelectorCode32:0之前, 开启了保护模式, 所以可以知道不是段地址x16+偏移地址
2013-1-27 02:07
0
雪    币: 103
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢啦,看来Intel手册也要好好看,那个jmp还不是太理解,我再琢磨琢磨
2013-1-27 21:27
0
游客
登录 | 注册 方可回帖
返回
//