跋扈洋

  • 49 主题
  • 110 帖子
  • 751 积分
  • 身份:版主
  • 论坛新秀
  • E币:193

《原创》8086CPU的寄存器

2020-10-6 16:07:31 显示全部楼层
为了提高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用来存放代码段中的偏移地址,在程序运行过程中,它始终指向下一条要执行的指令的首地址。IP实际上起着控制指令流的执行流程,是一个非常重要的控制寄存器。它的内容由BIU自动修改,用户不能通过指令预置或直接修改,但有些指令的执行可以修改它的内容。譬如在遇到中断指令INT或子程序调用指令CALL时,IP中的内容将被自动修改。

标志寄存器Flags

标志寄存器Flags用来保存在一条指令执行之后,CPU所处状态 的信息及运算结果的特征,该寄存器又称为程序状态字PSW。8086CPU设置的是一个16位标志寄存器,但实际上只使用了其中的9位。这9位标志位又分为状态标志位和控制标志位两类。

状态标志位

状态标志位用来记录刚刚执行完算术运算、逻辑运算等指令后的状态特征,共有6个。

  • CF(进位标志位)
    主要用来反映运算运算结果是否产生进位或借位。如果运算结果的最高位向前产生了一个进位(加法)或借位(减法)时,CF=1,否则为0.使用该标志位的情况有多字(字节)数的加、减运算,无符号数的大小比较,移位操作,专门改变CF值的指令等。
  • PF(奇偶标志位)
    同于反映运算结果的奇偶性,即第八位中含有“1”的个数。如果“1”的个数为偶数,则PF的值为1,否则为0。利用PF可根据奇偶校验检查,或产生奇偶校验位。
  • AF(辅助进位标志位)
    表示加法或减法运算结果中D3位向D4位产生进位或借位的情况,当有进位(借位)时AF=1;否则AF=0/该标志用于BCD运算中辩别是否需要进行十进制调整。
  • ZF(零标志位)
    用来反映运算结果是否为0.如果运算结果为0,则ZF=1,否则ZF=0;
  • SF(符号标志位)
    用来反映运算结果的符号位,它与运算结果的最高位相同。有符号数采用补码表示法,所以,SF也就反映了运算结果的正负号。当运算结果为负数时,SF=1,否则为0.
  • OF(溢出标志位)
    用来反映有符号数运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0.具体来说,就是当有符号数字节运算的结果超出了-128~ +127范围,或者字运算时的结果超出了-32768~ ++32767范围,就产生溢出。
    编写程序时,以上6个状态标志位中的CF、ZF、SF和OF的使用频率较高,PF和AF的使用频率相对较低。
控制标志位

控制标志位有3个,是用来控制CPU的工作方式或工作状态的标志,它的使用频率相对较低。

  • IF(中断允许标志位)
    用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。当IF=1,CPU响应;当IF=0时,CPU不响应。8086指令系统中提供了专门改变IF值的指令。
  • DF(方向标志位)
    用来控制串操作指令中地址指针的变化方向。在串操作指令中,当DF=0时,地址指针为自动增量,即由低地址向高地址变化;当DF=1时,地址指针自动减量,即由高地址向低地址变化。指令系统中提供了专门改变DF值的指令。
  • TF(追踪标志位)
    TF亦称为单步标志位。TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。
    单步执行方式主要用于程序的调试,指令系统中没有提供专门的指令来改变TF的值,但用户可以通过编程办法来改变其值。
后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
或者关注公众号。

编写不易,感谢支持。

最新评论

楼层直达:

pidaneng

  • 0 主题
  • 31 帖子
  • 735 积分
  • 身份:LV3 中级技术员
  • E币:144

eeNick

  • 92 主题
  • 288 帖子
  • 2711 积分
  • 身份:管理员
  • 论坛新秀
  • E币:2224

跋扈洋

  • 49 主题
  • 110 帖子
  • 751 积分
  • 身份:版主
  • 论坛新秀
  • E币:193
我要评论
3
5
广告
关闭 热点推荐上一条 /7 下一条
快速回复 返回列表