段界限为什么要减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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值