最近复习一下计算机原理熟悉了一下CPU寄存器知识

来源:互联网 发布:软实力硬实力知乎 编辑:程序博客网 时间:2024/05/16 12:51

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位寄存器更具有通用性整理发布www.
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称为指针寄存器(Poer Register)主要用于存放堆栈内存储单元偏移量
用它们可实现多种存储器操作数寻址方式为以区别地址形式访问存储单元提供方便
指针寄存器不可分割成8位寄存器作为通用寄存器也可存储算术逻辑运算操作数和运算结果
它们主要用于访问堆栈内存储单元并且规定:
BP为基指针(Base Poer)寄存器用它可直接存取堆栈中数据;
SP为堆栈指针(Stack Poer)寄存器用它只可访问栈顶
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位并记作EIPEIP低16位和先前CPU中IP作用相同
指令指针EIP、IP(Instruction Poer)是存放下次将要执行指令在代码段偏移量在具有预取指令功
能系统中下次要执行指令通常已被预取到指令队列中除非发生转移情况所以在理解它们功能
时不考虑存在指令队列情况
在实方式下由于每个段最大范围为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
“溢出”和“进位”是两个区别含义概念不要混淆如果不太清楚话请查阅计算机组成原理课程中有关章节
2、状态控制标志位
状态控制标志位是用来控制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值
3、32位标志寄存器增加标志位
1、I/O特权标志IOPL(I/O Privilege Level)
I/O特权标志用两位 2进制位来表示也称为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方式下工作状态否则处理机处于般保护方式下工作状态

原创粉丝点击