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。
- CS:代码段寄存器,指向包含程序指令的段
- DS:数据段寄存器,指向包含静态数据或全局数据的段
- SS:栈段寄存器,指向包含当前程序栈的段
- ES、FS、GS:一般用途,可以指向任何段
16位的段寄存器不能保存32位的段基地址,所以,需要增加段描述符(8字节),在段描述符中,分出4字节作为段基地址。而段寄存器只用来保存段选择符,段选择符用于定位段描述符表中的表项。
段选择符结构
16位长段选择符结构如下:
指令指针寄存器和标志寄存器
- EIP: 指令寄存器可以说是CPU中最最重要的寄存器了,它指向了下一条要执行的指令所存放的地址(相对于段寄存器CS的偏移量),CPU的工作其实就是不断取出它指向的指令,然后执行这条指令,同时指令寄存器继续指向下面一条指令,如此不断重复。EIP中低16位可以单独访问,叫做IP,用于16位寻址。在 x64 架构下,32位的 EIP 升级为64位的 RIP寄存器。
- 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 进一步提升了复杂应用的效率。
热门推荐
黄灯亮起,别急着冲!安全第一!
闯黄灯是违章行为吗
小车抢黄灯撞上对向车辆负全责 责任划分需综合考量
干细胞疗法价格透明化:每针费用你必须知道
间充质干细胞治疗人体八大系统疾病,分别都起到怎样的疗效?
2025年OpenAI重塑职场:1100万个新岗位将诞生,这些技能最吃香
如何准确计算物品的实际价值?这种实际价值的计算方法有何依据?
如何全面评估玉镯的品质?从材料、工艺到款式,详解判断好坏的标准
OpenCog:引领AGI技术新风向
AGI来袭!你的工作会被取代吗?
暑期普法:让法治之光照亮青少年成长之路
万宁多样海上游玩项目满足游客体验
万宁冲浪海滩景点与安全提示
年轻人如何实现财务自由:你的未来,不需要靠运气
掌握科学的柯尔鸭洗澡技巧
小鸭子洗澡全攻略,你get了吗?
飞机的象征意义
ICLR 2024热议:AGI离我们还有多远?
如何管理好保安项目经验
曾国藩的生平简介:晚清名臣曾国藩的传奇人生
在路上遇到消防车需要让行吗
如何清除u盘重复的文件
编程项目如何管理文件夹
从理念到实践:揭秘温泉度假村的设计思路与特色
王羲之书法展引爆朋友圈:你去打卡了吗?
《圣教序》:书法初学者的必修课
二战往事:达尔文港空袭背后的澳日恩怨
科科达战役:澳日战场上的生死较量
二战中的澳日关系:从珊瑚海到中途岛
传统医学:引领健康瘦身行业的新潮流