- CPU的任务是执行存放在存储器里的指令序列。它由运算器和控制器两部分组成,在IBM PC机中它就是一个微处理机芯片8088.如下图:
- 8086/8088的寄存器组
(1)数据寄存器
包括AX、BX、CX、DX四个通用寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们都可以以字(16位)的形式访问,或者也可以以字节(8位)的形式访问。
AX(Accumulator)作为累加器用,所以它是算术运算的主要寄存器。另外,所以的I/O指令都使用这一寄存器与外部设备传送信息。
BX(Base)可以作为通用寄存器使用,此外在计算存储地址时,它经常用作基址寄存器。
CX(Count)可以作为通用寄存器使用,此外在循环(LOOP)和串处理指令中用作隐含的计数器。
DX(Data)可以作为通用寄存器使用。一般在作双字长运算时把DX和AX组合在一起存放一个双字长,DX用来存放高位字,此外,对某些I/O操作,DX可用来存放I/O的端口地址。
(2)指针及变址寄存器
包括SP、BP、SI、DI四个16位寄存器,他们可以像数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在段内寻址时提供偏移地址。
其中SP(Stack Pointer)称为堆栈指针寄存器,BP(Base Pointer)称为基址指针寄存器,它们都可以与SS寄存器联用来确定堆栈段中的某一存储单元的地址。SP用来指示栈顶的偏移地址,BP可作为堆栈区中的一个基地址以便访问堆栈中的其他信息。
SI(Source Index)源变址寄存器和DI(Destination Index)目的变址寄存器一般与DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能,所以用于变址是很方便的。在串处理指令中,SI和DI作为隐含的源变址和目的变址寄存器,此时SI和DS联用,DI和ES联用,分别达到在数据段和附加段中寻址的目的。
(3)段寄存器
包括代码段CS(Code Segment)、数据段DS(Data Segment)、堆栈段SS(Stack Segment)和附加段ES(Extra Segment)寄存器。每个段寄存器可以确定一个段的起始地址,而这些段则各有各的用途。
代码段存放当前正在运行的程序数据段存放当前运行程序所用的数据,如果程序中使用了串处理指令,则其源操作数也存放在数据段中。
堆栈段定义了堆栈的所在区域,堆栈是一种数据结构,它开辟了一个比较特殊的存储区,并以后进先出的方式来访问这一区域。
附加段是附加的数据段,它是一个辅助的数据区,也是串处理指令的目的操作数存放区。
除非专门指定,一般情况下,各段在存储器中的分配是由操作系统负责的。每个段可以独立地占用64K存储区。各段也可以允许重叠。
(4)控制寄存器
包括IP和PSW两个16位寄存器。IP(Instruction Pointer)为指令指针寄存器,它用来存放代码段中的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址,它与CS寄存器联用确定下一条指令的物理地址。当这一地址送到存储器后,控制器可以取得下一条要执行的指令,而控制器一旦取得这条指令就马上修改IP的内容,使它指向下一条指令的首地址。可见,计算机就是用IP寄存器来控制指令序列的执行流程的,因此IP寄存器是计算机中很重要的一个控制寄存器。
PSW(Program Status Word)为程序状态字寄存器,这是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:
其中,条件码标志用来记录程序中运行结果的状态信息。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。它包括以下6位:
OF(Overflow Flag)溢出标志,在运算过程中,如操作数超过了机器能表示的范围则称为溢出。此时OF位置1,否则置0。
SF(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1,否则置0.
ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.
CF(Carry Flag)进位标志,记录运算时从最高有效位产生的进位值。
AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位值。
PF(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。
控制标志位有三个:
DF(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用。
IF(Interrupt Flag)中断标志,当IF为1时,允许中断,否则关闭中断。
TF(Trap Flag)陷阱标志,用于单步方式操作。当TF位为1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF位为0时,CPU正常工作不产生陷阱。