`

CPU常见寄存器介绍

阅读更多

32 位CPU 所含有的寄存器有:
4 个数据寄存器(EAX 、EBX 、ECX 和EDX)
2 个变址和指针寄存器(ESI 和 EDI) 2 个指针寄存器(ESP 和EBP) 
6 个段寄存器(ES 、CS 、SS 、DS 、FS 和GS)
1 个指令指针寄存器(EIP) 1 个标志寄存器(EFlags) 
1 、数据寄存器 
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 
32 位CPU 有4 个32 位的通用寄存器EAX 、EBX 、ECX 和EDX 。对低16 位数据的存取,不会影响高16 位的数据。这些
低16 位寄存 器分别命名为:AX 、BX 、CX 和DX ,它和先前的CPU 中的寄存器相一致。 
4 个16 位寄存器又可分割成8 个独立的8 位寄存器(AX :AH-AL 、BX :BH-BL 、CX :CH-CL 、DX :DH-DL) ,每个寄
存 器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“ 可分可合” 的特性,灵活地处理字/ 字
节的信息。 
 寄存器AX 和AL 通常称为累加器(Accumulator) ,用累加器进行的操作可能需要更少时间。累加器可用于乘、
 除、输入/ 输出等 操作,它们的使用频率很高; 
 寄存器BX 称为基地址寄存器(Base Register) 。它可作为存储器指针来使用;  
 寄存器 CX 称为计数寄存器(Count Register) 。在循环和字符串操作时,要用它来控制循环次数;在位操作
 中,当移多位时,要用CL 来指明 移位的位数; 
 寄存器DX 称为数据寄存器(Data Register) 。在进行乘、除运算时,它可作为默认的操作数参与运算,也
 可 用于存放I/O 的端口地址。 
在16 位CPU 中,AX 、BX 、CX 和DX 不能作为基址和变址寄存器来存放存储单元的地址,但在32 位CPU 中,其32 位
寄存器 EAX 、EBX 、ECX 和EDX 不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,
所以,这些32 位寄存器更具有通用性。 
2 、变址寄存器 
32 位CPU 有2 个32 位通用寄存器ESI 和EDI 。其低16 位对应先前CPU 中的SI 和DI ,对低16 位数据的存取,不影响
高16 位的数 据。 
寄存器ESI 、EDI 、SI 和DI 称为变址寄存器(Index Register) ,它们主要用于存放存储单元在段内的偏移量,
用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 
变址寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 
它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特
殊的功能。 
3 、指针寄存器 
32 位CPU 有2 个32 位通用寄存器EBP 和ESP 。其低16 位对应先前CPU 中的SBP 和SP ,对低16 位数据的存取,不影
响高16 位的 数据。 
寄存器EBP 、ESP 、BP 和SP 称为指针寄存器(Pointer Register) ,主要用于存放堆栈内存储单元的偏移量,
用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 
指针寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 
它们主要用于访问堆栈内的存储单元,并且规定:
BP 为基指针(Base Pointer) 寄存器,用它可直接存取堆栈中的数据; 
SP 为堆栈指针(Stack Pointer) 寄存器,用它只可访问栈顶。 
4 、段寄存器 
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一 个可访问较大物理空间的内存地址。 
CPU 内部的段寄存器:
CS—— 代码段寄存器(Code Segment Register) ,其值为代码段的段值; 
DS —— 数据段寄存器(Data Segment Register) ,其值为数据段的段值; 
ES—— 附加段寄存器(Extra Segment Register) ,其值为附加数据段的段值; 
SS—— 堆栈段寄存器(Stack Segment Register) ,其值为堆栈段的段值; 
FS—— 附加段寄存器(Extra Segment Register) ,其值为附加数据段的段值; 
GS—— 附加段寄存器(Extra Segment Register) ,其值为附加数据段的段值。 
在16 位CPU 系统中,它只有4 个段寄存器,所以,程序在任何时刻至多有4 个正在使用的段可直接访问;在32 位
微机系统中,它有6 个段寄存 器,所以,在此环境下开发的程序最多可同时访问6 个段。 
32 位CPU 有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简
单描述如下: 
实方式: 前4 个段寄存器CS 、DS 、ES 和SS 与先前CPU 中的所对应的段寄存器的含义完全一致,内存单元的逻辑
地址仍为“ 段值:偏移 量” 的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。 
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“ 选择子”(Selector) 的某个值。。 
5 、指令指针寄存器 
32 位CPU 把指令指针扩展到32 位,并记作EIP ,EIP 的低16 位与先前CPU 中的IP 作用相同。 
指令指针EIP 、IP(Instruction Pointer) 是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功
能的系统 中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能
时,不考虑存在指令队列的情况。 
在实方式下,由于每个段的最大范围为64K ,所以,EIP 中的高16 位肯定都为0 ,此时,相当于只用其低16 位
的IP 来反映程序中指令的执 行次序。 
6 、标志寄存器 
一、运算结果标志位
1 、进位标志CF(Carry Flag)
进位标志CF 主要用来反映运算是否产生进位或借位。如果运算结果的最 高位产生了一个进位或借位,那么,其值为1 ,否则其值为0 。 
使用该标志位的情况有:多字( 字节) 数的加减运算,无符号数的大小比较运算,移位操作,字( 字节) 之间移位,专门改变CF 值的指令等。 
2 、奇偶标志PF(Parity Flag)
奇偶标志PF 用于反映运算结果中“1” 的个数的奇偶性。如果“1” 的个数为偶数,则PF 的值为 1 ,否则其值为0 。 
利用PF 可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。 
3 、辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF 的值被置为1 ,否则其值为0 : 
(1) 、在字操作时,发生低字节向高字节进位或借位时;
(2) 、在字节操作时,发生低4 位向高4 位进位或借位时。 
对以上6 个运算结果标志位,在一般编程情况下,标志位CF 、ZF 、SF 和OF 的使用频率较高,而标志位PF 和AF 的使用频率较低。 
4 、零标志ZF(Zero Flag)
零标志ZF 用来反映运算结果是否为0 。如果运算结果为0 ,则其值为1 ,否则其值为0 。在判断运算结果是否为0 时,可使用此标志位。 
5 、符号标志SF(Sign Flag)
符号标志SF 用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补 码表示法,所以,SF 也就反映运算结果的正负号。运算结果为正数时,SF 的值为0 ,否则其值为1 。 
6 、溢出标志OF(Overflow Flag)
溢出标志OF 用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所 能表示的范围,则称为溢出,OF 的值被置为1 ,否则,OF 的值被清为0 。 
“ 溢出” 和“ 进位” 是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。 
二、状态控制标志位
状态控制标志位是用来控制CPU 操作的,它们要通过专门的指令才能使之发生改变。 
1 、追踪标志TF(Trap Flag)
当追踪标志TF 被置为1 时,CPU 进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这 种方式主要用于程序的调试。 
指令系统中没有专门的指令来改变标志位TF 的值,但程序员可用其它办法来改变其值。 
2 、中断允许标志IF(Interrupt-enable Flag)
中断允许标志IF 是用来决定CPU 是否响应CPU 外部的可屏蔽中断发 出的中断请求。但不管该标志为何值,CPU 都必须响应CPU 外部的不可屏蔽中断所发出的中断请求,以及CPU 内部产生的中断请求。具体规定如下: 
(1) 、当IF=1 时,CPU 可以响应CPU 外部的可屏蔽中断发出的中断请求; 
(2) 、当IF=0 时,CPU 不响应CPU 外部的可屏蔽中断发出的中断请求。 
CPU 的指令系统中也有专门的指令来改变标志位IF 的值。 
3 、方向标志DF(Direction Flag)
方向标志DF 用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第 5.2.11 节—— 字符串操作指令—— 中给出。在微机的指令系统中,还提供了专门的指令来改变标志位DF 的值。 
三、32 位标志寄存器增加的标志位
1 、I/O 特权标志IOPL(I/O Privilege Level)
I/O 特权标志用两位二 进制位来表示,也称为I/O 特权级字段。该字段指定了要求执行I/O 指令的特权级。如果当前的特权级别在数值上小于等于IOPL 的值,那么,该I/O 指令 可执行,否则将发生一个保护异常。 
2 、嵌套任务标志NT(Nested Task)
嵌套任务标志NT 用来控制中断返回指令IRET 的执行。具体规定如下: 
(1) 、当NT=0 ,用堆栈中保存的值恢复EFLAGS 、CS 和EIP ,执行常规的中断返回操作; 
(2) 、当NT=1 ,通过任务转换实现中断返回。 
3 、重启动标志RF(Restart Flag)
重启动标志RF 用来控制是否接受调试故障。规定:RF=0 时,表示“ 接受” 调试故障,否则 拒绝之。在成功执行完一条指令后,处理机把RF 置为0 ,当接受到一个非调试故障时,处理机就把它置为1 。 
4 、虚拟8086 方式标志VM(Virtual 8086 Mode)
如果该标志的值为1 ,则表示处理机处于虚拟的8086 方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/KingWolfOfSky/archive/2010/02/09/5303757.aspx

分享到:
评论

相关推荐

    x86架构常见寄存器介绍

    介绍了一些X86常见的寄存器,帮助分析程序,在碰到需要分析性能或者程序的时候将大大的帮助你 比如:EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP 、CS、DS、ES、FS、GS、SS、EFLAGS RAX、RBX、RCX、RDX、RSI、RDI、RSP...

    开放式CPU设计 实验程序 实验CPU:通用寄存器组

    在这个“开放式CPU设计 实验程序 实验CPU:通用寄存器组”的项目中,你将有机会深入了解CPU的内部工作原理,并动手构建一个包含通用寄存器组的简单CPU模型。这个实验可能包括以下知识点: 1. **CPU结构**:学习CPU...

    易语言取寄存器值

    "取寄存器值"是编程中常见的操作,它涉及到计算机硬件和操作系统交互的核心概念。在易语言中,获取寄存器值是通过特定的函数或指令来实现的,这里提到的"GetRegister"很可能是一个自定义函数或系统调用。 寄存器是...

    F280049寄存器版示例程序

    "寄存器版"通常指的是直接操作硬件寄存器的程序设计,这在嵌入式编程中非常常见。在TMS320F280049中,每个功能模块都有相应的寄存器进行配置和状态控制,例如CPU控制寄存器、中断管理寄存器、定时器寄存器等。示例...

    第2章 寄存器与存储器.doc

    本章主要讲解 Intel 系列 CPU 内部寄存器的组织结构、命名、功能及其常见的用途,还介绍存储器的分段管理模式、存储单元地址的表示法以及其物理地址的形成方式。 学习目标: * 熟练掌握 CPU 内部寄存器的组织结构 ...

    一个基于proteus的8086操作寄存器仿真实验

    在进行8086寄存器操作实验时,常见的任务可能包括: 1. 存储和检索数据:演示如何使用寄存器存储并从内存中读取数据。 2. 算术运算:展示加法、减法、乘法和除法指令在寄存器上的应用。 3. 位操作:使用位操作指令...

    DSP中断实现方式以及寄存器访问

    下面介绍几种常见的寄存器访问方法: ##### 1. C语言访问寄存器 - **使用特殊寄存器宏定义**:DSP库中通常提供了对特殊功能寄存器的宏定义,可以直接使用这些宏来访问寄存器。 - **使用`__attribute__((section("....

    寄存器是什么的重要组成部分

    CPU中常见的寄存器类型包括但不限于: - **指令寄存器(IR)**:用于存储当前正在执行的指令。 - **程序计数器(PC)**:也称为指令指针,用于指示下一条指令的地址。 - **通用寄存器**:用于暂存数据和中间结果。 ...

    通用寄存器组

    在计算机体系结构中,通用寄存器组是CPU的核心组成部分,它们在执行指令和处理数据时扮演着至关重要的角色。标题“通用寄存器组”指的是这样一组硬件资源,能够存储临时数据,供处理器快速访问。描述中提到的“由8个...

    CPU-IO-通道-寄存器-传送-电脑PPT优秀资料.ppt

    "CPU-IO-通道-寄存器-传送-电脑PPT优秀资料.ppt" 根据提供的文件信息,我们可以总结出以下知识点: 一、CPU-IO-通道-寄存器-传送的概念 CPU-IO-通道-寄存器-传送是指CPU与外设之间的数据传送过程。在这个过程中,...

    寄存器oled.zip

    1. **I2C或SPI通信**:STM32F1与OLED之间最常见的接口是I2C或SPI。I2C是简单且节省引脚的总线协议,适合小规模通信;SPI则提供更快的数据传输速率,但需要更多引脚。驱动程序需要实现这些通信协议的初始化和数据传输...

    win32汇编寄存器的详细说明

    在计算机体系结构中,寄存器是CPU内部用于临时存储数据的小型快速存储单元。它们被用来保存操作数、地址以及中间计算结果等重要信息。对于Win32汇编编程来说,了解这些寄存器的具体用途及其工作原理至关重要。 ####...

    AVR_M16寄存器总纲

    在CPU内部,寄存器是存储数据的高速缓存,它们比主内存快得多,因为它们直接与运算单元相连。AVR_M16拥有多个不同类型的寄存器,包括通用寄存器、特殊功能寄存器(SFRs)和程序状态寄存器等。 1. **通用寄存器**:...

    计算机组成原理-八位寄存器设计

    此外,八位寄存器在早期计算机中是常见的数据处理单元,比如在CPU的通用寄存器中,或者在I/O接口中作为临时数据缓冲区。在现代计算机中,虽然寄存器的位宽已经扩大,但八位寄存器仍然是理解和学习计算机组成原理的一...

    深入探索:汇编语言中的寄存器世界

    本文将详细解释什么是寄存器,以及在汇编语言中常见的寄存器类型和它们的应用。 1. 寄存器的定义 寄存器是CPU内部的一小部分但非常快速的存储区域,它们用于存储指令执行过程中的临时数据。由于寄存器的访问速度远...

    Stm32之寄存器列表

    STM32F103系列是其中的一个常见型号,广泛应用在各种嵌入式系统设计中。在这个系列中,了解和掌握寄存器列表至关重要,因为寄存器是直接控制和配置芯片功能的核心部分。 STM32F103的寄存器列表通常包含以下几个方面...

    寄存器相对寻址

    常见的通用寄存器包括EAX、EBX、ECX和EDX,还有ESP(堆栈指针)和EIP(指令指针)等特殊用途寄存器。 寄存器相对寻址是相对于某个特定寄存器的地址进行操作的寻址方式。例如,在x86架构中,EIP寄存器通常用于存储下...

    FreeRTOS寄存器版移植

    5. **硬件抽象层(HAL)**:虽然寄存器版移植直接操作硬件,但通常会有一个简单的HAL层用于封装一些常见操作,如定时器配置、串口通信等。这使得代码更易读,同时也允许在未来迁移到其他硬件平台。 6. **串口配置**...

    Ti C2000系列 DSP C2000助手 寄存器查询

    C2000助手是一款强大的开发工具,它为用户提供了方便的寄存器查询功能,尤其针对DSP2812和DSP28335这两款常见的C2000 DSP型号。 **1. DSP2812和DSP28335概述** - **DSP2812**:这是一款16位浮点处理器,拥有高性能...

Global site tag (gtag.js) - Google Analytics