寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类。
程序可见的寄存器可以分为以下三类:
- 通用寄存器
- 专用寄存器
- 段寄存器
通用寄存器
数据寄存器
AX、BX、CX、DX可称为数据寄存器,用来暂时存放计算过程中所用到的操作数。它们是16位,但也可以按字节访问,比如AH(高位字节)和AL(低位字节)。
AX
(accumulator),作为累加器用,所以是算术运算的主要寄存器。
BX
(base),在计算存储器地址时,常用作基址寄存器。
CX
(count),常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。
DX
(data),一般在作双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。
指针寄存器
可以存放操作数,但只能以字为单位使用。
SP
(stack pointer),堆栈指针寄存器。
BP
(base pointer),基址指针寄存器。可以和堆栈段寄存器SS联用来确定堆栈段中的某一存储单元的地址。
SI
(source index),源变址寄存器,一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。
DI
(destination index),目的变址寄存器,一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。
※SI和DI有自动增量和自动减量的功能。
在串处理指令中,SI和DI作为隐含的源变址和目的变址寄存器,此时SI和DS联用,DI和附加段寄存器ES联用,分别达到在数据段和附加段中寻址的目的。
专用寄存器
IP
(instruction pointer),指令指针寄存器,它用来存放代码段中的偏移地址。
在程序运行的过程中,它始终指向下一条指令的首地址,它与段寄存器CS联用确定下一条指令的物理地址。
SP
(stack pointer),堆栈指针寄存器,存放栈顶的偏移地址,与堆栈段寄存器SS联用来确定堆栈段中栈顶的地址。
FLAGS
标志寄存器,又称为程序状态寄存器(program status word,PSW)。
条件标志
溢出标志
(overflow flag,OF),运算溢出时为1,否则为0。
符号标志
(sign flag,SF),运算结果为负时为1,否则为0。
零标志
(zero flag,ZF),运算结果为0时为1,否则为0。
进位标志
(carry flag,CF),记录运算时从最高有效位产生的进位值。有进位时为1,否则为0。
辅助进位标志
(auxiliary carry flag,AF),..…
奇偶标志
(parity flag,PF),结果操作数中1的个数为偶数时为1,否则置0。
控制标志
方向标志(direction flag),在串处理指令中控制处理信息的方向用。
DF为1时,高地址到低地址,即倒着来。
DF为0时,低地址到高地址,即正着来。
系统标志
陷阱标志
(trap flag,TF),用于调试时的单步方式操作。
TF为1时,产生陷阱;否则不产生。
中断标志
(interrupt flag,IF),当其为1时,允许CPU响应中断;否则不允许。
段寄存器
段寄存器也是一种专用寄存器,专用于存储器寻址,用来直接或间接存放段地址。
代码段
(code segment,CS),存放当前正在运行的程序。
数据段
(data segment,DS),存放当前运行程序所用的数据。
如果程序使用了串处理指令,则其源操作数也存放在数据段里。
堆栈段
(stack segment,SS)
附加段
(extra segment,ES),附加的数据段,作为辅助的数据区,也是串处理指令的目的操作数存放区。
作者:@臭咸鱼
转载请注明出处:https://chouxianyu.github.io
欢迎讨论和交流!