80x86的程序可见寄存器组
寄存器可以分为程序可见寄存器和程序不可见寄存器两大类。所谓程序可见的寄存器是指在汇编语言程序设计中用到的寄存器,它们可以由指令来指定
1、通用寄存器
EAX:(16位,AX:(AH:(8位),AL:(8位)))
EBX:(16位,BX:(BH:(8位),BL:(8位)))
ECX:(16位,CX:(CH:(8位),CL:(8位)))
EDX:(16位,DX:(DH:(8位),DL:(8位)))
ESP:(16位,SP:(16位))
EBP:(16位,BP:(16位))
EDI:(16位,DI:(16位))
ESI:(16位,SI:(16位))
2、专用寄存器
EIP:(16位,IP:(16位))
EFLAGS(16位,FLAGS:(16位))
IP:指令指针寄存器,它用来存放代码段中的偏移地址。在程序运行过程中,它始终指向下一条指令的首地址,它与代码段寄存器CS联用确定下一条指令的物理地址
SP:堆栈指针寄存器,它与堆栈段寄存器用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址
FLAGS为标志寄存器,又称程序状态寄存器(PSW),这是一个存放条件码标志、控制标志和系统标志的寄存器
8086标志寄存器:
FLAGS:(1位,1位,1位,1位,OF:(1位),DF:(1位),IF:(1位),TF:(1位),SF:(1位),ZF:(1位),1位,AF:(1位),1位,PF:(1位),1位,CF:(1位),)
(1)条件码标志
用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由CPU自动设置的,由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码
溢出标志(OF):在运算过程中,如操作数超出了机器能表示的范围称为溢出,此时OF置1,否则置0
符号标志(SF):纪录运算结果的符号,结果为负时置1,否则置0
零标志(ZF):运算结果为0时ZF置1,否则置0
进位标志(CF):纪录运算时从最高有效位产生的进位值,最高有效位有进位时置1,否则置0
辅助进位标志(AF):纪录运算时第3位(半个字节)产生的进位值,第3位有进位时置1,否则置0
奇偶标志(PF):用来为机器中传送信息时可能产生的代码出错情况提供检验条件,当结果操作数中1的个数为偶数时置1,否则置0
(2)控制标志位
方向标志(DF):在串处理指令中控制处理信息的方向用。当DF位为1时,每次操作后使变址寄存器SI和DI减小,这样使串处理从高地址向低地址方向处理。当DF位为0时,则使SI和DI增大,使串处理从低地址向高地址方向处理
(3)系统标志位
陷阱标志(TF):用于调试时的单步方式操作。当TF位为1时,每条指令执行完后产生陷阱,由系统控制计算机。当TF位为0时,CPU正常工作,不产生陷阱
中断标志(IF):当IF位为1时,允许CPU相应可屏蔽中断请求,否则关闭中断
I/O特权级标志(IOPL):在保护模式下,用于控制对I/O地址空间的访问
3、段寄存器
段寄存器是专用于存储器寻址,用来直接或间接地存放段地址
CS:(16位)
DS:(16位)
ES:(16位)
SS:(16位)
FS:(16位)
GS:(16位)