前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8086CPU的寄存器

8086CPU的寄存器

作者头像
跋扈洋
发布2021-01-29 14:28:18
8730
发布2021-01-29 14:28:18
举报
文章被收录于专栏:物联网知识

为了提高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个。

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

控制标志位

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

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

后续

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通用寄存器
    • 数据通用寄存器
      • 地址指针与变址寄存器
      • 控制寄存器
        • 指令指针寄存器IP
          • 标志寄存器Flags
            • 状态标志位
            • 控制标志位
        • 后续
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档