CPU中的寄存器

在执行单元EU和总线接口单元BIU中一共有14个寄存器,其中通用寄存器8个、标志寄存器FLAGS一个、控制寄存器5个,其中指令队列虽然不是寄存器但也需要重点说明一下:

1. 指令队列的工作原理:

指令队列的存储空间为6byte,8086为16位CPU意味着一条指令需要2个字节存储(16bit=2byte),指令队列一旦有2个空字节BIU就会到内存中去取指令存入指令队列中。当EU执行一条需要到存储器或I/O端口读取操作数的指令时,BIU将在执行完现行取指令的存储器周期后的下一个存储周期,对指令所指定的存储单元或I/O端口进行访问,读取的操作数经BIU送EU进行处理。当EU执行跳转、子程序调用或返回指令时,BIU就使指令队列复位,并从指令给出的新地址开始取指令,新取的第1条指令直接经指令队列送EU执行,随后取来的指令将填入指令队列缓冲器。

2. 指令队列出现的意义以及缺陷:

指令队列的出现可以降低CPU访问内存或者接口的速度,从而使得对存储器和接口要求降低并且其造价更加的低廉,指令预取队列的出现开创了指令执行流水线的先河,使得一条有一条的指令在执行时更快速的无缝衔接。但是其自身的缺陷在于:预取队列预取的只是指令并没有预取指令执行所需的参数,因此当指令涉及参数的执行时指令执行流水线不可避免的断流,断流的情况如下所示:

1) 指令预取队列中有转移类指令

2) 执行指令需要参数

当指令的执行需要参数时(比如:加法),EU得去获得了参数才可以顺利执行指令,因此此时的并行流水线依旧存在着断流的情况。

3)执行单元执行速度较慢

EU还未执行完一条指令,BIU中的预取队列已经填充完毕。

通用寄存器

8个通用寄存器再进行细分,又可划分为数据寄存器(AX~DX)、栈顶指针寄存器(SP)、基址寄存器(BP)、DI(目标变址寄存器)、SI(源变址寄存器)。

1. 数据寄存器(AX、BX、CX、DX)

16位的数据寄存器可以拆成2个8位寄存器(例如:AX->AH+AL等)来使用,但是一定要注意“8086为16位寄存器,8位寄存器中存放的一定是数据不可能是地址,因为16位寄存器的地址一定是16位的,哪怕地址为0那也是16位的0”。除此之外,16位的数据寄存器可以依据专用功能再进行细分:

① AX:累加寄存器,该寄存器存取速度为CPU通用寄存器中之最,因此AX常用作累加结果的存放处,也被称为累加器;

② BX:基址寄存器,当间接寻址时16位的BX寄存器作为基地址的专用存放处;

③ CX:计数寄存器,循环操作时CX中存放的是循环次数记录值;

④ DX:数据寄存器,在I/O端口间接寻址当中,16位的DX寄存器存放I/O的间接地址,此外,DX还存储32位运算(两个16位相乘)中结果的高16位。

具体来讲AX和DX寄存器在运算中的作用

DIV 在 8086 CPU 中是除法指令,而在使用除法的时候有两种情况,即除数可以是 8 位或者是 16 位的。除数可以存放在寄存器中或者是内存单元中,被除数放在AX中。当除数是 8 位时,被除数一定会是 16 位的,并且默认是放在 AX 寄存器中;而当除数是 16 位时,被除数一定是 32 位的,其中高16位放到DX中,低16位放在AX中。当除法指令执行完成以后,如果除数是 8 位的,则在 AL 中会保存此次除法操作的商,而在 AH 中则会保存此次除法操作的余数;如果除数是 16 位的话,则 AX 中会保存本次除法操作的商,而 DX 则保存本次除法操作的余数。

MUL 在8086CPU中是乘法指令,在做乘法运算时,两个相乘的数要么都是 8 位,要么都是 16 位。如果两个相乘的数都是 8 位的话,则一个默认是放在 AL 中,而另一个 8 位的乘数则位于其他的寄存器或者说是内存字节单元中;而如果两个相乘的数都是 16 位的话,则一个默认存放在 AX 中,另一个则是某个寄存器中或者是某个内存字单元中。当 MUL 指令执行完毕后,如果是 8 位的乘法运算,则默认乘法运算的结果是保存在 AX 中;如果是 16 位的乘法运算的话,则默认乘法运算的结果有 32 位,其中高位默认保存在 DX 中,而低位则默认保存在 AX 中。

综上所述:

数据寄存器符号

数据寄存器专用名称

专用情形

专用作用

AX

累加寄存器

累加

累加结果存放处

BX

基址寄存器

间接寻址

存放基地址

CX

计数寄存器

循环操作

存放计数值

DX

数据寄存器

IO端口的间接寻址

IO端口地址

32位数据运算

运算结果高16位

2. 基址寄存器(BP)

基址寄存器顾名思义是专用(间接寻址)时用于存放段基地址(逻辑段段首地址)所用,在通用时BP中存放的是数据,不可以拆分为两个8位寄存器。

3. 栈顶指针寄存器(SP)

当程序中使用堆栈区时,SP中存放的16位二进制数据为指向堆栈段栈顶的地址,在通用时SP中存放的是数据,不可以拆分为两个8位寄存器。BX和BP的区别如下所示:

寄存器符号

寄存器专用名称

地址指向数据的所在段类型

SP

栈顶指针寄存器

堆栈段

BP

基址寄存器

数据段

4. 变址寄存器(SI、DI)

变址寄存器中存放的地址可以指向代码段、数据段、附加段中的任意位置,不存放专用地址,因此也被称为变址寄存器。在通用时SI和DI中存放的是数据,不可以拆分为两个8位寄存器。

专用寄存器:标志寄存器

16位标志寄存器中有9位有效位,分别为6位状态标志位和3位控制标志位。

6位状态标志位记录了算术和逻辑运算的一些特征(例如:结果是否为0,是否有进位,借位,结果是否溢出等):

其中,要注意CF有效表明无符号数计算溢出(无符号位计算判断溢出的依据:最高位进位),OF有效表明有符号数计算溢出(有符号位计算判断溢出的依据:次高位和最高位进位/借位状态不同)。

控制标志位表征着CPU的运行状态:

陷阱标志位:表征CPU正处于单步运行状态,即每运行一条语句就会进入一次中断,也就是我们软件中常用的单步调试;

中断允许标志位:也成为中断屏蔽标志位,用于确定某个中断是否被允许(允许则为1);

方向标志位:表明了操作串的操作方向,操作串顾名思义就是一系列在内存上连续分布数据进行连续操作(数据串是存储器中一块字节或字的存储区域,其长度可以是1字节一64K字节;串操作就是对数据串中每个元素所进行的操作,这种操作通常是组合操作,能完成几条指令的功能)。

专用寄存器:段寄存器

段寄存器一共有四个(代码段寄存器CS、数据段寄存器DS、附加段寄存器ES、堆栈段寄存器SS),其存储的地址分别指向代码段段首、数据段段首、附加段段首、堆栈段段首。

寄存器简称的由来

通用寄存器:

AX:accumulate register——累加器

BX:based register——基地址寄存器

CX:count register——计数器

DX:data registered——数据寄存器

段寄存器:

CS:code segment——代码段

DS:data segment——数据段

SS:stack segment——栈段寄存器

ES:extra segment——附加段寄存器

特殊功能寄存器:

IP:instructor  point——指令指针寄存器

SP:stack point——堆栈指针寄存器

BP:base point——基础指针

SI:source index——源变址寄存器

DI:destination index——目的变址寄存器

PSW:program state word——程序状态字

FLAGS寄存器的9个有效标志位:

OF(11位-overflow flag-溢出标志位):OV(overflow-溢出)/NV(not overflow-没溢出)

DF(10位-direction flag-方向标志位):DN(down-下方)/UP(up-上方)

IF(9位-interrupt flag-中断标志位):EI(enable interrupt-允许中断)/DI(disabled interrupt-不允许中断)

TF(8位-trap flag-陷阱标志位)

SF(7位-sign flag-负号标志位):NG(negative-负)/PL(plus-正)

ZF(6位-zero flag-零值标志位):ZR(zero-为零)/NZ(not zero-不为0)

AF(4位-auxiliary carray flag-辅助进位标志位):AC(auxiliary carry-有辅助进位)/NA(not auxiliary carry-没有辅助进位)

PF(2位-parity flag-奇偶标志位):PE(parity even-偶)/PO(parity odd-奇)

CF(0位-carry flag-进位标志位):CY(carried-有进位)/NC(not carried-没进位)

8086CPU中14个寄存器的详解相关推荐

  1. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  2. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  3. python中subplot是什么意思_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

  4. pythonpandas函数详解_对pandas中Series的map函数详解

    Series的map方法可以接受一个函数或含有映射关系的字典型对象. 使用map是一种实现元素级转换以及其他数据清理工作的便捷方式. (DataFrame中对应的是applymap()函数,当然Dat ...

  5. 创建emp表 oracle,Oracle中创建和管理表详解

    Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16   作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...

  6. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  7. python中mat函数_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

  8. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  9. OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)

    OpenCV-Python实战(14)--人脸检测详解(仅需6行代码学会4种人脸检测方法) 0. 前言 1. 人脸处理简介 2. 安装人脸处理相关库 2.1 安装 dlib 2.2 安装 face_r ...

  10. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

最新文章

  1. ExtendHelper
  2. resourceAsStream
  3. mysql 知识整理(待续)
  4. oracle 11g 下载地址
  5. oracle 常用知识点整理
  6. 输入特定字符和只能输入数字。
  7. Linux删除证书文件命令,Linux基础面面观之文件复制、移动、删除的命令
  8. 【论文阅读】SIR模型下网络中多信息源检测 2014-IEEE
  9. 全视频沟通不再远 罗技为中国企业开启视频协作新格局
  10. L - Farm Irrigation (并查集
  11. Vue:vue组件生命周期
  12. Centos 6 编译安装 Apache 2.4
  13. 3dmax导入REVIT
  14. 查看tomcat目前用的jdk版本
  15. 【无机纳米材料科研制图——OriginLab 0206】Origin绘制X射线衍射XRD堆叠图
  16. 一个https神奇的故事
  17. 文件及文件的操作-读、写、追加的t和b模式
  18. SQL中连接JOINS总结
  19. 计算机专业屏幕尺寸,简单查看电脑屏幕尺寸、配置
  20. python 语音识别校正_Python语音识别时间偏移量

热门文章

  1. 互联网日报 | 贾跃亭宣布破产重组完成;小米发布首款OLED电视;湖南迎来首家本土航空公司...
  2. 惠普怎样启动计算机上的无线功能,如何打开hp无线网卡?如何打开惠普笔记本电脑无线网卡...
  3. WIN XP自动关机方法
  4. 收藏、退出一气呵成,2019年机器之心干货教程都在这里了
  5. python语言实现医院管理系统
  6. 24合1芯片RK628D替代龙讯LT6911C/东芝TC358749XBG/HDMI TO MIPI...
  7. 医院信息中心机房建设
  8. Android APP常用的图标尺寸
  9. 佳能ts9020墨盒不识别_打印机 篇一:Canon 佳能 TS9120 开箱使用体验、墨水和无线网连接...
  10. 深度学习基础笔记——卷积神经网络概念及其计算方式