段界限为什么要减1

orange's 一个操作系统的实现,第3章,pmtest1.asm中,有如下代码

    GdtPtr      dw GdtLen - 1  ; GDT界限


我们知道一个描述符中包含段基址和段界限,那么如果GdtLenGDT的长度,为什么段界限要-1呢?

因为段界限表达的是段内的最大偏移,而不是段的最大长度。

一个简单的例子,加入一个段有如下内存:

var1  db 0x01   ; 偏移0
var2  db 0x02
   ; 偏移1

 

那么段界限应该是1还是2呢?答案是1,最大偏移是1

访问段中数据使用:段基址 + 偏移(所以段界限说明的是这个最大偏移)

 

总之,牢记一点,段界限不是指段的最大长度,而是只段内的最大偏移,所以一定要在段长度的基础上再减1

你可能感兴趣的:(段界限为什么要减1)