Site hosted by Angelfire.com: Build your free website today!
 
 


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段。

 
 
学习笔记