计算机组成原理
指令系统
CISC和RISC
计算机主要有两种设计模式:复杂指令集计算机(Complex Instruction Set Computer ,CISC)和精简指令集计算(Reduced Instruction Set Computer,RISC)。
1、CISC:特点是指令系统庞大,指令功能复杂,指令格式多变,寻址方式也很多;绝大多数指令需要多个时钟周期完成;各种指令几乎都可以访问存储器;主要采用微程序控制方式;设置有少量专用寄存器;难以用优化编译技术生产高效的目标代码。
2、RISC:一种执行较少类计算机指令的微处理器起源于MIPS主机(RISC机),RISC计算机采用的微处理器统称RISC处理器。相比于CISC,RISC精简了指令系统,指令格式更统一、指令种类更少,寻址方式更简单,而采用了“超标量和超流水线”结构,处理速率提高很多。
指令的一般格式
1、指令中的基本信息
一条指令的编码应包含以下信息
(1)操作码。指令给出操作类型,如加、减、乘或除等。
(2)操作数或操作数地址。参与运算的数据简称操作数,指令应当给出操作数的有关信息。极少情况下会由指令直接给出操作数,大多数指令一般给出操作数的获取途径,如寄存器号及其寻址方式,并指明CPU如何根据它们去寻址操作数。所以,指令中的基本信息是两大部分:操作码和地址码。
(3)存放运算结果的地址。运算完成后所得到的运算结果应当存放在何处。
(4)后继指令地址。为求解一个问题,往往需要一段程序,最后编译成一段可执行的指令序列。一条指令可能知识若干指令中的一条,当这条指令(称为现行指令)执行完成后,需要明确到何处去读取下一条指令(后继指令)。
所以,大部分指令的基本格式如下:
指令的格式将涉及下述几方面:地址、结构、操作码结构、指令字长。
指令的地址结构
显地址和隐地址
(1)显地址:代码中明显给出的地址,如指令中写明主存器单元地址码或者寄存器号。
(2)隐地址:指令中并不出行该地址。
按地址结构,可分类为:
(1)三地址指令
A1是操作数1所在的地址,A2是操作数2所在的地址,A3是运算结果的存放地址。
(2)二地址指令
在许多情况下,两个操作数运算后一个不需要保留,如,两数相乘时,部分积的累加代替原来的累加和,后者不需要保留。因此可以将运算结果存放在不需要保留的操作数地址,所以将三地址指令进一步简化为二地址指令。
A2称为源地址,A2提供的操作数,在运算后仍保存在原处,称为源操作数。
(3)一地址指令
1、只有目的操作数的单操作数指令。如对操作数加1,减1,求反等。按A1读取操作数进行操作码要求的操作运算结存回原地址A1.
2、隐含约定目的地的双操作数指令。如果操作码含义是加、减、乘、除、与、或等,是双操作数指令,按A1读取源操作数,另一个操作数来自CPU中一个被称为累加器AC的寄存器,指令可以隐含约定另一个操作数(目的操作数)。
(4)零地址指令
操作码的结构
操作码的位数决定了操作类型的多少,位数越多所能表示的操作种类就越多。如,操作码为8为,则指令系统最多可以有256种指令。在有限的指令字长,地址码和操作码的位数相互制约,所以操作码的结构设置上有一些不同的方法。
(1)固定长度的操作码
如果指令较长(位数多),或者采用可变字长指令格式,则往往采用固定长度操作码,及操作码位数一定且位置固定。特点是读取与识别指令都比较方便。
(2)可变长度操作码(扩展操作码)
为了提高指令的读取与执行速度,往往需要限制指令的字长。为了在指令字长有限的前提下,仍能保存比较丰富的指令种类,采用变长度操作码,会增加操作码译码的复杂性和难度。
(3)单功能型或复合型操作码
指令字长
指令设计上有两种截然相反的思路:一种让指令尽可能丰富,指令数量也尽可能多,即复杂指令集(CISC):另一种是只选取简单且使用频率较高的指令,即精简指令集(RISC)。指令字长也可分为两种思路:固定字长和可变字长。
寻址方式
寻址计算指按照某种规则形成操作数的有效地址,我们把产生操作数有效地址的方式称为寻址方式。CPU执行指令时,根据指令约定的寻址方式获取操作数。
操作数存放可能存放在以下5个地方:
(1)操作数包含在该指令中,或紧跟着该指令
(2)操作数就在CPU的某个寄存器中
(3)操作数在主存中
(4)操作数在堆栈区中,可以隐含约定由堆栈指针SP提供地址
(5)操作数在某个I/O接口的寄存器中
寻址方式归为以下四类;
(1)立即寻址。在读取指令时就从指令中获得了操作数。
(2)直接寻址类。直接给出主存地址或寄存器号,读取操作数。
(3)间接寻址类。先从某寄存器中或主存中读取地址,再按地址访问主存以读取操作数。
(4)变址类。指令给出形式地址,经过某种计算才获得有效地址。