cpu的实模式

由于mbr在实模式下工作……什么?什么是实模式?这时候有同学打断了我。我心想,这下好办了……哈哈,没有啦,开个玩笑而已。我们这里所说的实模式其实就是8086 cpu的工作环境、工作方式、工作状态,这是一整套的内容,并不是单指某一方面的设置。

实模式是指8086 cpu的寻址方式,寄存器大小,指令用法等,是用来反应cpu在该环境下如何工作的概念。所以想了解实模式这种抽象的概念,主要就是了解在实模式下cpu能做什么。

大家都学过汇编语言吧,里面有讲实模式、保护模式之类的,但鉴于太过久远,为了让后面的工作顺利进行,我觉得还是有必要给大家介绍下cpu的工作模式。

cpu的工作原理

在介绍cpu的各种模式之前 ,先占用大家几分钟的时间 ,说点在两种模式下公共的内容,和大家聊聊cpu的工作原理。当然这里所说工作原理可不像微机接口技术里那么细致,精确到逻辑门等电子电路。第一我也不会,想讲也讲不出来,吼吼^0^。第二我觉得没必要懂到那么细致,如果懂的太细了,会为之所累,您想,每次执行一条指令时,您的大脑总是联想到各种元件的工作流程,本来一瞬间完成的工作您可能要给放大一千倍,非得强迫症似的要求掌握每个步骤的细节,万一在哪个点上想不通了这就会让人感到很沮丧,影响心情,甚至质疑上层的编译器,哈哈,我知道说的有点严重了,不夸张一点的话不容易表述问题,好了,下面在宏观上介绍下cpu工作原理。

大家都知道,cpu的唯一的任务就是执行指令,在它眼里,指令就是一串010101…,那它执行每条指令的流程是怎样的呢。cpu大体上可以划分为3个部分,它们是控制单元、运算单元、存储单元。控制单元是cpu的控制中心,cpu需要经过它的帮忙才知道自己下一步要做什么。而控制单元大致是由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)、操作控制器OC(Operation Controller)组成。程序被加载到内存后,也就是指令这时都在内存中了,指令指针寄存器IP指向内存中下一条待执行指令的地址,控制单元根据IP寄存器的指向,将位于内存中的指令逐个装载到指令寄存器中,但它还是不知道这些指令是什么,在它眼里的0101串此时还没有实际意义。然后指令译码器将位于指令寄存器中的指令按照指令格式来解码,分析出操作码是什么,操作数在哪里之类的。下面给出了一般的指令格式:

 前缀 操作码 寻址方式、操作数类型 立即数 偏移量

看上去还是蛮复杂的,复杂的原因是必须用一种统一的格式去归纳所有形式的指令,因为cpu只能识别一种格式,万物的源头必须是最简单的,cpu也一样。这就好比要求用一句话表达出宇宙苍生,似乎看上去不可能?能,一定能,只要这句话足够长就行^_^。就像等待女朋友化妆一样,她怕你等烦了,于是就安慰你一句:“还有一首歌的时间就好了”,其实你明白,这首歌是《黄河大合唱》,一共8个乐章且唱呢……^5^。

由于cpu支持的指令数量较多,一些指令还可以搭配一些辅助的东东,所以就需要在前缀部分记录这些,如rep(用于重复执行,汇编中经常用)、段超越前缀。操作码就是大家平时用的mov、jmp等等。寻址方式又有好多,如基址寻址、变址寻址等等,操作数类型中记录的是用哪些寄存器之类的。如果在指令中用到了立即数,就要将其记录到指令格式中立即数部分,如果寻址方式中有到了偏移量,就要将此偏移量记录到指令格式中的偏移量部分。

既然指令是存放在指令寄存器中,那指令中用到的数据存放到哪里呢,下面介绍存储单元。

存储单元是指cpu内部的L1、L2缓存及寄存器,待处理的数据就存放在这些存储单元中,这里的数据是说指令中的操作数。为什么数据已经在内存中了还非得在cpu内部再整这么个存储单元干吗?原因是缓存基本上都是采用SRAM (Static RAM)存储器,从名字上看就知道它是一种具有静态存取功能的存储器。这么一说,似乎还有动态存储功能的存储器?是啊,其实我们插在主板上的物理内存就是DRAM(Dynamic Random Access Memory), DRAM内存需要每隔一段时间就去刷新电路,刷新就是指给DRAM充电,否则存储的数据就会丢失。而SRAM不需要刷新电路即能保存它内部存储的数据,这就是静态的含义,因此SRAM性能较强劲。但SRAM也不是完美无缺的,它的集成度较低,相同容量之下,SRAM的体积比DRAM要大很多。所以二级缓存都不大,目前来说顶多4兆左右,所以现代cpu用二级缓存的数量取胜,如L1、L2、L3共三级。寄存器可分为两大类,程序员可以使用的寄存器称为程序可见寄存器,如通用寄存器,段寄存器。程序不可见寄存器是指程序员不可使用,也无法访问到它们,系统运行期间可能要用到的寄存器,如ALU算术逻辑单元在求和时,会将结果先送到数据暂存寄存器。操作码有了,操作数有了,就差执行指令了,随后“操作控制器”给相关部件发信号,会给哪些部件发信号呢?如下面要介绍的运算单元。

运算单元是负责算术运算(加减乘除)和逻辑运算(比较、移位),它从控制单元那里接收命令(信号)并执行,它没有自主意识,只是个执行部件。它们之间的关系如图:

好啦,文字描述过了,图也看过了,总结下cpu的工作原理:控制单元要取下一条待运行的指令,该指令的地址是在程序计数器PC中,在x86cpu上,程序计数器就是cs:ip。于是读取ip寄存器后,将此地址送上地址总线,cpu根据此地址便得到了指令,并将其存入到指令寄存器IR中。这时候轮到指令译码器上场了,它根据指令格式检查指令寄存器中的指令,先确定操作码是什么,再检查操作数类型,若是在内存中,就将相应操作数从内存中取回放入自己的存储单元,若操作数是在寄存器中就直接用了,免了取操作数这一过程。操作码有了,操作数也齐了,操作控制器给运算单元下令,开工,于是运算单元便真正开始执行指令了。ip寄存器的值被加上当前指令的大小,于是ip又指向了下一条指令的地址。接着控制单元又要取下一条指令了,流程回到了本段开头,cpu便开始了日复一日的循环,由于cpu特别不容易坏,所以唯一它停下来的条件就是停电。

以上是cpu的工作原理,无论cpu在哪种模式下工作,这一核心原理是不变的。有了这一思想武装起来后再讲模式就简单多了,兄弟们加油,下一节,不见不散。

一步步编写操作系统 10 cpu的实模式相关推荐

  1. 一步步编写操作系统 25 cpu的保护模式

    在保护模式下,我们将见到很多在实模式下没有的新概念,很多都是cpu硬件原生提供,并且要求的东西,也就是说按照cpu的设计,必须有这些东西cpu才能运行.咱们只要了解它们是什么并且怎么用就行了,不用深入 ...

  2. 一步步编写操作系统 29 cpu缓存简介

    缓存是20世纪最大的发明,其原理用一些存取速度较快的存储设备做为数据缓冲区,避免频繁访问速度较慢的低速存储设备,归根结底的原因是,低速存储设备是整个系统的瓶颈,缓存用来缓解"瓶颈设备&quo ...

  3. 一步步编写操作系统 30 cpu的分支预测简介

    人在道路的分岔口时要预测哪条路能够到达目的地,面对众多选择时,计算机也一样要抉择,毕竟计算机的运行方式是以人的思路来设计的,计算机中的抉择其实就是人在抉择. cpu中的指令是在流水线上执行.分支预测, ...

  4. 一步步编写操作系统 60 cpu的IO特权级2 什么是驱动程序

    用户程序可以在由操作系统加载时通过指定整个eflags设置,操作系统如何设置自己的IOPL呢,即使内核IOPL为0也得写进去eflags寄存器中才生效.可惜的是,没有直接读写eflags寄存器的指令, ...

  5. 一步步编写操作系统 59 cpu的IO特权级1

    在保护模式下,处理器中的"阶级"不仅体现在数据和代码的访问,还体现在指令中. 一方面将指令分级的原因是,有些指令的执行对计算机有着严重的影响,它们只有在0特权级下被执行,因此被称为 ...

  6. 一步步编写操作系统 31 cpu的分支预测 下

    让我们说说预测的算法吧. 对于无条件跳转,没啥可犹豫的,直接跳过去就是了.所谓的预测是针对有条件跳转来说的,因为不知道条件成不成立.最简单的统计是根据上一次跳转的结果来预测本次,如果上一次跳转啦,这一 ...

  7. 一步步编写操作系统 28 cpu乱序执行

    乱序执行(乱序执行译作异步执行更贴切),是指在cpu中运行的指令并不按照代码中的顺序执行,而是按照一定的策略打乱顺序执行,也许后面的指令先执行,当然,得保证指令之间不具备相关性. 举个简单的例子,比如 ...

  8. 一步步编写操作系统 15 CPU与外设通信——IO接口,下

    既然都说到IO接口了,不知道各位有没有疑问,cpu是怎样访问到IO接口呢?肯定得有个链路吧?什么?有隐约听到有同学开玩笑说:cpu用无线访问其它设备.哈哈,不知道各位听说过没有,无线的终端是有线.无论 ...

  9. 一步步编写操作系统 14 CPU与外设通信——IO接口 上

    介绍显卡之前,必须得和大家交待清楚,那么多的外部设备,cpu是如何与他们交流. 大家都学过微机接口技术吧?没学过也没关系,反正我也只是笼统地说说^_^,保证大家一定能看得懂. 按理说,如果硬件种类较少 ...

最新文章

  1. SQL基础学习总结:5(HAVING子句的使用ORDER BY排序子句的使用)
  2. Android -- Fragment注意事项
  3. 实用网站和在线工具推荐
  4. 一个express老系统csrf漏洞修复
  5. 修改elementUI组件样式无效的问题研究
  6. WP7 开发(九) WP7控件开发(六)-DeepZoom技术
  7. 无重叠区间及用最少的箭射爆气球
  8. 不用数学讲清马尔可夫链蒙特卡洛方法?
  9. UIButton @selector 想要传递多个参数
  10. 使用若依写微信小程序登录授权认证接口
  11. 蚂蚁金服开源服务注册中心 SOFARegistry
  12. 西班牙打掉一黑客集团 曾千万台肉鸡
  13. m6000查看端口状态_中兴ZXR10 M6000维护最常用命令精要
  14. 厨师服识别yolov5明厨亮灶
  15. 如何利用whatsapp群发助手开发国外客户
  16. 魔力 java下载安装,UBNT EdgeMAX EdgeRouter ERPoE-5 POE+ UAP-AC-PRO开箱及安装调试
  17. 进程创建的优化设计(上)
  18. 空气质量指数计算公式
  19. (四)Tensorboard学习——mnist_with_summaries.py
  20. Python课程设计大作业:获取比赛数据并进行机器学习智能预测NBA的比赛结果

热门文章

  1. 动画---图形图像与动画(三)Animation效果的XML实现
  2. linux curl命令验证服务器断点续传支持
  3. xvhfeng的工作回忆总结(第二年)阅读手记
  4. 几个实用的Servlet应用例子-入门、cookie、session及上传文件
  5. mysql-安装报错计算机中丢失MSVCR100.dll文件丢失
  6. java 反射 成员变量_java基础--反射(成员变量)
  7. 操作系统短作业优先(SJF)调度算法
  8. python爬取bilibili弹幕_python爬虫:bilibili弹幕爬取+词云生成
  9. 银行招聘网计算机类笔试,中国人民银行计算机类笔试模拟题
  10. 中英对照 关于计算机的科技英语,《计算机专业英语》(中英文对照).pdf