3.段描述符属性
//结构体表示:
Struct Segment
{
Word selecter //可见部分
Word Atrributes //属性,可读可写可执行 高8~23位
DWORD Base //当前段从哪开始 粉红色部分
DWORD LinIT //当前段整个有多长 浅蓝色部分
}
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
p位:执行汇编指令时会先检测p位如果p为0后面的检测都不用做了
p = 1段描述符有效
p = 0段描述符无效
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
G位:颗粒度
蓝色部分低下16位 上面4位一共20位,最大值为5个f少了12个位
G=0时前面补3个0 -------------000 FFFFF
G=1时后面补3个F -------------FFFFF FFF
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
S位:先判断p位紧接着s位把它分成两大类
s=1 代码或数据描述符
s=0系统段描述符
如果s=0位系统段,它又分成几种类。TYPE域8~11 == 1011 b时,他是一个32位TSS并且处于繁忙中(Buty)
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
TYPE域:
s=1 8~11位为代码或数据描述符,11位为0数据段,1代码段
红箭头9或f才是代码或数据描述符,蓝箭头只要大于8就是代码段,否则位数据段
------------------------------------数据段------------------------------------
A :是否访问过
系统刚启动的时候是没被访问过的没访问过时为A位为0,被访问过后为1
W :是否可写
0时他是不可写,1可写
E:扩展位 0向上扩展,1向下扩展
向上扩展 base-limit内的地址是有效的,向下扩展除了base-limit内的地址所有的地址都是有效的
-------------------------------------代码段-------------------------------------
A:访问位,和数据段意思一样
R:可读位
0时他是不可读,1可读
C:一致位 c=1一致代码段 c=0非一致代码段
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
DB位:
情况一:对CS段的影响
DB=1采用32位寻址方式
DB=0采用16位寻址方式,
前缀为 0x67 时改变寻址方式
情况二:对SS段的影响
DB=1隐式堆栈访问指令(如: PUSH POP CALL)使用32位堆栈指针寄存器ESP
DB=0隐式堆栈访问指令(如: PUSH POP CALL)使用16位堆栈指针寄存器SP
情况三:向下拓展的数据段
D=1段上线为4GB
D=0段上线为64KB