问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

X86架构寄存器介绍

创作时间:
作者:
@小白创作中心

X86架构寄存器介绍

引用
CSDN
1.
https://blog.csdn.net/sinat_56559405/article/details/146482942

X86架构是计算机领域最广泛使用的处理器架构之一,其寄存器系统的设计对理解计算机体系结构至关重要。本文将详细介绍X86架构中的各种寄存器,包括它们的功能、作用以及在不同模式下的表现。

通用寄存器

8个通用寄存器,分别是:EAX、EBX、ECX、EDX、EBP、ESP、EDI、ESI,其中,低16位又可以组成8个16位的寄存器。另外,AX、BX、CX、DX,每个又可以细分为两个8位的寄存器。

在64位系统中,分别叫做RAX、RBX、RCX、RDX、RBP、RSP、RSI、RDI。

段寄存器

8086有6个16位的段寄存器:CS、DS、SS、ES、FS、GS。

  1. CS:代码段寄存器,指向包含程序指令的段
  2. DS:数据段寄存器,指向包含静态数据或全局数据的段
  3. SS:栈段寄存器,指向包含当前程序栈的段
  4. ES、FS、GS:一般用途,可以指向任何段

16位的段寄存器不能保存32位的段基地址,所以,需要增加段描述符(8字节),在段描述符中,分出4字节作为段基地址。而段寄存器只用来保存段选择符,段选择符用于定位段描述符表中的表项。

段选择符结构

16位长段选择符结构如下:

指令指针寄存器和标志寄存器

  1. EIP: 指令寄存器可以说是CPU中最最重要的寄存器了,它指向了下一条要执行的指令所存放的地址(相对于段寄存器CS的偏移量),CPU的工作其实就是不断取出它指向的指令,然后执行这条指令,同时指令寄存器继续指向下面一条指令,如此不断重复。EIP中低16位可以单独访问,叫做IP,用于16位寻址。在 x64 架构下,32位的 EIP 升级为64位的 RIP寄存器。
  2. EFLAGS: 标志寄存器,存放处理器标志位。

标志位
名称
说明
CF
Carry Flag
无符号数溢出(如 ADD 后进位)。算术操作产生的结果在最高有效位(most-significant bit)发生进位或借位则将其置1,反之清零。这个标志指示无符号整型运算的溢出状态,这个标志同样在多倍精度运算(multiple-precision arithmetic)中使用。
PF
Parity Flag
奇偶校验(最低字节中 1 的个数是否为偶数)。如果结果的最低有效字节(least-significant byte)包含偶数个1位则该位置1,否则清零。
AF
Adjust Flag
辅助进位标记。如果算术操作在结果的第3位发生进位或借位则将该标志置1,否则清零。这个标志在BCD(binary-code decimal)算术运算中被使用
ZF
Zero Flag
结果为零(CMP 后判断相等性)
SF
Sign Flag
结果为负数(最高位为 1)。该标志被设置为有符号整型的最高有效位。(0指示结果为正,反之则为负)
OF
Overflow Flag
有符号数溢出(如 ADD 后符号异常)。如果整型结果是较大的正数或较小的负数,并且无法匹配目的操作数时将该位置1,反之清零。这个标志为带符号整型运算指示溢出状态。
DF
Direction Flag
字符串操作方向。这个方向标志(位于EFLAGS寄存器的第10位)控制串指令(MOVS, CMPS, SCAS, LODS以及STOS)。设置DF标志使得串指令自动递减(从高地址向低地址方向处理字符串),清除该标志则使得串指令自动递增。STD以及CLD指令分别用于设置以及清除DF标志。
IF
Interrupt Flag
控制是否响应可屏蔽中断(CLI 禁用)。该标志用于控制处理器对可屏蔽中断请求(maskable interrupt requests)的响应。置1以响应可屏蔽中断,反之则禁止可屏蔽中断。
TF
Trap Flag
单步调试(触发 INT 1 异常)。将该位设置为1以允许单步调试模式,清零则禁用该模式。
IOPL
I/O Privilege Level
指示当前运行任务的I/O特权级(I/O privilege level),正在运行任务的当前特权级(CPL)必须小于或等于I/O特权级才能允许访问I/O地址空间。这个域只能在CPL为0时才能通过POPF以及IRET指令修改。
NT
Nested Task
这个标志控制中断链和被调用任务。若当前任务与前一个执行任务相关则置1,反之则清零。
RF
Resume Flag
控制处理器对调试异常的响应
VM
Virtual-8086 Mode
置1以允许虚拟8086模式,清除则返回保护模式。
AC
Alignment Check
该标志以及在CR0寄存器中的AM位置1时将允许内存引用的对齐检查,以上两个标志中至少有一个被清零则禁用对齐检查。
VIF
Virtual Interrupt Flag
该标志是IF标志的虚拟镜像(Virtual image),与VIP标志结合起来使用。使用这个标志以及VIP标志,并设置CR4控制寄存器中的VME标志就可以允许虚拟模式扩展(virtual mode extensions)
VIP
Virtual Interrupt Pending
该位置1以指示一个中断正在被挂起,当没有中断挂起时该位清零。【Software sets and clears this flag; the processor only reads it.】与VIF标志结合使用。
ID
ID Flag
程序能够设置或清除这个标志指示了处理器对CPUID指令的支持。

控制寄存器

CR0、CR1、CR2、CR3共四个控制寄存器。

CR0

标志位
说明
PE
保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE和PG标志都要置位。
MP
数学存在位
EM
仿真位
TS
任务切换位.(Task Switched)标志。该标志用于推迟保存任务切换时的协处理器内容,直到新任务开始实际执行协处理器指令。处理器在每次任务切换时都会设置该标志,并且在执行协处理器指令时测试该标志
ET
Extension Type.当该标志为1时,表示指明系统中有80387协处理器,并使用32位协处理器协议。ET=0指明使用80287协处理器
NE
协处理器错误(Numeric Error)标志。当设置该标志时,就启用了x87协处理器错误的内部报告机制;若复位该标志,那么就使用PC形式的x87协处理器错误报告机制。
WP
对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作;当该位复位时则反之。
AM
对齐掩码(Alignment Mask),该位用于控制内存对齐检查。当 AM = 1 时,处理器会执行内存对齐检查。当 AM = 0 时,处理器不会执行对齐检查。
NW
不直写(Not Write-through),该位用于控制写缓冲的写策略。当 NW = 1 时,处理器执行不通过写缓冲进行写操作,而直接写入内存。当 NW = 0 时,处理器使用写缓冲进行写操作。
CD
缓存禁用(Cache Disable),该位用于控制处理器的缓存。当 CD 为 1 时,处理器禁用数据缓存。当 CD 为 0 时,处理器启用数据缓存。
PG
CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址

CR1

CR1是未定义的控制寄存器,供将来的处理器使用。

CR2

CR2是页故障线性地址寄存器,保存最后一次出现页故障(Page Fault)的全 32(或 64) 位线性地址。

CR3

标志位
说明
PWT
页级写穿标志位(Page-Level Write-Through),用于指定页表是否应用写穿策略。
PCD
页级高速缓存禁用标志位(Page-Level Cache Disable),用于指定页表是否应用高速缓存禁用策略。

CR4

  • VME:允许使用虚拟 8086 模式扩展。
  • PVI:保护模式虚拟中断。
  • TSD:禁用处理器在启动过程中使用时间戳计数器。
  • DE:允许调试扩展。
  • PSE:启用超级页(2MB页)
  • PAE:启用物理地址扩展,支持大于4GB的物理内存。
  • 当 PAE = 1 时,是 2-9-9-12 分页。
  • 当 PAE = 0 时, 是 10-10-12 分页。
  • MCE:启用机器检查异常。
  • PGE:启用全局页表。
  • PCE:启用性能监控计数器。
  • OSFXSR:允许操作系统使用 FXSAVE 和 FXRSTOR 指令进行 XMM 寄存器的保存和恢复。
  • OSXMMEXCPT:允许操作系统使用 SSE 指令集的浮点异常。
  • UMIP:防止用户模式下执行特权指令。
  • VMXE:启用虚拟机扩展。
  • SMXE:启用安全模式扩展。
  • FSGSBASE:启用 FS、GS 寄存器的基址存储。
  • PCIDE:启用 PCID(Process Context Identifier)。
  • OSXSAVE:启用 XSAVE 和 XRSTOR 指令。
  • SMEP:启用用户模式执行保护。
  • SMAP:启用内核空间和用户空间地址映射的严格分离。

总结

x86 寄存器系统通过分工协作实现高效计算与控制:通用寄存器处理数据操作,段寄存器管理内存分区,EFLAGS 跟踪状态,控制寄存器管理 CPU 模式。理解其设计对操作系统开发、逆向工程和性能优化至关重要。在 64 位模式下,寄存器扩展和新增的 R8-R15 进一步提升了复杂应用的效率。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号