寄存器可以分为程序可见的寄存器和程序不可见的寄存器两大类。
① 程序可见的寄存器是指在汇编语言程序设计中用到的寄存器,分为通用寄存器、专用寄存器和段寄存器3类。
② 程序不可见的寄存器是指一般应用程序设计中不用而由系统所用的寄存器。
1通用寄存器
数据寄存器:ax、bx、cx、dx,四个16位通用寄存器,用来暂时存放计算过程中所用到的操作数、结果和其他信息。既可以以字形式(如ax)也可以以字节形式(如ah、al)访问。
ax(accumulator):累加器,算术运算的主要寄存器。所有的i/o指令都使用这一寄存器与外部设备传送信息。
bx(base):通用寄存器,在计算存储器地址时常用作基址寄存器。
cx(count):通用寄存器,在循环和串操作指令中用作隐含的计数器。
dx(data):通用寄存器,在作双字长运算时把dx和ax合在一起存放一个双字长数,dx用来存放高位字。对某些i/o操作,dx用于对i/o端口的寄存器间接寻址。
指针及变址寄存器:sp、bp、si、di,四个16位寄存器。
sp:堆栈指针寄存器。
bp:基址指针寄存器。
si:源变址寄存器。
di:目的变址寄存器。
对于80386及其后继机型则是32位的通用寄存器,包括eax、ebx、ecx、edx、esp、ebp、edi和esi。这些寄存器都可以存放数据,也可以当32位的地址寄存器使用。
2 专用寄存器
专用寄存器:ip、sp、flags,3个16位寄存器。
ip:指令指针寄存器。存放代码段中的偏移地址。80386及其后继机型则是eip。
sp:堆栈指针寄存器,指示栈顶的偏移地址。80386及其后继机型则是esp。
flags:标志寄存器,又称为程序状态字寄存器(program status word, psw)。由条件码标志(flag)、控制标志和系统标志构成。80386及其后继机型则是eflags。8086/8088的flags如下所示:
1514131211109876543210
of
df
if
tf
sf
zf
af
pf
cf
条件码:用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由cpu自动设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。
of:溢出标志(overflow flag)。结果溢出of=1,否则of=0。
sf:符号标志(sign flag)。结果为负sf=1,否则sf=0。
zf:零标志(zero flag)。结果为0时zf=1,否则zf=0。
cf:进位标志(carry flag)。最高有效位有进位或借位cf=1,否则cf=0。
af:辅助进位标志或半进位标志(auxiliary carry flag)。半个字节产生的进位或借位时af=1,否则af=0。
pf:奇偶标志(parity flag)。结果低8位中所含的1的个数为偶数时pf=1,否则pf=0。
控制标志位:为方向标志(direction flag, df),在串处理指令中控制处理信息的方向用。
df=1:变址寄存器si和di减量,使串处理从高地址向低地址方向处理。
df=0:变址寄存器si和di增量,使串处理从低地址向高地址方向处理。
系统标志位:可以用于i/o、可屏蔽中断、程序调试、任务切换和系统工作方式等的控制。
tf:陷阱标志(trap flag, tf),又称单步标志。用于调试时的单步方式操作。tf=1时每条指令执行完后产生陷阱(中断),tf=0时不产生陷阱。
if:中断标志(interrupt flag, if)。if=1时允许可屏蔽中断请求,if=0时禁止可屏蔽中断。
i/o 特权级(i/o privilege level, iopl),在保护模式下,用于控制对i/o地址空间的访问。
标志位的测试:用调试程序debug测试。测试含义见书24页表2.2所示。
3 段寄存器
段寄存器是一种专用寄存器,它们专用于存储器寻址,用来直接或间接地存放段地址。在80286以前的处理器中只有cs、ds、ss、es四个16位寄存器。从80386起增加了fs和gs两个附加的数据段寄存器。