一、概述

机器语言是整个计算机体系中意义最深奥的接口-------它是硬件和软件相接的中间线。借由机器语言,程序员用符号指令表达的抽象思维被转换成执行在硅片上的物理操作,因此,既可以将机器语言看作编程工具,也可以将其看作硬件平台内部不可分割的一部分。

存储程序的基本思想其实相当简单。计算机基于固定的硬件平台,能够执行固定的指令集。同时,这些指令能够被当成构建模块,组成任意的程序。

在计算机操作的每一步,CPU从指令中取出一个字,对其进行解码,从而执行指定的指令,然后计算下一条将要执行的指令。

上一讲我们讲了底层逻辑计算和存储的实现原理,芯片的底层原理_u013978512的博客-CSDN博客。

这一讲,我们讲下程序是怎么被自动执行的(主要关注原理)。

二、原理

指令的内容是一串二进制数字的机器码,每条指令都有对应的机器码,CPU 通过解析机器码来知道指令的内容。不同的 CPU 有不同的指令集,也就是对应着不同的汇编语言和不同的机器码。

下面以一个demo为例,对原理进行一个解释。

假设上面有这样几个指令,每一个指令由8位组成,前四位是操作码,后四位代表地址或寄存器。那么机器在执行的过程中,是按照 取指令-》解码-》执行  的步骤进行的。每一步我们拆解来看。

2.1 取指令阶段

如上的一段程序,指令地址寄存器会从某个地址开始,根据时钟不断递增。假设目前指令地址寄存器的值是0,这时候0地址的内存被选中,其内容传输到指令寄存器(参考上一讲,地址和read enable线同时打开,就可以读取到锁存器中的值)。

2.2 解码阶段

0地址的代码00101110被读到指令寄存器中后,由于指令集约定好的,就是前四位是操作码,所以该指令的操作码是0010。

0010会激活某个电路,这个电路的输出就是1,通过查操作码和指令集的关系表可以看到这个电路当然就是LOAD_A指令对应的电路。不同的操作码会激活不同的电路。所以说指令集和硬件有密不可分的关系,这里就可以窥知一二。

2.3 执行阶段

LOAD_A电路的输出连上了内存的read enable线和寄存器A的write enable线。同时指令还有后四位,作为地址选中了某个内存单元,这里1110就是内存地址为14的内存单元。这样,就会把地址为14的内存单元的数据传输到了寄存器A。

LOAD_A指令我们就分析完了,其他的指令也是一样的原理。所以工程师为了避免陷入无尽的细节中,就进行了抽象,把上面几个阶段涉及的电路抽象为控制单元。

第一条指令把地址14中的值传给了寄存器A,以此类推,第二条指令是把地址15中的值传给寄存器B,第三条指令代表将寄存器A的值和寄存器B的值做加和,加法器的原理可参考前一篇文章。这就是程序、指令集和硬件的关系。

三、结论

所谓“指令”,其实就是“某个命令码“(一般叫机器码),这个”命令码”会改变CPU内部一堆“开关”的状态,以激活不同的电路;然后数据利用类似的机制,被送入这个被“指令”激活的电路。当数据(某种高低电平的组合)经过这些电路后,就会变成另外一组高低电平的组合:这个组合刚好和“指令”代表的功能所应该给出的结果一致。

有人说,我们输入的01010之类的机器码,怎么变成机器的高低电平的?其实,你所看到的0101的数字,只是幻象,只是为了人们好观察而已,其实自始至终都是高低电平的状态在改变。假设把你面前的显示器给扔了,你仍按照相同的姿势敲键盘,你就意识到键盘的敲击就是产生了一系列的高低电平的信息,这些数据会存在内存中。而给你配一个显示器,仅仅是为了把高低电平映射出来让你看到而已。

简而言之,代码在计算机内部,本身就是一组特定的高低电平组合;而计算机是精心设计的、海量的、用高低电平控制通断的开关组;当给这个开关组输入不同的电平组合时,就会导致它内部出现复杂的开关动作,最终产生另外一组高低电平的组合作为输出;这些开关动作经过精心设计,使得它的行为是可解释、可预测的——解释/预测的规则,就是CPU的指令集。

参考:

1. 【计算机科学速成课】[40集全/精校] - Crash Course Computer Science_哔哩哔哩_bilibili

软件和硬件的关系-机器码怎么转成电路状态并执行的相关推荐

  1. 软件和硬件的关系以及软件调动硬件的工作原理

    软件是一个纯虚拟的东西,他本身就是一块内存,软件在运行时内存在RAM中(目前是这么理解的),运行的时候,主要是通过相应的接口去调用某一块内存,以改变这块内存的数据.改变这块内存的数据的目的就是为了别人 ...

  2. 算力和硬件的关系_硬件与软件:躯体与灵魂

    原标题:硬件与软件:躯体与灵魂 前言: 前一段时间特斯拉可付费在线激活后排座椅加热功能又叒叕上了全网热搜,许多人都称之为软件定义汽车的又一次科普.软件定义汽车这个论断已经开始深入人心! 那么未来汽车真 ...

  3. 计算机基础- -应用和硬件的关系

    计算机基础- -应用和硬件的关系 文章目录 计算机基础- -应用和硬件的关系 一.应用和硬件的关系 1.支持硬件输入输出的IN指令和OUT指令 2.测试输入和输出程序 3.外围设备的中断请求 4.用中 ...

  4. modelsim安装_Modelsim 重度使用者的故事:验证设计,软件与硬件的故事

    本文首发于极术社区,授权转载知乎 Modelsim 重度使用者的故事:验证设计,软件与硬件的故事​aijishu.com 在开发 Verilog IP 的过程中,比如图像处理或者密码学的 IP .验证 ...

  5. 【计算机组成与设计:软件、硬件接口(1)】计算机概要与技术

    文章目录 一:引言 二:8个伟大思想 三: 程序概念入门 四:硬件概念入门 五: 处理器和存储器 六:性能 七:功耗 八:单处理器→多处理器 九:Intel Core i7实例 十:谬误与陷阱 十一: ...

  6. 从软件到硬件,2017 我GET到的15条产品心得总结

    ---- / BEGIN / ---- 2017,大部分时间围绕着微信生态来做产品,从小程序到企业微信,从 C 端到 B 端,不禁引发一些思考. 微信是当今中国最为成功的产品,是否他做的都是对的呢?同 ...

  7. 【链环科技】智能硬件APP开发——通过硬件对接,实现软件与硬件设备的完美结合

    2020年,当物联网.智能家居.5G等科技词汇大范围的进入群体视线时,意味着新型互联网技术的研究和兴起.[重庆链环科技]目前的发展方向"软件开发+硬件对接"这是一种全新的科技概念. ...

  8. 该去大公司还是小公司?软件和硬件谁更重要?

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 我是2011年毕业于三流本科学校的,大学时候学的电子信息工程,毕业后通过关系进入到本 ...

  9. 单片机复位后为什么要对sp重新赋值_单片机系统抗干扰,软件 VS 硬件哪个重要?...

    在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活.节省硬件资源.可靠性好越来越受到重视.下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究. 1.软件抗干扰方法的研究在工程实践中 ...

最新文章

  1. Xshell5中常用linux服务器命令集合
  2. Tensorflow实现神经网络及实现多层神经网络进行时装分类
  3. MCS-51系列特殊功能寄存器(摘抄)
  4. Android读取/dev/graphics/fb0 屏幕截图
  5. 简单了解Vue的异步请求,axios-0.18.0.js插件实现异步
  6. C# 中的数字分隔符 _
  7. 人工智能和计算机软件,人工智能在计算机软件方面有什么应用?
  8. 片段中的findViewById
  9. 运筹学在不同环境下的决策 -- 学习记录
  10. python数据处理可以做什么菜_厌倦了EXCEL想玩点新花样?教你利用Python做数据筛选(下)...
  11. 海康sdk java_java调用海康sdk案例
  12. matlab 16qam误码率图,16QAM理论误码率与实际误码率MATLAB仿真程序(最新整理)
  13. 怎么导出微信聊天的记录到Word
  14. 基于HFSS的圆形左旋圆极化贴片天线仿真分析
  15. 强智教务系统验证码识别 OpenCV
  16. 判断奇偶数的程序c语言子函数,C程序检查数字是偶数还是奇数
  17. mysql 数字 除以 一万_腾讯股票接口、和讯网股票接口、新浪股票接口、雪球股票数据、网易股票数据...
  18. 从零开始学习D2-Admin,只要学习,任何时候都不晚!
  19. 微创新时代个人崛起的方法
  20. STM32 CUBEMX 修改单片机型号 个人操作记录

热门文章

  1. HI3516DV300在SDIO1总线上对接RTL88x2BS中的wifi
  2. python中虚线怎么打出来_python – 带有虚线或虚线的opencv矩形
  3. 华为防火墙对ospf的处理
  4. java字符编码采用_JAVA字符编码三:Java应用中的编码问题
  5. 使用 WMI 获得计算机信息
  6. java中判断集合为空_java如何判断list集合为空
  7. 京东2016笔试题,小东复习
  8. 小东吖 之 java File类
  9. 最小生成树的拓展应用
  10. C# Flurl 高性能的访问http