为了提高CPU的运算速度,减少访问存储器的存取操作,8086CPU内置了相应寄存器,用来暂存参加运算的操作数及运算的中间结果。指令通过寄存器实现对操作数的操作比通过存储器操作要快得多,因此在编程时,合理利用寄存器能提高程序的运行效率。8086CPU内部提供了14个16位的寄存器。 其结构如下:
通用寄存器分为数据通用寄存器和地址指针与变址寄存器两组。
数据通用寄存器包括AX、BX、CX和DX共4个16位寄存器,他们既可以作为16位寄存器使用,也可以将每个寄存器分开作为两个独立的8位寄存器使用,即高8位寄存器AH、BH、CH、DH和低8位寄存器AL、BL、CL、DL。这些寄存器既可以作为目的操作地址,保存运算的中间结果或最后结果。
地址指针寄存器SP、BP与变址寄存器SI、DI主要用来存放或指示操作数的偏移地址,其中SP中存放当前堆栈段中栈顶的偏移地址。在进行堆栈操作时,SP的值随着栈顶的变化而自动改变,但始终指向栈顶位置;BP是访问堆栈时的基址寄存器,存放堆栈中某一存储单元的偏移地址,使用BP是为了访问堆栈区内任意位置的存储单元。
变址寄存器SI和DI用来存放当前数据所在段的存储单元的偏移地址。SI和DI除了可作为一般的变址寄存器使用外,在串操作指令中SI规定用作存放源操作数(即源串)的偏移地址,故称为源变址寄存器;DI规定用作存放目的操作数(即目的串)的偏移地址,故称为目的的变址寄存器。
上图中的8个16位通用寄存器在一般情况下都具备通用性,但为了缩短指令代码的长度,对某些通用寄存器又规定了专门的用途。列如在字符串处理指令和循环指令中,约定必须用CX作为计数器存放串的长度,这样可以简化指令书写形式。这种使用方法称为“隐含寻址”。
控制寄存器和指令指针寄存器IP和标志寄存器Flags两个。
IP用来存放代码段中的偏移地址,在程序运行过程中,它始终指向下一条要执行的指令的首地址。IP实际上起着控制指令流的执行流程,是一个非常重要的控制寄存器。它的内容由BIU自动修改,用户不能通过指令预置或直接修改,但有些指令的执行可以修改它的内容。譬如在遇到中断指令INT或子程序调用指令CALL时,IP中的内容将被自动修改。
标志寄存器Flags用来保存在一条指令执行之后,CPU所处状态 的信息及运算结果的特征,该寄存器又称为程序状态字PSW。8086CPU设置的是一个16位标志寄存器,但实际上只使用了其中的9位。这9位标志位又分为状态标志位和控制标志位两类。
状态标志位用来记录刚刚执行完算术运算、逻辑运算等指令后的状态特征,共有6个。
控制标志位有3个,是用来控制CPU的工作方式或工作状态的标志,它的使用频率相对较低。
如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。 或者关注公众号。