x86/x86_64 CPU内存管理寄存器

x86/x86_64处理器提供了4个内存管理寄存器(Memory ManagementRegisters):GDTR、LDTR、IDTR和TR。如下图所示。



 

Global Descriptor Table Register(GDTR)

GDTR寄存器保存GDT的基址和表限(table limit)。基址是GDT的第一个字节的地址,表限(table limit)给出表的大小。

指令LGDT和SGDT是分别用来设置和保存GDTR寄存器的值。上电或重启处理器后,基址默认的值为0,表限(table limit)的值为0FFFFH。在保护模式运行前,作为处理器初始化的一部分,必须在GDTR寄存器中设置新的基址。

在Linux地址映射过程中,会用到GDTR寄存器。在此稍微详细介绍一下指令SGDT,即获取GDTR寄存器的值。SGDT指令的操作如下:

Operation

IF instruction is SGDT

IF OperandSize = 16

THEN

DEST[0:15] ← GDTR(Limit);

DEST[16:39] ← GDTR(Base); (* 24bits of base address stored *)

DEST[40:47] ← 0;

ELSE IF (32-bit Operand Size)

DEST[0:15] ← GDTR(Limit);

DEST[16:47] ← GDTR(Base); (* Full32-bit base address stored *)

FI;

ELSE (* 64-bit Operand Size *)

DEST[0:15] ← GDTR(Limit);

DEST[16:79] ← GDTR(Base); (* Full64-bit base address stored *)

FI;

FI;

 

Local DescriptorTable Register(LDTR)

LDTR寄存器的值包括:16位的段选择码、基址、段限(segment limit)和LDT描述符属性。基址是LDT段的起始地址,段限是段的大小。
指令LLDT和SLDT是分别用来设置和保存LDTR寄存器的值。

 

InterruptDescriptor Table Register(IDTR)

IDTR寄存器的内容是:IDT的基址和大小。
指令LIDT和SIDT是分别用来设置和保存IDTR寄存器的值。

 

Task Register(TR)

TR寄存器的内容包括:16位的段选择码、基址、段限(segment limit)和描述符的属性。由于Linux中没有使用TR寄存器,这里不作详细介绍。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值