正文

指令集体系结构(1)

大话处理器 作者:万木杨


 

2009年6月15日,MIPS公司网站发布新闻,中国科学院计算所取得MIPS32和MIPS64 Architecture的授权,用于龙芯的开发和商用。在处理器领域,Architecture指处理器的指令集体系结构,Microarchitecture指处理器的微架构,也就是内部实现的结构。这则新闻翻译一下就是:龙芯采用了MIPS的指令集。

处理器是电子、信息领域最关键、最底层的技术,一直被国外把持着,龙芯作为我国自主研发的处理器,牵动着各方面的神经,我们都希望自己的处理器能完全自我创新,不被外界控制,然而,龙芯还是不得不使用了现存的指令集,这归根到底,还是指令集的威力太强大,它的强大在于它背后是一个生态链,而不是一家公司。

指令集就像语言(汉语、英语等)一样,定义一套语言其实并不难,难的是你要让别人去接受你定义的语言。如果重新使用一套指令集,与之配套的编译器、操作系统、各种应用软件也都要重新编写,这样的工作量和难度,是无法想象的,因此使用现存的指令集及软件,也是无奈的选择。3.1  指令集是什么

3.1.1  从处理器编程模型谈起——一切从模型开始

处理器的主要任务就是计算,如C = A + B,人们一看就知道这句话是什么意思,但是处理器只能认识0和1,不认识这句话,而且处理器更不知道C = A + B和C = B + A是一个意思。因此,我们要定义一套规则让计算机能够理解人类的意图。

我们将A、B、C称为操作数,“+”称为操作码。处理器中做运算的单元称为ALU(算术逻辑单元),操作码代表了ALU中的一个运算。操作数存储在存储器(Memory)中,由于从存储器中访问数据很慢,因此在离ALU很近的地方放置了一些寄存器(Registers),这样中间计算结果就可以存储在寄存器中,不用每次都经过存储器。

一个基本的C = A + B操作,可以分解为下面这些小的步骤来完成:

load  R3,  #0; 从内存地址0处取A这个值,放在R3中

load  R2,  #1; 从内存地址1处取B这个值,放在R2中

add  R0, R3, R2; 把R3和R2相加,结果存放到R0中

store  R0,  #2; 把R0中的值存放在内存地址2中

每行语句就是一条指令,load、add、store为操作码,后面跟着的是操作数,“;”后面为注释,这种指令的写法就是汇编语言的格式。处理器公司对外发布的指令集手册,就使用汇编语言来进行描述。

由于计算机只能认识0和1这两个数字,不认识load、add这些字,因此,这些字要被编码为计算机能认识的格式。

我们对操作码进行编码,假设处理器只有4条指令,那么每条指令用2 bit即可              表示:

同样的方法,可以对寄存器和内存进行编码。

这时候,我们就可以定义add这条指令在计算机中的格式:

这种经过编码后的指令称之为机器语言。

处理器在读到指令01001110时,根据指令的格式进行解码,解出操作码和操作数,然后执行。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号