计算机系统层级以及指令与微指令的执行

   最近看深入了解计算机系统,在开始的时候有对hello.c程序的在计算机内部的执行分析过程,于是就有了前面转载关于gcc对hello.c逐步编译的过程的帖子。现在对其补充与进一步的深入分析与讨论。


        计算机系统层级可以由用户到底层硬件划为以下几层:
        1.高级语言级:也就是大家所熟悉的C,C++,JAVA等等。
        2.汇编语言级:对高级语言进行预处理,编译后生成汇编语言,程序员也可以直接编写。linux下可以gcc -E hello.c -o hello.i.进行预处理,然后进行通过gcc -s hello.i -o hello.s生成汇编语言的文件。
        3.操作系统级:由操作系统程序实现。这些操作系统由机器指令和广义指令组成,这些广义指令是操作系统定义和解释的软件指令,所以这一级也称为混合级。
        4.一般机器级:生成的汇编文件通过gcc hello.s -o hello生成hello的可执行文件,及用0,1表示的二进制文件,它是cpu执行的指令的集合。一个指令代表着计算机执行的一个逻辑或算术单元。
        例如:mov r1,r2 将r2寄存器的内容移到r1寄存器中;add r1,r2 将两个寄存器相加的结果放入r1寄存器中。这样的一个汇编语句分别代表着一个逻辑或算术单元,它通过编译器转变为一个对应的二进制指令。
        5.微指令级:一般机器级的一条指令在cpu可能要分成多部进行,或者说cpu的一次运算无法完成我们所要求的一个逻辑或算术单元。那么这样的一条指令就需要划分为多条cpu一次可以完成的小的指令,这样的小指令就是微指令了。一条指令一般上需要多个微指令来完成。


        通过以上的了解,进一步了解微指令与指令直接是如何进行对应的:
        下图中从“状态条件”往下的部分是微程序控制器的原理框图主要包括了:地址转移逻辑,控制存储器和两个寄存器。这两个寄存器合称为微指令寄存器。

    
        微指令控制器中微地址寄存器在上一个指令结束结束后,自动指向取值微指令。假设此时pc指向的指令正好是add r1,r2对应的二进制指令在内存中的地址。通过地址译码器从主存储器或Cache中取得该指令,并放入IR中。地址转移逻辑通过对该指令以及状况条件和P
字段的逻辑分析,形成微指令的地址并存入微指令寄存器。控制寄存器中存放了为cpu设计好的微指令集。控制存储器从微地址寄存器获取地址并译码后,找到要执行的微指令,然后送到微命令寄存器。微命令寄存器中的操作控制字段以0,1分别代表低,高电频向执行部件发送信号,使计算机执行实际的操作。当微地址寄存器中的P字段全为0时,地址转移逻辑器不对微地址寄存器进行强行修改,微地址寄存器自动加1,执行控制存储器中存放的下条微指令;当P字段不全为0以及执行部件返回的状态条件要求微指令地址转移时,地址转移逻辑器强制修改微地址寄存器中的微指令地址,从而执行需要的下条微指令。当一条指令及它对应的微指令集(微指令程序)执行完后,微地址寄存器再次指向取指令功能的微指令。开始取下一条指令。从而使cpu循环往复的执行指令。




      

posted @ 2013-10-01 10:33  ps龙之吻  阅读(2314)  评论(0编辑  收藏  举报