指令究竟是什么?机器码又是什么?

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

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

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

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

———————————————————————————————————————————翻译

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

因此硬件才是程序可以运行的基础。
计算机系统结构就是软硬件的接口,人们在这个部分设置一系列的规范,硬件的开发者按照规范去实现硬件。
把规范的每一条指令都用逻辑电路去实现。
值得注意的是,每一条指令都有逻辑电路实现,这句话还能够细分。
有些指令它的逻辑电路属于共用实现,也就是说好几个逻辑电路配合起来完成该指令,这些逻辑电路也能够是另外一条指令的组成部分。
有些指令它的逻辑电路属于专用实现,好比x86的mmx或sse扩展指令,每一条mmx或sse指令都对应了专用的硬件电路。
很简单就能想到——指令越多,硬件电路也越多越复杂。
这样上层依赖于指令的高级语言,才能完成各类功能,若是没有底层指令支持,程序是没法运行的。
因此在学习过程当中,遇到一条指令,“为何会有这个指令?”,“为何指令是这个格式?”
诸如此类的问题,那是由于最初在计算机系统结构部分(分析+评测),被人为规定好的!
先有规范,再去实现硬件!
内存