进入保护模式

本文为 第11章笔记

以下图2, 图4和图5截自Intel手册


全局描述符表

  • 全局描述符表中存放着段描述符, 每个段描述符8个字节.
  • 为了跟踪全局描述符表, 处理器内部有一个48位寄存器, 叫做全局描述符表寄存器(GDTR), GDTR分为两部分,分别为32位的线性地址和16的边界, 32位线性基地址部分保存的是全局描述符表在内存中的起始线性地址, 16位边界部分是全局描述符表的边界(界限), 其值等于表的大小(总字节数) - 1, 因为从偏移0开始. 如果界限值是0, 表示表的大小是1字节.
  • 因为GDT的界限是16位的, 故该表最大是2 ^ 16字节, 也就是65536字节(64KB), 又因为一个描述符8字节, 所以该表最多定义8192个描述符.在进入保护模式之后, 处理器立即要按新的内存访问模式工作, 所以, 必须在进入保护模式之前定义GDT, 但是, 由于实模式下只能访问1MB的内存, 故GDT通常多定义在1MB以下的内存范围中, 当然, 允许在进入保护模式后换个位置重新定义GDT


存储器段描述符

每个描述符占8字节, 下图中, 上面位高32位, 下面为低32位

进入保护模式_第1张图片

  • 段描述符中, 指定了32位的段起始地址和20位的段边界, 在实模式下, 段地址并非真实的物理地址, 计算物理地址时需要左移4位. 和实模式不同, 32位保护模式下, 段地址是32位的,如果未开启分页功能, 该线性地址就是物理地址. 段基地址可以是0~4GB范围内的任意地址, 段界限用来限制段的扩展范围, 因为访问内存的方法是用段基地址加上偏移量,

你可能感兴趣的:(汇编,汇编语言,保护模式,GDTR,全局描述符,选择子)