zoukankan      html  css  js  c++  java
  • 指令到底是什么?机器码又是什么?

    在初学C语言编程的时候,有这么一个概念——程序是由指令构成,若干条指令按照一定的顺序排列,来完成某个特定的任务。
    我就在想指令到底是什么?

    网络上说:“高级语言被翻译成汇编指令,汇编指令又被转换为可执行机器码。”
    那么,汇编指令到底是什么?
    汇编里的mov,add,sub,到底是什么?
    教材里说汇编指令就是机器码,那机器码又是什么?

    我们都知道计算机是由硬件电路组成的,而基本的硬件电路,只能完成最简单的功能。
    这肯定不能满足需求,于是人们把这些基本的硬件电路组合成复杂的电路,来实现复杂的功能。

    ——————————————————————————————————————————
    假设我们有一块复杂的电路,它只能完成“加”和“减”两个功能,这两个功能是由两个单独的部件实现,加法电路和减法电路。
    要驱动电路工作,就必须给它一个电信号,加法的电信号与减法的电信号肯定不同。
      因为电路本身没有智慧,如果信号相同,它无法区别到底使用哪一个部件。
      这两个不同的信号就能实现两个不同的功能。
    要想实现更多的功能,比如乘法,除法,就往它身上上添加新的硬件电路。
    最后添加完成的复杂电路,就叫做微体系结构。
    回到当初的问题,指令到底是什么?
    指令(机器码)就是信号,不同的电信号就能驱动不同的硬件,来实现不同的功能。
    许许多多各不相同的指令(机器码),人们给它归纳汇总,就是指令集系统。

    ———————————————————————————————————————————

    指令就是信号说起来蛮简单。
    机器码在我们人类看来它就是个二进制数,又怎么变成信号了?
    实际上在cpu内部,指令的具体执行还是挺麻烦的。
    一条指令通常可以被分成两个部分:操作码   地址码
    计算机在执行一条指令的时候,常规步骤如下:
    1.  从内存里取出指令;
    2.   把该指令放到指令寄存器;
    3.  cpu内部有一个硬件电路叫做译码器,它就负责把指令寄存器中的指令操作码进行“翻译”,翻译结果交给操作控制器(硬件电路),控制器产生控制信号!
    4.  指令寄存器中那条指令的地址码,被送到地址寄存器;
    到了第3步,指令到信号的转换才真正完成。

    所以硬件才是程序能够运行的基础。
    计算机系统结构就是软硬件的接口,人们在这个部分设置一系列的规范,硬件的开发者按照规范去实现硬件。
    把规范的每一条指令都用逻辑电路去实现。
    值得注意的是,每一条指令都有逻辑电路实现,这句话还可以细分。
    有些指令它的逻辑电路属于共用实现,也就是说好几个逻辑电路配合起来完成该指令,这些逻辑电路也可以是另一条指令的组成部分。
    有些指令它的逻辑电路属于专用实现,比如x86的mmx或sse扩展指令,每一条mmx或sse指令都对应了专用的硬件电路。
    很简单就能想到——指令越多,硬件电路也越多越复杂。
    这样上层依赖于指令的高级语言,才能完成各种功能,如果没有底层指令支持,程序是无法运行的。
    所以在学习过程中,遇到一条指令,“为什么会有这个指令?”,“为什么指令是这个格式?”
    诸如此类的问题,那是因为最初在计算机系统结构部分(分析+评测),被人为规定好的!
    先有规范,再去实现硬件!
    ————————————————
    版权声明:本文为CSDN博主「dark_tone」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/dark_tone/article/details/52426886

  • 相关阅读:
    MySQL之视图
    C# 学习笔记(二) 时间格式化字符串
    C# 学习笔记(一) Winform利用Assembly反射动态创建窗体
    puppet 4.4 System Requirements
    Linux下MySql启动时报错
    Linux Iptables
    Nginx Configure时配置
    Wireshark 使用教程
    Linux 下安装oracle数据库
    CaseFile
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/12211012.html
Copyright © 2011-2022 走看看