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. Spring容器中Bean的作用域
  2. php防止模拟请求,php防止伪造跨站请求实现程序_PHP教程
  3. XNA2.0 API --- ViewPort.Unproject出错啦
  4. 计算机辅助设计b实验目的,上海电力学院电路计算机辅助设计1--含有受控源电路辅助分析...
  5. C++实现复制文本粘贴文本功能
  6. 生鲜电商/社区团购/团长中心、地址管理、自提点、订单列表、限时折扣、预售、会员储值、钱包、同城配送、门店自提、团长自提、采购、履约、仓储、运输、财务、移动端电商原型、rp源文件、axure电商原型
  7. UVA10120 ZOJ1229 Gift?!【DFS+BFS】
  8. 【VHDL】半减器和全减器的设计
  9. 归零的心态,做好团队回顾
  10. coldfusion_ColdFusion中的数据结构简介
  11. 四大免费magento支付接口扩展
  12. 宏观经济学gdp计算方法_曼昆宏观经济学读书笔记(一):GDP、通胀率、失业率...
  13. 百度网盘和官网下载并安装windows版本的Redis
  14. ES6新特性(部分语法)
  15. 关于更新pip后pycharm工程中设置还是显示老版本的解决办法
  16. python爬取去哪儿网机票_王老吉携手去哪儿网,打造出行全链路营销盛事
  17. 【精品推荐】像极百度传课iOS版,非常赞的教育类应用
  18. python面向对象编程开胃菜
  19. 6月份Github上最热门的开源项目排行出炉
  20. pandas合并列-直方图-读取word文件-merge-读取nan行

热门文章

  1. NLP数据预处理——同义词替换程序
  2. 计划超越苹果!诺基亚在印度推出笔记本电脑
  3. 利用系统函数获取Windows明文密码
  4. 国内最大的两个网盘(rayfile和纳米盘)神秘资源下载搜索技巧
  5. 【钛坦白】清华大学李建:深度学习在时空大数据分析中的应用(转载)
  6. 冰点还原精灵软件功能及优势
  7. mysql preparedstatement 批量update_Statement和PreparedStatement批量更新
  8. ps画画模糊笔刷_PS十个必须知道画笔的使用技巧
  9. java 安卓 物联网_面向物联网的Android应用开发与实践
  10. java与javaw运行jar程序