-
-
[求助]《自己动手写操作系统》中有几个不懂的地方
-
发表于:
2013-1-26 23:15
4133
-
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+偏移地址的算法还是用
选择子-->描述符-->对应地址这种算法呢?
先在这里谢谢啦!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)