|
8086/8088 CPU寄存器
16 bits
高8位 低8位
┌──┬──┐ ─┐
AX: │ AH │ AL │ 累加器 │
├──┼──┤ │
BX: │ BH │ BL │ 基址寄存器 │
├──┼──┤ │通用寄存器
CX: │ CH │ CL │ 计数器 │
├──┼──┤ │
DX: │ DH │ DL │ │
└──┴──┘ ─┘
┌─────┐
┌──│ SP │堆栈指针 ┐
│ ├─────┤ │指针寄存器
│ │ BP │基数指针 ┘
│ ├─────┤
│ │ SI │源变址 ┐
│ ├─────┤ │变址寄存器
│ │ DI │目的变址 ┘
│ └─────┘
│ ┌─────┐
│┌─│ IP │指令指针 ┐
││ ├─────┤ │控制寄存器
││ │ FLAGS │状态标志 ┘
││ └─────┘
││ ┌─────┐
│└→│ CS │代码段地址 ─┐
│ ├─────┤ │
│ │ DS │数据段地址 │
│ ├─────┤ │段寄存器
└→ │ SS │堆栈段地址 │
├─────┤ │
│ ES │附加段地址 ─┘
└─────┘
AX(Accumulator):算术运算的主要寄存器。另外,所有的I/O指令都使用这一寄存器与外部设备传送信息。
BX(Base):在计算存储器地址时,经常用作基址寄存器。
CX(Count): 在循环和串处理指令中用作隐含的计数器。
DX(Data):在作双字长运算时,把DX和AX组合在一起存放一个双字数,DX用来存放高位字。此外,对某些I/O 操作,DX可用来存放I/O的端口地址。
SP(Stack Pointer堆栈指针寄存器)和BP(Base Pointer基址指针寄存器)都可以与SS寄存器联用来确定堆栈中某一存储单元的地址。SP用来指示栈顶的偏移量,BP的内容则是堆栈中任一单元的偏移量。
SI(Source Index源变址寄存器)和DI(Destination Index目的变址寄存器)与DS联用,用来确定数据段中某一存储单元的偏移地址。在串处理指令中SI和DI作为隐含的源变址和目的变址寄存器,此时SI和DS联用,DI和ES联用,分别达到在数据段和附加段中寻址的目的。
IP(Instruction Pointer指令指针寄存器):用来存放代码段中指令的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址,它与CS联用,确定下一条要执行的指令的物理地址。
FLAG(或PSW<Program Sfatus Word>)为程序状态字寄存器,由条件码标志和控制标志(DF、IF、TF)构成。
─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│OF│DF│IF│TF│SF│ZF│ │AF│ │PF│ │CF│
─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
其中
CF(Carry Flag)为进位标志,记录运算时从最高有效位产生的进位值(置1)。
PF(Parity Flag)为奇偶标志,当结果操作数中1的个数为偶数时置1,否则置0。
AF(Auxiliary Carry Flag)为辅助进位标志,记录运算时第3位(半个字节)产生的进位值(置1)。
ZF(Zero Flag)为零标志,运算结果为0时置1。
SF(Sign Flag)为符号标志,记录运算结果的符号,结果为负时置1。
TF(Trap Flag)为陷阱标志,用于单步方式操作,当TF位为1 时,每条指令执行后产生陷阱,由系统控制计算机。
IF(Interrupt Flag)为中断标志,当IF为1时,允许中断。
DF(Direction Flag)为方向标志,在串处理指令中控制处理信息的方向。
DF为1时,每次操作后使SI和DI减量(这样就使串处理从高地址向低地址方向处理);当DF为0时,使SI和DI增量。
OF(Overflow Flag)为溢出标志。在运算过程中,如操作数超出了机器能表示的范围,此时OF置1。
段寄存器是专门存放存储器段(当前段)起始地址的(高16位)。
代码段CS(Code Segment)存放当前运行的程序。
数据段DS(Data Segment)存放当前运行程序所用的数据,如果程序中使用了串处理指令,则其源操作数也存放在数据段中。
堆栈段SS(Stack Segment)定义了堆栈的所在区域。
附加段ES(Extra Segment)是附加的数据段,它是一个辅助的数据区,也是串处理指令的目的操作数据存放区。
CPU在取指令时访问CS段,堆栈操作时访问SS段,读写数据时访问DS或ES段。
|