关于实方式和保护方式的切换的代码有些不明白,哪位大侠指点一下
gdtseg segment use16
gdt label byte
dummy descriptor <>
code descriptor <0FFFFh,,,atce,>
code_sel=code-gdt
;代码段codekseg的描述符
codek descriptor <0FFFFh,,,atce,>
codek_sel=codek-gdt
normal descriptor <0FFFFh,,,atdw,>
normal_sel=normal-gdt
ldtable descriptor <0FFFFh,,,atldt,>
ldt_sel=ldtable-gdt
gdtlen=$-gdt
这段代码中的code_sel=code-gdt是什么意思,是他们的地址相减,还是他们的值相减,应该怎么理解
还有gdtlen=$-gdt中的$是什么意思呢,希望大家多多帮忙!!!
问题点数:50、回复次数:8Top
1 楼mydo(侯佩|hopy|ks)回复于 2006-11-01 09:09:13 得分 25
1 code_sel=code-gdt 取得 code_sel(代码段选择子)在gdt中的索引
2 gdtlen=$-gdt中的$ 取得 gdt 的长度,$就是此时的内存地址Top
2 楼wangt()回复于 2006-11-01 15:37:09 得分 0
mydo你能说说code_sel=code-gdt是按照地址相减还是值相减吗?Top
3 楼mydo(侯佩|hopy|ks)回复于 2006-11-01 15:38:51 得分 0
当然是地址相减Top
4 楼wangt()回复于 2006-11-01 22:07:22 得分 0
那么他们的地址相减应该是8,他们相差8个byte,可是索引应该是1吧,mydo能详细的说说吗?感激不尽Top
5 楼hwman(药师)回复于 2006-11-01 22:13:33 得分 25
索引都是8的倍数。因为段选择子低三位不是索引Top
6 楼wangt()回复于 2006-11-01 22:56:38 得分 0
hwman你好,请问code_sel应该是什么类型的呢??Top
7 楼hwman(药师)回复于 2006-11-01 23:50:49 得分 0
常数类型吧,不是很确定Top
8 楼mydo(侯佩|hopy|ks)回复于 2006-11-02 09:19:32 得分 0
yes 你自己都说了,他们相减的结果是8转成2进制数就是:
0000 0000 0000 1 000
而选择子结构明确指出:
BIT2 BIT1 BIT0
TI RPL
所以他的索引就是GDT中的第一个描述符
Top




