![寄存器组图片2-1 寄存器图组](https://raw.githubusercontent.com/DismalSnail/MoeditorImage/master/register.PNG)
1. 通用寄存器
数据寄存器 |
用处 |
AX(accumulator) |
作为 累加器 用,它是算数运算的主要寄存器。另外,所有的I/O指令都使用这一寄存器与外部设备传送信息 |
BX(base) |
计算机存储器地址时,经常作为寄存器 |
CX(count) |
在位移、循环和串处理指令中常用来做保存计数值 |
DX(data) |
一般在做双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位;对某些I/O操作,DX可用来存放I/O的端口地址 |
指针寄存器 |
用处 |
SP(stack pointer)、ESP |
堆栈指针寄存器,其中存放当前堆栈段栈顶的偏移量,他们总是与SS堆栈段寄存器配合存取堆栈中的数据。实模式下使用SP,在80386以上的保护模式下使用ESP |
BP(base pointer)、EPB |
基址指针寄存器。它可以与堆栈段寄存器SS联用来确定堆栈段中的吗某一存储单元的地址。并可以作堆栈区中的一个基地址以便访问堆栈中的信息。 |
变址寄存器 |
作用 |
SI(source index) 源变址寄存器 DI(destination index) 目的变址寄存器 |
一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能。 |
SP、ESP堆栈指针不能随意修改
2. 控制寄存器
指令指针寄存器
IP、EIP
叫做指令指针寄存器,它总是与CS段寄存器配合指出下一条要执行指令的地址,其中存放偏移量部分。计算机用指令指针寄存器来控制指令序列的执行流程。
标志寄存器
运算结果特征标志 |
用处 |
CF(Carry Flag) |
进位标志,记录运算结果的最高位向前产生的进位或借位。可用于检测无符号数二进制加减法运算时是否发生溢出(溢出时 CF=1 ) |
PF(Parity Flag) |
奇偶标志,记录运算结果最低位中含1的个数是奇还是偶。可用于检测数据传送过程中是否发生错误。 |
AF(Auxiliary carry) |
辅助进位标志,记录运算结果低4位向前产生的进位或借位。只有在执行十进制运算指令时才关心此位。 |
ZF(Zero Flag) |
零标志,记录运算结果是否位0。结果为0则置1,否则清0 |
OF(Overflow Flag) |
溢出标志,记录运算结果是否超出了机器所能表示的范围。可用于检测带符号数运算时是否发生溢出(溢出时OF=1) |
SF(Sign Flag) |
符号标志,记录运算结果的符号。结果为负则置1,否则清0 |
控制标志(处理器) |
用处 |
IF(Interrupt Flag) |
中断允许标志,IF的控制只对外部可屏蔽中断请求(INTR)起作用。当IF=1时允许CPU响应INTR。 |
DF(Direction Flag) |
方向标志。专服务于字符串操作指令,当DF位为1时,每次操作后使变址寄存器SI和DI减小,这样就使串处理从高地址向低地址方向处理。当DF位为0时,则使SI和DI增大。 |
TF(Trap Flag) |
陷阱标志,用于程序调试。当TF=1 时,CPU处于单步方式;当TF=0时,CPU处于连续方式。 |
IOPL(I/O Privilege Level) |
特权标志,占D13和D12两位。在保护模式下,用于控制对I/O地址空间的访问。只对80286以上CPU有效。 |
ID(Identification) |
标识标志,若ID=1,则表示Pentium支持CPUID指令。只对Pentium以上CPU有效。 |
![DEBUG中测试位的表示符号](http://ww1.sinaimg.cn/large/006jjZD4ly1fpf2nab9abj30lt0gh429.jpg)
3.段寄存器
IBM PC机的存储器采用分段管理方法组织,因此一个物理地址用段基址和偏移量 表示。
段寄存器存放段基址。在实模式下存放当前正在运行程序的段基地址,在保护模式下存放段选择子。
![寄存器组图片2-2 寄存器图组](https://raw.githubusercontent.com/DismalSnail/MoeditorImage/master/register1.PNG)
段寄存器 |
用处 |
CS(code segment) |
代码段寄存器,指定当前代码段,代码段中存放当前正在运行的程序段。 |
SS(stack segment) |
指定当前堆栈段。 |
DS(data segment) |
数据段寄存器,指定当前运行程序所使用的数据段。 |
ES(extra segment) |
附加数据段寄存器,指定当前运行程序所使用的附加数据段 |
DS是主要的数据段寄存器,在默认情况下使用DS所指向段的数据。若要引用其它段中的数据,需要显式说明。