CPU是怎么执行指令的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU是怎么执行指令的?相关的知识,希望对你有一定的参考价值。

参考技术A

计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

扩展资料

CPU主要功能

1、处理指令

英文Processing instructions;这是指控制程序中指令的执行顺序。程序中的各指令之间是有严格顺序的,必须严格按程序规定的顺序执行,才能保证计算机系统工作的正确性。

2、执行操作

英文Perform an action;一条指令的功能往往是由计算机中的部件执行一系列的操作来实现的。CPU要根据指令的功能,产生相应的操作控制信号,发给相应的部件,从而控制这些部件按指令的要求进行动作。

3、控制时间

英文Control time;时间控制就是对各种操作实施时间上的定时。在一条指令的执行过程中,在什么时间做什么操作均应受到严格的控制。只有这样,计算机才能有条不紊地工作。

4、处理数据

即对数据进行算术运算和逻辑运算,或进行其他的信息处理。

其功能主要是解释计算机指令以及处理计算机软件中的数据, 并执行指令。在微型计算机中又称微处理器,计算机的所有操作都受CPU控制,CPU的性能指标直接决定了微机系统的性能指标。

CPU具有以下4个方面的基本功能:数据通信,资源共享,分布式处理,提供系统可靠性。运作原理可基本分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。

参考资料来源:百度百科-中央处理器

CPU指令的流水线执行

        指令集是CPU体系架构的重要组成部分。C语言的语法是对解决现实问题的运算和流程的方法的高度概况和抽象,其主要为算术、逻辑运算和分支控制,而指令集就是对这些抽象的具体支持,汇编只不过是为了让开发人员更好地记住指令,但它跟CPU所认的机器码其实是一一对应的,因此汇编也是低级语言。

        CPU的指令执行一般包括取指、译码和执行,这是经典的三级指令执行流水线,教科书上往往以这三种过程来描述,arm7也是。但是现代的CPU设计往往使用更广泛使用的5级流水线,也就是分为取指、译码、执行、访存和回写。为什么要分为5级?这是由流水线的各个阶段的时间来决定的。我们可以考虑现实生活的工厂的流水线。

        假设某流水线只有 三个工序,有三个工人A、B、C,则这条生产线的效率就取决于效率最低的那个工人的效率。现假设B做完其负责的工序需要10秒,而A和C完成只需要5秒,总共要完成4个产品。那总时间应该是:5+10*4+5 = 50秒,(第一个5是A先做第一道工序的时间,这时B和C都得等,而最后一个5是C必须要等B全部完成后才能开始)即会出现C在等待,而B一直在忙死忙活的场景。 

        当然,无论怎样,流水线的执行总比完成没有流水好,就好比A、B、C负责的工作都由一个人去做,那做完一个得20秒。全部做完得20*4 = 80秒。

        最理性的场景就是三个人做事的效率是一样的,那就不会出现等待的情况。那现在确实遇到B工作效率最低的问题,怎么解决呢?就是将B的工作重新分解,平均分成两个工序,也就是B1和B2,分别都是5秒完成,那完成的总时间是40秒。

         CPU指令的三级流水执行正是遇到各步骤流水时间不均的问题,也就是取指和译码往往比较快,而执行包括运算和访问寄存器、内存或者回写等功能,因此执行的时间一般比取指和译码要长,取指和译码可以在单时钟周期内完成,但执行需要2到3个时钟周期才能完成。要想得到更高的流水效率,就需要将执行部分分解为执行(运算等)、访存(内存)和回写(寄存器)。

         CPU指令的流水线执行对于软件开发人员来说,最重要的就是要知道当前PC(程序计数寄存器)的值与当前执行指令的关系。取指指的是CPU根据当前PC的值内存的对应地址去取指令,因此PC值永远都指的都是当前取指令步骤的地址,而译码则是CPU的一部分电路根据取出来的指令机器码进行译码,选择对应的电路来执行这条执行,如选择加法电路还是减法电路,还是逻辑与电路等等;执行就是这个电路的执行过程了。

         arm7的流水线示意图是:

 

             从图可以看到在T1时刻,CPU的执行电路执行的是MOV指令,而取指电路取的是SUB指令,因此当前执行电路的MOV对应的运行地址应该是当前PC值减8. 如果当前运行的指令是一个函数调用(即BL指令),但返回地址就应该是ADD指令所在的地址,即(PC减4)。

 

        有人问到流水线断流的问题,补充说明一下,断流主要有以下情况:

        1)数据相关。如第二条指令需要的数据正好是第一条指令执行的结果。这时第二条必须等待。

        2)分支跳转。指令分支判断之后,可能会顺序执行,也可能跳转到其他地方,这时也会引起流水线的断流。

 

 

 

 

 

以上是关于CPU是怎么执行指令的?的主要内容,如果未能解决你的问题,请参考以下文章

计算机复位后CPU的第一指令执行地址

多线程程序,当一条原子指令刚执行一半的时候,CPU时间片耗尽,此时是立刻切换线程吗?

CPU执行方式

开机CPU执行的哪些指令?

中断后CPU恢复执行的进程状态

怎样让CMD执行完一条指令过一定的时间执行下一条指令?