`

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内部寄存器的命名、功能及其常见的用途,还要介绍存储器的分段管理模 式、存储单元地址的表示法以及其物理地址的形成方式。 2.1 寄存器组 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的...

    计算机组成原理 8位实验CPU设计与实现

    1. 深入掌握CPU的工作原理,包括ALU、控制器、寄存器、存储器等部件的工作原理; 2. 熟悉和掌握指令系统的设计方法,并设计简单的指令系统; 3. 理解和掌握小型计算机的工作原理,以系统的方法建立起整机概念; 4. ...

    汇编语言常见面试题.pdf

    请列举常见的CPU寄存器并简要介绍其功能。 什么是指令集架构(Instruction Set Architecture,ISA)?请说明指令集架构在汇编语言中的作用。 汇编语言中的数据存储方式有哪些?请说明在汇编语言中的数据存储方法。 ...

    高性能计算实验报告CPU/GPU SIMD

    在 CPU 中,SIMD 是通过向量寄存器来实现的,这些寄存器能够同时存储多个数据。常见的 SIMD 指令集包括 Intel 的 MMX、SSE 和 AVX,以及 ARM 的 NEON。 GPU SIMD GPU(图形处理器)也有 SIMD 功能,但是其实现方式...

    TI C2000 CLA常见问题解答

    如果一个中断已经被标记,但是任务还未运行,那么主 CPU 可以使用 MICLR 寄存器清除此标记。 如果任务已经运行,那么一个软复位(在 MCTL 中)将终止此任务并将 MIER 寄存器清零。 如果你希望将 所有 CLA 寄存器清零...

    SC/MP Processor Emulator:古代8位微处理器SC / MP 2的仿真器-开源

    您可以放慢CPU的运行速度,将CPU状态寄存器显示为LED,以观察CPU使用其寄存器的情况。 该仿真器还包含一个VDU(视频显示单元)输出/ ASCII输入模拟。 / etc中有一些演示。 并查看TINYBASIC文件夹中的NIBL / TINY ...

    gcc 中文帮助文档

    gcc makefile写法 gcc_egcs使用 gdb使用 gcc常用选项对代码的影响 ...不同的CPU下最佳编译参数 代码维护 简单cvs automake diff rcs 内核重编译常见故障 cvs 共享库工具 代码优化 GNU 编码标准 书籍

    西安理工大学 微机原理课件

    • CPU内部9组寄存器,每个寄存器的功能。 • 时序的定义,能够区分3种周期,即指令周期、总线周期和时钟周期。 • CPU的指令流水线操作和它的5个步骤。 • 对CPU的最新发展要有所了解。 第四章 指令系统 本章知识...

    GCC使用教程.pdf

    目 录 1. gcc 1. makefile 写法 ...7. 不同的 CPU 下最佳编译参数 8. 代码维护 1. 简单 cvs 2. automake 3. diff 4. rcs 5. 内核重编译常见故障 6. cvs 7. 共享库工具 8. 代码优化 9. GNU 编码标准 10. 书籍

    经典GCC_使用教程

    1. gcc 1. makefile写法 ...7. 不同的CPU下最佳编译参数 8. 代码维护 1. 简单cvs 2. automake 3. diff 4. rcs 5. 内核重编译常见故障 6. cvs 7. 共享库工具 8. 代码优化 9. GNU 编码标准 10. 书籍

    tcr-reader.zip

    读取TCR寄存器的驱动代码例子,该文件是...这个内核模块的目的是演示如何读取特定的CPU寄存器值,并在内核模块中打印出来。它遵循了Linux内核模块开发的常见模式,包括初始化和退出函数的定义,以及模块元数据的设置。

    C语言中auto,register,static,const,volatile的区别详细解析

    (2)register这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static常见的两种用途:1>统计函数被调用的次数;2>减少局部数组建立和赋值的开销.变量的建立和赋值是需要...

    嵌入式系统设计实战.王宜怀(带详细书签).pdf

    第2章给出XS128硬件最小系统,并简要介绍S12XCPU(CPU12X)。第3章给出第一个样例程序及CodeWai·“or工程组织,完成第一个S12X工程的入门。第4章给出基于硬件构件的嵌入式系统开发方法。第5章阐述串行通信接口SCI,...

    Linux 设备模型

    这些设备有一个基本的特征:可以通过CPU bus直接寻址(例如在嵌入式系统常见的“寄存器”)。因此,由于这个共性,内核在设备模型的基础上(device和device_driver),对这些设备进行了更进一步的封装,抽象出...

    自考00018计算机应用基础复习笔记(5).doc

    主板上最主要的部件是主机,即CPU和内存,图1-9是CPU和内存条的外形。CPU CPU的两个重要指标是字长和时钟频率。字长反映了PC能同时处理的数据的长度,其标志 计算机的运算精度;时钟频率则反映了PC的运行速度。CPU的...

    计算机应用基础A.pptx

    通常将运算器、控制器、寄存器的组合统称为中央处理器或中央处理单元(简称CPU),也称为计算机的处理机。 CPU是运算和控制中心,是计算机的心脏,它决定了计算机的性能。 计算机应用基础A全文共292页,当前为第10...

    linux C编程常见的错误总结(必看篇)

    通常这个值是由gd tr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存 相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向 的gdt是由以64位为一个...

    DELPHI串口编程

     现在有五种常见的并口:4位、8位、半8位、EPP和ECP,大多数PC机配有4位或8位的并口,许多利用Intel386芯片组的便携机配有EPP口,支持全部IEEE1284并口规格的计算机配有ECP并口。  标准并行口4位、8位、半8位:  4...

    春福师计算机原理与接口技术在线作业二样本.doc

    在 CPU 的主要寄存器里, 为了保证程序能够连续地执行下去的寄存器是( ) 。 A. PC B. IR C. DR D. AC 满分: 2 分 11. DMA数据传送控制的周期挪用方式主要适用的情况是( ) 。 A. I/O设备周期大于内存存储周期 B. I/O...

Global site tag (gtag.js) - Google Analytics