保护模式下的栈边界与大小

向上扩展的段界限的含义是 向上增长的最大偏移量
栈的段界限含义与之不同,是 不允许访问的 最大/最小 偏移量
所以栈的最小偏移量还要在此基础上+1

栈的偏移量自然指的是 esp 的偏移量

最小偏移量 <= esp <= 0xFFFFFFFF

这个最小偏移量就是栈的低端有效地址。
高端有效地址就是 (段的基地址 + 0xFFFFFFFF) 也就是 (段的基地址 - 1)

对于粒度为 4KB 的段

实际段界限
= ( 描述符中的段界限+1 )*0x1000 - 1
= 描述符中的段界限*0x1000 + 0xFFF

举个例子:

段的基地址是 0x7C00 ,描述符中段界限是 0xFFFFE ,粒度是 4KB
那么它的实际段界限是 0xFFFFEFFF,最小偏移量等于实际段界限+1=0xFFFFF000
栈的低端有效地址就是最小偏移量+段的基地址=0x00007C00+0xFFFFF000=0x00006C00
段的高端有效地址是0x00007C00+0xFFFFFFFF=0x00006BFF

你可能感兴趣的:(保护模式下的栈边界与大小)