-
-
[求助]保护模式中段偏移计算的问题
-
发表于:
2005-1-8 23:39
4265
-
原文:
需要注意的是,只有数据段的段属性中才有扩展方向属性位ED,也就是说只有数据段(堆栈段作为特殊的数据段)才有向上扩展和向下扩展之分,其它段都是自然的向上扩展。
数据段的扩展方向和段界限一起决定了数据段内偏移的有效范围。当段最大为1M字节时,在向高端扩展的段内,从0到Limit的偏移是合法有效的偏移,而从Limit+1到1M-1的偏移是非法无效的偏移;在向低端扩展的段内,情形刚好相反,从0到Limit的偏移是非法无效的偏移,而从Limit+1到1M-1的偏移是合法有效的偏移,注意边界值Limit对应地址的有效性。段最大为4G时,情形类似。
由此可见,如果一个段是向下扩展的,则所有的偏移必须大于限长,因为其限长是指下限,其基地址从高地址出开始。反之,若一个段是向上扩展的,则所有偏移必须小于等于限长,因为其限长是指上限,基地址从低地址处开始。通过使用段环绕,可以把向下扩展段定义到任何线性地址且可定义为任何大小。
问题:
1.段界限是有符号数吗?可以是负数吗?
2.在段向
低地址生长、段最大为1M的时候,有效地址是base+limit+1--base+1M-1是不是以下情况:
低地址方向
base
。
。 <==无效地址
。
base+limit+1
。
。 <==有效地址
。
base+1M-1
高地址方向
这样base跟有效地址就被分开了,感觉很奇怪,而且和蓝色部分说法矛盾。
期望高手指导解释一下,感激不尽!!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!