段描述符D/B位
前言:段描述符D/B位的笔记
这节课老师就讲了三个方面的知识,视频中老师说不是非常的重要,这边理解即可
还是这张图,一个段描述符的整体结构描述,作为参考

什么是D/B位
从上面可以看到,D/B位的位置是处于高4字节的第22位
D/B位的作用:它会影响相关的相关数据段的寻址方式(我这里说的数据段指的是数据/代码段中的数据段,就比如CS段 代码段其实存储的也是数据,SS段 堆栈段存储的也是数据,我自己的理解)
三种影响
下面对SS段的影响我自己是有点问题的,按道理SS段也不是段寄存器,为什么还会对SS段进行影响呢?老师的解释是比如如下的情况,间接的把es段寄存器赋值给ss,那么此时ss其实也就是es段寄存器了
00E26FE5 > 8CC0 mov ax,es
00E26FE7 8ed0 mov ss,eax
00E26FE9 36:C705 00000>mov dword ptr ss:[0],0x1

对CS段的影响
如果D/B位为1 采用32位寻址方式
如果D/B位为0 采用16位寻址方式
前缀67 改变寻址方式

知识点:
如果原本的段描述符的D/B位为1,此时加了前缀67,那么就变为了16位寻址
如果原本的段描述符的D/B位为0,此时加了前缀67,那么就变为了32位寻址
对SS段的影响
如果D/B = 1 隐式堆栈访问指令(如:PUSH POP CALL) 使用32位堆栈指针寄存器ESP
如果D/B = 0 隐式堆栈访问指令(如:PUSH POP CALL) 使用16位堆栈指针寄存器SP
向下拓展的数据段
如果D/B = 1 段上线为4GB
如果D/B = 0 段上线为64KB


浙公网安备 33010602011771号