指令字长,可以简单理解为指令的位数。所以指令的字长(不同的机器不相同),主要取决于:
- 操作码长度
- 操作地址的长度
- 操作地址的个数
指令字长分为固定跟可变两种。固定的指令字长,结构简单,控制线路简单。可变的指令字长,结构灵活,充分利用了指令长度,但是控制复杂,一般按照字节的倍数而变化。
上一篇说过操作码分为定长操作码跟不定长操作码。下面介绍一下不定长操作码。
不定长操作码(扩展操作码技术)
不定长操作码,其位数随着地址数的减少而增加。假设指令字长为16位,我们画一下初始为3地址码的情况。
当操作码为4位的时候,我们可以得到最多15条三地址指令,就像这样(从000 - 1110):
当操作码为8位的时候,最多有15条二地址指令:
那么当操作码为12位的时候呢?可以依次画出所有的情况。
指令设计:从全0到全1,最多有16种,将0000到1110用作15条三地址指令,把1111作为扩展标识。也就是说,若指令的前4位都是1111,则它表明这条指令操作码长度至少为8,。将操作码扩展到8位,因此减少了一个地址字段。(这里注意,前面的情况都是15条指令,因为1111用于拓展,后面的零地址码,由于不能再拓展,所以是16条指令)。
不定长操作码的设计不是单一的有4个操作码为一组的,比如我们大可以设计一组指令,满足下面条件:
- 有15条三地址指令
- 有12条二地址指令
- 有62条一地址指令
- 有30条零地址指令
可以动手试试(这里不说了)。这样设计可以得到指令的操作码长度分别是4,8,12,16不等的长度。
CISC与RISC的基本概念
按指令的复杂程度,可以将指令分成CISC和RISC两种类型的指令系统。
复杂指令系统计算机(CISC)
随着VLSI技术的发展,硬件成本的不断下降,软件成本的不断攀升,促使人们在指令系统中增加了许多更加复杂的指令,以适应不同的领域,于是便有了CISC。
主要特点:
- 指令系统复杂庞大
- 指令长度不固定,指令格式多,寻址方式多
- 控制器大多采用微程序控制
代表:Intel公司的x86系列CPU是典型的CISC体系结构
例子:主要应用于桌面PC,笔记本市场(windo,Mac等)
从最初的8086到后来的Pentium系列,每出一代新的CPU,都会有自己新的指令,而为了兼容以前的CPU平台上的软件,旧的指令集又不得不被保留,这使得指令系统越来越复杂,而且,CISC使计算机的研制周期变长,难以保证正确性。不易调试维护,并且采用了使用频率很低的复杂指令而造成硬件资源浪费。
精简指令系统计算机(RISC)
基于28定律:对传统CISC指令系统的研究表明,各种指令的使用频率相差悬殊,大概只有20%的比较简单的指令被反复使用,越占程序的80%,而80%左右的指令则很少使用,约占整个程序的20%。从这一事实出发,于是RISC随之产生:
- 选取使用频率较高的简单指令,并能组合成复杂的指令
- 指令长度固定,指令格式种类少,寻址方式种类少
- 只有load/store(存/取数操作)。其余指令的操作都在寄存器之间完成。
- CPU有多个通用寄存器(比CISC多很多)
- 采用流水线技术,一般在一个时钟周期内完成。
- 功耗小,成本低
代表:ARM指令构架,MIP指令构架
应用:主要用于移动手机端(如Android,ios,Windowsphone)