一、回顾

在前面的课程学习中我们了解到,段寄存器有96位,其中80位不可见,包括Base,limit,attribute。16位可见,即段选择子selector。

对段寄存器进行写入时,CPU根据段选择子到GDT表中寻找段描述符,段描述符共8字节,64位,CPU根据段描述符填充段寄存器。

那么问题就是,如何用64位的段描述符来填充80位的段寄存器呢?为了解决该问题,我们需要学习段描述符的P,G位。

段描述符结构
段寄存器结构

二、P位

这个位比较简单,当P=1时,段描述符有效;当P=0时,段描述符无效。

三、G位

由于Intel考虑向前兼容,我们会发现段描述符的结构比较混乱,东一块西一块的。Attribute在段描述符高4字节的8-23位,Base在段描述符的低4字节的16-31位,高4字节的0-7位和24-31位。上述两个属性没有数据丢失,段寄存器和段描述符内的位数是一样多的。而Limit在段寄存器内占32位,在段描述符内只有20位。

当G=0时,Limit的范围是0x00000000-0x000FFFFF,其中,段描述符的20位在低位,高位补0.
当G=1时,Limit的范围是0x00000FFF-0xFFFFFFFF,其中,段描述符的20位在高位,低位补F。

四、练习

给出下列5个段选择子,从GTD表中查找对应的段描述符,然后填充到段寄存器中。
3、将段描述符填写到段寄存器结构体中(段选择子:23 2B 30 3B 53)
23
00100 0 11
index:4
00cff300`0000ffff
WORD Selector: 23
WORD Atrribute: cff3
DWORD Base: 00000000
DWORD Limit: ffffffff

2B
00101 0 11
index:5
80008b04`200020ab
WORD Selector: 2B
WORD Atrribute: 008b
DWORD Base: 80042000
DWORD Limit:000020ab

30
00110 0 00
index:6
ffc093df`f0000001
WORD Selector: 30
WORD Atrribute: c093
DWORD Base: ffdff000
DWORD Limit: 00001fff

3B
00111 0 11
index:7
0040f300`00000fff
WORD Selector: 3B
WORD Atrribute: 40f3
DWORD Base: 00000000
DWORD Limit: 00000fff

53
01010 0 11
index:A
80008954`af000068
WORD Selector: 53
WORD Atrribute: 0089
DWORD Base: 8054af00
DWORD Limit: 00000068

(4)段描述符P,G位相关推荐

  1. (6)段描述符D/B位

    这节的内容不太重要,记录下来,证明自己学过,以后遇见了不慌. D/B位对不同的段寄存器影响也不同,所以分别讨论. 对DS,ES等数据段: D=1,段上限为4GB D=0,段上限为64KB 对SS段: ...

  2. 【2021.03.10】段描述符与段选择子、GDT、LDT

    要点回顾 前文提到,当写入一个段寄存器的时候,只给了一个16位的数值,但是段寄存器有96位. 那么剩下的80位从哪里来的?这个16位的数值是随便写的吗? Windbg指令 指令 功能 r 查看寄存器 ...

  3. 火哥x86数据段描述符向下拓展的解说

    火哥  windows内核交流QQ 群 1026716399 学保护模式,我们不可避免会学段描述符,那么在段描述符中又分数据段与代码段以及系统相关的门或任务的一些东东, 那么今天我们就来详细说一说数据 ...

  4. (5)段描述符S位,TYPE域

    一.段描述符S位 S=1,表示代码段/数据段: S=0,表示系统段. 二.段描述符TYPE域 TYPE域共4位,可以通过查表来确定其含义. TYPE域高位为0时,表示数据段:高位为1时,表示代码段. ...

  5. 用户层CS段描述符信息

    接着上一篇"内核层CS段描述符信息"https://blog.csdn.net/yusakul/article/details/80724748 Windbg命令窗口输入命令:g, ...

  6. (3)段描述符,段选择子,LES指令

    一.段描述符 GDT表里面存的东西叫段描述符,一个段描述符占8字节,结构如下 暂时不需要知道各个位的作用,先练习一下拆分,在windbg中输入以下命令,打印GDT表. 这里我们打印了GDT表的前5个段 ...

  7. 1.段描述符与段选择子

    80386中段寄存器分别有: ES CS SS DS FS GS LDTR TR 共96位,其中有16位是可见的,80不可见 至于为什么是96位下面有讲 //结构体表示: Struct Segment ...

  8. 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11

    这篇博文,我们编写一个C语言的小程序,来解析数据段或者代码段描述符的各个字段.这样我们阅读原书的代码就会方便一点,只要运行这个小程序,就可以明白程序中定义的数据段或者代码段的描述符了. 这段代码,我用 ...

  9. 数据段描述符和代码段描述符(一)——《x86汇编语言:从实模式到保护模式》读书笔记10

    一.段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符.80X86中有各种各样的段描述符,下图展示了它们的分类. 看了上图,你也许会说:天啊,怎么这么多段描述符啊!我可怎么记住 ...

最新文章

  1. MongoDB涉及的业务比较慢--慢查询优化分析案例--以及参数说明
  2. Gin使用mongo进行增删改查/聚合/数据转换
  3. python flask热更新_python(flask)+apscheduler定时邮件重发两次的问题
  4. 远程桌面无法找到计算机不属于指定网络,远程桌面找不到计算机
  5. 软件设计师冲刺笔记(一)
  6. zabbix 3.0 监控windows 部署
  7. eclipse不能自动编译工程的解决方法
  8. php mysql显示到页面上_从数据库调出数据显示到页面 PHP+Mysql+Html(简单实例)
  9. Warez FAQ中英对照版
  10. 数字信号处理第二章:Z变换及离散时间系统系统分析
  11. 质性数据分析软件NVivo教程:自动编码情感
  12. Linux京东签到教程,京东POP店铺签到有礼操作指南
  13. 医院信息管理系统源码(含数据库脚本)
  14. QQ空间相册批量下载qq相册批量下载专家比骨头小林还厉害
  15. Word 从任意页开始设置页码
  16. php对接石基crs系统,IDeaS 收益管理系统与石基昆仑CRS 3.10成功对接
  17. 【BZOJ4484】【JSOI2015】最小表示(拓扑排序,bitset)
  18. 计算机人工智能应用,计算机在人工智能中的应用研究
  19. 招聘信息薪资范围是12-20K,能否要20K的薪资?
  20. git bash无法复制和黏贴

热门文章

  1. mysql 语句怎样修饰约束_MySQL中的约束,添加约束,删除约束,以及一些其他修饰讲解...
  2. MAT之SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题
  3. Ubuntu20.04中安装shutter
  4. 3D数学 ---- 矩阵和线性变换
  5. 【很早以前的作品】自编游戏之NationFight
  6. [BZOJ1984] 月下“毛景树”
  7. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果...
  8. 自定义PopupWindow
  9. Set集合设置变量自增长
  10. 如何编写一份软件工程实验报告