计算机组成原理拾遗(指令系统)
不为考试,重读计算机组成原理。
从组成的层次结构来说,机器指令分为三类:微指令,微程序级的指令,它属于硬件;宏指令,由若干条机器指令组成,它属于软件;机器指令,介于微指令和宏指令之间,也可以说是软件与硬件之间,通常习惯把每一条机器语言的语句称为机器指令。而又将全部机器指令的集合称为机器的指令系统。
计算机设计者主要研究如何确定机器的指令系统,如何用硬件电路、芯片、设备来实现机器指令系统的功能。计算机的使用者则是依据机器提供的指令系统,使用汇编怨言来编制各种程序。
指令系统的发展过程:50年代,只有定点加减、逻辑运算、数据传送、转移等十几至几十条指令;60年代,出现了乘除运算、浮点运算、十进制运算、字符串处理等指令,指令数目达到一二百条,寻址方式页趋于多样化,还出现了系列计算机;70年代末期,有了复杂指令系统计算机(CISC)和精简指令系统计算机(RISC),80486之前的处理器都是CISC,奔腾系列的计算机使用了RISC和CISC架构相结合的办法。
PS. 系列计算机指基本指令系统和基本体系结构相同的一系列计算机,一个系列往往有多种型号,各型号的计算机的指令系统是向下兼容的,即,新机种的指令系统包含旧机种的全部指令,旧机种上运行的各种软件可以不加修改便在新机种上运行,大大减少了软件开发的费用。
RISC的主要特点:选取使用频率较高的一些简单指令以及一些很有用但又不复杂的指令,让复杂指令的功能有频率高的简单指令的组合来实现;指令长度固定,指令格式种类少,寻址方式种类少;只有取数/存数(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器内完成;CPU中有多个通用寄存器;采用流水线技术,大部分指令在一个时钟周期内完成,采用超标量和超流水线技术可是每条指令的平均执行时间小于一个时钟周期;控制器采用组合逻辑控制,不用微程序控制;
PS. 微程序控制器同组合逻辑控制器相比较,具有规整性、灵活性、可维护性等一系列优点,因而在计算机设计中逐渐取代了早期采用的组合逻辑控制器,并已被广泛地应用.在计算机系统中,微程序设计技术是利用软件方法来设计硬件的一门技术。微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的“微指令”,存放到一个只读存储器里.当机器运行时,一条又一条地读出这些微指令,从而产生全机所需要的各种操作控制信号,使相应部件执行所规定的操作。采用微程序控制方式的控制器称为微程序控制器。所谓微程序控制方式是指微命令不是由组合逻辑电路产生的,而是由微指令译码产生。一条机器指令往往分成几步执行,将每一步操作所需的若干位命令以代码形式编写在一条微指令中,若干条微指令组成一段微程序,对应一条机器指令。在设计CPU时,根据指令系统的需要,事先编制好各段微程序 ,且将它们存入一个专用存储器(称为控制存储器)中。微程序控制器由指令寄存器IR、程序计数器PC、程序状态字寄存器PSW、时序系统、控制存储器CM、微指令寄存器以及微地址形成电路。微地址寄存器等部件组成。执行指令时,从控制存储器中找到相应的微程序段,逐次取出微指令,送入微指令寄存器,译码后产生所需微命令,控制各步操作完成。
相比之下,CISC的特点就是:指令系统发杂庞大,各种指令使用频率相差很大;指令字长不固定,指令格式多,寻址方式多;可以访存的指令不受限制;CPU中设有专用寄存器;绝大多数指令需要多个时钟周期方可执行完毕;采用微程序控制器;难以用优化编译生成高效的目标代码。
与CISC相比,RISC机的主要优点可归纳如下:充分利用VLSI芯片的面积,CISC机的控制其大多采用微程序控制,其控制存储器在CPU芯片内所占的面积为50%以上,而RISC机控制器采用组合逻辑控制,其硬布线逻辑只占CPU芯片面积的10%左右;提高计算机运算速度,1)RISC机的指令数、寻址方式和指令格式较少,而且指令字长固定,因而指令译码快,2)通用寄存器多,减少访存次数,3)采用寄存其窗口重叠技术,程序嵌套时不必将寄存器内容保存到存储器中,4)采用组合逻辑控制,比微程序控制的延迟小,缩短了CPU的周期,5)采用精简指令系统,适合于流水线工作;便与设计,可降低成本,提高可靠性;有效支持高级语言程序,RISC机靠优化编译来更有效地支持高级语言程序。
不过,从指令系统兼容性看,CISC大多能实现软件兼容,即高档机包含了低档机的全部指令,并可加以扩充;但RISC机简化了指令系统,指令数量少,格式也不同于老机器,因此大多数RISC机不能与老机器兼容。现在CISC与RISC趋于融合,争端越来越小。
指令的一般格式,指令是由操作码和地址码两部分组成。操作码是用来指明该指令所要完成的操作,如加法、减法、传送、移位、转移等。操作码的长度可以是固定的也可以是变化的。前者将操作码集中放在指令字的一个字段内,这种格式便于硬件设计,指令译码时间短,广泛用于字长较长的大中型计算机和超级小型计算机以及RISC机中;后者其操作码分散在指令字的不同字段中,这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。操作码长度不固定会增加指令译码和分析的难度,是控制器的设计复杂。地址码用来指出该指令的原操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的“地址”看可以是主存的地址,也可以是寄存器的地址,甚至可以是IO设备的地址。对于寄存器组,操作数地址是寄存器号;对于主存,操作数地址是存储单元地址;对于栈,操作数地址是栈指针。
机器中常见的操作类型有地址、数字、字符、逻辑数据等。不同的机器,操作类型也是不同的,但几乎所有的机器都有以下几类通用的操作,数据传送、算术逻辑操作、移位、转移等,转移指令按其转移特征又可分为无条件转移、条件转移、跳转、过程调用与返回、陷阱等几种。
寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法。它与硬件结构紧密相关,而且直接影响指令格式和指令功能。寻址方式分为指令寻址和数据寻址两大类。
指令寻址比较简单,它分为顺序寻址和跳跃寻址两种。顺序寻址可通过程序计数器加1,自动形成下一条指令的地址;跳跃寻址则通过转移类指令实现。
数据寻址方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。
立即寻址的特点是操作数本身设在指令字内,即形式地址A不是操作数的地址,而是操作数本身,又称之为立即数。它的优点在于只要取出指令,便可立即获得操作数,这种指令在执行阶段不必再访问存储器。不过,形式地址A的位数限制了这类指令所能表述的立即数的范围。
直接寻址的特点是,指令字中的形式地址A就是操作数的真实地址EA。它的优点是寻找操作数比较简单,也不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次。它的缺点在于A的位数限制了操作数的寻址范围,而且必须修改A的值,才能修改操作数的地址。
隐含寻址是指指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。由于隐含寻址在指令字中少了一个地址,因此,这种寻址方式的指令有利于缩短指令字长。
间接寻址,倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是说,有效地址是有形式地址间接提供的,即为间接寻址。这种寻址方式与直接寻址相比,它扩大了操作数的寻址范围,因为A的位数通常小于指令字长,而存储字长可与指令字长相等。当多次间接寻址时,可用存储字的首位来标志间接寻址是否结束。间接寻址的第二个优点在于它便于编制程序,例如,用间接寻址可以很方便地完成子程序返回。间接寻址的缺点在于指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),只是指令执行时间延长。
寄存器寻址,在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,故寄存器寻址在指令执行阶段无须访存,减少了执行时间。由于地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间,因此寄存器寻址在计算机中得到广泛应用。
寄存器间接寻址,寄存器中的内容不是操作数,而是操作数所在主存单元的地址号,与寄存器寻址相比,指令的执行阶段还需访问内存,而比间接寻址少访存一次。
基址寻址需设有基址寄存器,其操作数的有效地址等于指令字中的形式地址与基址寄存器中的内容(成为基地址)相加。基址寄存器可采用隐式的和显式的两种。所谓隐式,是在计算机内专门设有一个基址寄存器,使用时用户不必明显指出该基址寄存器,只需由指令的寻址特征位反映出基址寻址即可。显式是在一组通用寄存器里,由用户明确指出那个寄存器用作基址寄存器,存放基地址。
基址寻址可以扩大操作数的寻址范围,因基址寄存器的位数可以大于形式地址的位数。当主存容量较大时,若采用直接寻址,因受形式地址的位数限制,无法对主存所有单元进行访问,但采用基址寻址便可实现对主存空间的更大范围寻访。例如,将主存空间分为若干段,每段首地址存于基址寄存器中,段内的位移量由指令字中形式地址指出,这样操作数的有效地址就等于基址寄存器内容与段内位移量之和,只要对基址寄存器的内容作修改,便可访问主存的任一单元。
变址寻址与基址寻址极为相似,其有效地址等于指令字中的形式地址与变址寄存器的内容相加之和。由于两者的应用场合不同,因此从本质来认识,它们还是有较大的区别。基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常有操作系统或管理程序确定,在程序的执行过程中其值是不可变的,而指令中的形式地址是可变的。在变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的形式地址是不可变的。变址寻址主要用于处理数组问题。
PS. 基址寻址与变址寻址的比较:基址寄存器的内容由操作系统赋值,内存在程序运行过程中不变,而形式地址可变;变址寄存器的内容由程序员赋值,内容在程序运行中可变,而形式地址不变;基址寻址的目的是扩大寻址空间,逻辑空间与物理空间转换,对程序员透明;变址寻址的目的是实现程序块的规律性变化,如数组指针、查表程序等,有程序员控制;基址寻址的偏移量位数较短,变址寻址偏移量位数足以表示整个存储空间。
相对寻址的有效地址是将程序计数器PC的内容(即当前指令的地址)与指令字中的形式地址相加而成。相对寻址常被用于转移类指令,转移后的目标地址与当前指令由一段距离,称为相对位移量,它由指令字的形式地址给出。相对寻址的最大特点是转移地址不固定,它随PC值的变化而变化。
堆栈寻址要求计算机中设有堆栈。堆栈即可用寄存器组(称为硬堆栈)来实现,也可利用主存的一部分空间做堆栈(称为软堆栈)对于软堆栈,可用堆栈指针SP(Stack Point)指出栈顶地址,也可用CPU中一个或两个寄存器作为SP。操作数只能从栈顶地址指示的存储单元存或取。可见堆栈寻址可视为一种隐含寻址,其操作数的地址总被隐含在SP中。堆栈寻址就其本质也可使位寄存器间接寻址,因SP可视为寄存器,它存放着操作数的有效地址。