Intel 8086 内部寄存器

因为老是忘记8086 CPU的内部寄存器,在此备忘一下。

1. 通用寄存器

有AX、BX、CX、DC四个通用寄存器,每一个都是16位,但是可以拆成2个8位寄存器使用,分别用AH、AL……来表示。

当然,4个通用寄存器除了作为通用寄存器使用外,还有各自的习惯用法。

  • AX(AH AL)又称累加器,常用于存放算术逻辑运算中的操作数,林外所有的I/O指令都使用累加器与外设接口传送数据,有些指令指定只能使用AX(AL)寄存器,如乘法、除法、I/O等指令。
  • BX(BH BL)又称基址寄存器,常用来存放访问内存时的基地址或用做间接寻址时的地址寄存器。
  • CX(CH CL)又称计数寄存器,在循环和串操作指令中用做计数器,指令执行后CX寄存器中的内容会自动改变。
  • DX(DH DL)又称数据寄存器,在I/O指令中用来存放端口的地址,在乘法指令中作为辅助寄存器

2. 4个专用寄存器

  • SP堆栈指针寄存器:它用在堆栈中存放栈顶偏移指针,永远指向堆栈的栈顶。
  • BP基址指针寄存器:一般也用来存放访问内存时的基地址。
  • SI源变址寄存器、DI目的变址寄存器:它们常常用在变址寻址方式中。

每一个专用寄存器也都是16位

3. 4个段寄存器

  • CS代码段寄存器:存放当前程序所在段的段基址(段首址)。
  • DS数据段寄存器:存放当前程序所在数据段的段基址。
  • SS堆栈段寄存器:存放当前程序所在堆栈段的段基址。
  • ES附加段寄存器:存放当前程序所用辅助数据段的段基址。

同样,都是16位的

4. 指令指针寄存器IP

IP寄存器用于存放下一条执行指令的偏移地址。CPU取指令总是以CS为段基址,以IP为段内偏移地址。当CPU从CS段且偏移地址为(IP)的内存但愿中取出指令代码的一字节后,IP会自动加1,从而指向代码的下一字节,用户不能直接访问IP寄存器。

5. 标志寄存器FR

FR也是16位寄存器,但是只能使用其中的9位,包括6个状态标志位和3个控制标志位。状态标志位记录前面算术逻辑运算结果的特征,控制标志是用户自己通过指令设置的。对其后的操作产生控制作用。

OF DF IF TF SF ZF AF PF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  • 6个状态标志
    • SF符号标志,和运算结果最高位相同,若SF=1,表示结果是负数;SF=0,表示结果为正数,对于无符号数,SF无意义
    • ZF零标志,算术运算的结果为0时,ZF=1,否则ZF=0
    • PF奇偶标志,若运算结果的低8位中1的个数为偶数时,PF=1
    • CF借进位标志,进行加减法操作时,若最高位有进位,CF=1,循环指令和部分位操作指令也会影响此标志
    • AF辅助进借位标志,加减法运算时,如果低半字节向高半字节(第三位向第四位)借进位,则AF=1,一般在BCD码运算中作为是否进行十进制调整的判断依据
    • OF溢出标志,当带符号运算过程中结果超出最大范围,OF=1
  • 3个控制标志
    • DF方向标志,串操作指令中,若DF=1则串操作过程中地址值不短减小的方向进行
    • IF终端允许标志,若IF=1,则CPU可以响应可屏蔽中断请求
    • TF跟踪标志,若TF=1,则CPU处于单步执行指令的工作放式,每执行一条指令,自动产生一次单步终端。

标志位在DEBUG中的显示形式:

标志名 标志为1时 标志为0时
OF[Overflow Flag] ov[OVerflow] nv[Not oVerflow]
DF[Direction Flag] dn[DowN] up[UP]
IF[Interrupt Flag] ei[Enable I~t] di[Disable I~t]
SF[Sign Flag] ng[NeGative sign] pl[PLus sign]
ZF[Zero Flag] zr[ZeRo] nz[Not Zero]
AF[Auxiliary carry Flag] ac[Auxiliary Carry] na[Not Aux~]
PF[Parity Flag] pe[Parity Even] po[Parity Odd]
CF[Carry Flag] cy[CarrY] nc[Not Carry]

OK,完毕~