段描述符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

posted @ 2022-02-04 17:41  zpchcbd  阅读(555)  评论(0)    收藏  举报