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在这里插入图片描述