计算机组成与体系结构第四章指令系统2020/6/81安徽师范大学计算机科学与技术系陈付龙4.1机器指令特征4.2寻址技术4.3指令系统的设计4.4两种指令系统4.5Pentium4和PowerPC620的指令系统本章习题目录24.1机器指令3地址码操作码OPC指令系统指令一般由操作码和地址码两部分构成,其中操作码在前,地址码在后,地址码的个数可变。每种计算机系统均有一组指令提供给用户使用4.1机器指令4指令系统是指CPU支持的全部指令构成的指令集,它决定了计算机的基本功能。指令是采用二进制进行编码的,指令字由操作码字段和操作数地址字段两个字段组成。操作码是指明指令操作性质的命令码,它提供指令的操作控制信息,不可缺少。操作数地址码用来描述该指令的操作对象及其所在位置。4.1机器指令5操作种类操作数的数据类型运算操作输入输出数据传送移位转移字节型字型双字型操作码指令应该进行怎样操作4.1机器指令61地址码用以寻找操作数,其个数由指令中操作数的个数决定。2个数可以是1个,2个,3个或者多个,也可以没有地址码3分类分为零地址指令、一地址指令、二地址指令和三地址指令等。区别不同指令系统结构的主要因素CPU中用来存储操作数的存储单元的类型CPU中用来存储操作数的存储单元堆栈累加器通用寄存器组按存储单元类型分类7指令系统的结构堆栈结构累加器结构通用寄存器结构根据操作数的来源不同,又可进一步分为:寄存器-存储器结构(RM结构)(操作数可以来自存储器)寄存器-寄存器结构(RR结构)(所有操作数都是来自通用寄存器组)也称为load-store结构,这个名称强调:只有load指令和store指令能够访问存储器。8显式或隐式对于不同类型的结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。显式给出:用指令字中的操作数字段给出隐式给出:使用事先约定好的单元9例:表达式Z=X+Y在4种类型指令系统结构上的代码。假设:X、Y、Z均保存在存储器单元中,并且不能破坏X和Y的值。堆栈累加器寄存器(RM型)寄存器(RR型)pushXloadXloadR1,XloadR1,XpushYaddYaddR1,YloadR2,YaddstoreZstoreR1,ZaddR3,R1,R2popZstoreR3,Z10通用寄存器型结构现代指令系统结构的主流在灵活性和提高性能方面有明显的优势跟其它的CPU内部存储单元一样,寄存器的访问速度比存储器快。对编译器而言,能更加容易、有效地分配和使用寄存器。寄存器可以用来存放变量。(1)减少对存储器的访问,加快程序的执行速度;(因为寄存器比存储器快)(2)用更少的地址位(相对于存储器地址来说)来对寄存器进行寻址,从而有效地减少程序的目标代码的大小。11操作数个数根据ALU指令的操作数的两个特征对通用寄存器型结构进一步细分ALU指令的操作数个数3个操作数的指令两个源操作数、一个目的操作数2个操作数的指令其中一个操作数既作为源操作数,又作为目的操作数。ALU指令中存储器操作数的个数可以是0~3中的某一个,为0表示没有存储器操作数。12ALU指令中存储器操作数的个数ALU指令中操作数的最多个数结构类型机器实例03RRMIPS,SPARC,Alpha,PowerPC,ARM12RMIBM360/370,Intel80x86,Motorola680003RMIBM360/37022MMVAX33MMVAXALU指令中操作数个数和存储器操作数个数的典型组合13通用寄存器型结构通用寄存器型结构进一步细分为3种类型寄存器-寄存器型(RR型)寄存器-存储器型(RM型)存储器-存储器型(MM型)14指令系统结构类型优点缺点寄存器-寄存器型(0,3)指令字长固定,指令结构简洁,是一种简单的代码生成模型,各种指令的执行时钟周期数相近。与指令中含存储器操作数的指令系统结构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大。寄存器-存储器型(1,2)可以在ALU指令中直接对存储器操作数进行引用,而不必先用load指令进行加载。容易对指令进行编码,目标代码比较紧凑。指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行时钟周期数因操作数的来源(寄存器或存储器)不同而差别比较大。存储器-存储器型(2,2)或(3,3)目标代码最紧凑,不需要设置寄存器来保存变量。指令字长变化很大,特别是3操作数指令。而且每条指令完成的工作也差别很大。对存储器的频繁访问会使存储器成为瓶颈。这种类型的指令系统结构现在已不用了。3种通用寄存器型结构的优缺点,表中(m,n)表示指令的n个操作数中有m个存储器操作数。154.2.1立即数寻址方式4.2.2寄存器寻址方式4.2.3直接寻址方式4.2.4间接寻址方式4.2.5基址寻址方式4.2.6变址寻址方式4.2.7相对寻址方式4.2.8堆栈寻址方式4.2寻址技术164.2寻址技术17寻址方式根据指令中给出的地址段内容寻找真实的操作数以及下一条要执行的指令地址的方式。4.2寻址技术1形式地址指令地址段给出的地址并不能直接用来访问主存储器2有效地址形式地址需要经过一定的计算才能得到有效地址3物理地址直接访问主存储器的地址。4.2.1立即数寻址方式19操作数直接在指令中给出,这种寻址方式就称为立即数寻址方式。操作数作为指令的一部分存放在代码段里,当从主存取指令到CPU时,操作数连同一起被取出;当CPU执行该条指令时,就可以立刻得到操作数而无须再次访问主存储器。取指令时,操作码和操作数同时被取出,不必再次访问主存储器,提高了指令的执行速度;立即数寻址立即数特点4.2.1立即数寻址方式20例4.1MOVAX,2013MOV操作码AX2013寄存器名立即数立即数只能作为源操作数,而不能作为目的操作数,因为它不能被修改。源操作数长度应与目的操作数长度保持一致。寄存器寻址方式寄存器指令长度优点指令在执行过程中所需要的操作数来源于寄存器,运算结果也写回到寄存器。AX、BX、CX、DX、SI、DI、SP、BP等通用寄存器。地址码短,表示寄存器号的地址码部分可以短于用来表示存储单元的地址码部分。缩短指令长度、节省存储空间、提高指令的执行速度。4.2.2寄存器寻址方式4.2.2寄存器寻址方式22例4.2MOVBX,AX指令执行后,(AX)=(BX),(AX)保持不变。MOV操作码BXAX寄存器名寄存器名无需访问主存需访问主存•立即数寻址•寄存器寻址4.2.2寄存器寻址方式操作数均存放在主存中,需要通过不同方式计算出操作数的有效地址直接寻址方式是指直接在指令中给出操作数的地址,即形式地址等于有效地址。缺点:受地址码位数限制,直接寻址空间较小。优点:直接寻址方式的有效地址不需要任何计算,因此寻址速度较快;4.2.3直接寻址方式4.2.3直接寻址方式25例4.3MOVAX,[2013]图4.3直接寻址方式操作码[2013]寄存器名有效地址MOVAXx主存4.2.4间接寻址方式根据指令地址码是寄存器地址还是存储器地址,间接寻址又可分为寄存器间接寻址和存储器间接寻址两种方式。根据指令的地址码访问存储单元或寄存器,取出的内容是操作数的有效地址或指令的有效地址,这种方式称为间接寻址或间址。4.2.4间接寻址方式27例4.4MOVAX,[BX]例4.5MOVAX,**PBX寄存器的内容为操作数的真正有效地址。图4.4间接寻址过程寄存器内容(a)寄存器间址(b)存储器间址MOV操作码[BX]寄存器名AXx主存AB主存MOV操作码**P寄存器名AXBx4.2.5基址寻址方式28专用的基址寄存器指定一个通用寄存器基址寄存器操作数的地址由基址寄存器的内容和指令的地址码A相加得到,地址码A通常被称为位移量(disp),也可用其他方法获得位移量。基址寻址主要用于解决程序在存储器中的定位(逻辑地址→物理地址)和扩大寻址空间(基址+位移量)等问题。4.2.5基址寻址方式29例4.6MOVAX,2013[BX]图4.5基址寻址过程基址寄存器基址寄存器内容(b)通用寄存器作为基址寄存器(a)专用基址寄存器x主存+MOVAXBX通用寄存器BX的内容x主存+操作码寄存器名操作码寄存器名20132013MOVAX4.2.6变址寻址方式30把指令地址码部分给出的地址A与指定的变址寄存器X的内容之和作为操作数的地址来获得所需要的操作数称为变址寻址。基址寻址方式和变址寻址方式可以组合使用。4.2.6变址寻址方式31例4.7MOVAX,array[SI]图4.6变址寻址过程操作数………数组+i+m…+1…MOVAXSI变址寄存器SI的内容+arrayarray主存操作码寄存器名4.2.7相对寻址方式把程序计数器PC的内容(当前执行指令的地址)与指令的地址码部分给出的位移量(disp)之和作为操作数的地址或转移地址主要用于转移指令,执行本条指令后,将转移到(PC)+disp,(PC)为程序计数器的内容。转移地址不是固定的,它随着PC值的变化而变化,并且总是与PC相差一个固定值disp;位移量可正、可负,通常用补码表示;相对寻址使用场合特点4.2.7相对寻址方式33例4.8JMPSHORTPTRL1表示将PC计数器的内容加上L1这个偏移量,作为下一条指令的地址。图4.7相对寻址方式PCJMP操作码ptr13寻址特征位移量JMPptr13X指令2000内存2013+……4.2.8堆栈寻址方式34堆栈操作使用一组特殊的数据传送指令,即压入指令(PUSH)和弹出指令(POP)。若采用“向上生成”的堆栈,则两种指令的格式如下。(1)压入指令PUSH格式:PUSHOPR操作:(SP)-2→SP;OPR→(SP)(2)弹出指令POP格式:POPOPR操作:((SP))→OPR;(SP)+2→SP。354.3指令的格式设计指令格式设计主要有两个目标:(1)节省程序的存储空间;(2)指令格式要尽量规整,以减少硬件译码的复杂度。4.3.1编码设计4.3.2功能设计364.3.1编码设计固定长编码.扩展编码编码方式Huffman编码374.3.1编码设计1.固定长编码固定长编码,即,每条操作码均等长。主要缺点:(1)浪费许多信息量,即操作码的总长度增加了;(2)没有考虑各种指令使用的频率问题。码的长度完全由指令条数决定。384.3.1编码设计2.Huffman编码Huffman编码:1952年由Huffman首先提出,开始主要用于电报报文的编码。根据Huffman编码法的原理,操作码的平均长度可通过下式计算:其中:pi表示第i种操作码在程序中出现的概率,一共有n种操作码。iiilpH*394.3.1编码设计例4.8:假设一个处理机有9条指令I1-I9,经统计,各指令在程序中的使用频度分别是:p1=0.30,p2=0.24,p3=0.19,p4=0.07,p5=0.07,p6=0.06,p7=0.03,p8=0.02,p9=0.02404.3.1编码设计由Huffman算法,构造Huffman树,根据所得二叉树对操作码进行编码IipiHuffman编码liI10.30012I20.24002I30.19112I40.0710004I50.0710114I60.0610104I70.03100115I80.021001006I90.021001016414.3.1编码设计采用Huffman编码法得到的操作码的平均长度为:H=0.30×2+0.24×2+0.19×2+0.07×4+0.07×4+0.06×4+0.03×5+0.02×6+0.02×6=2.65(位)采用Huffman算法形成的操作码编码不是唯一的,Huffman树的左右子树可以任意交换,因此所得编码也会发生改变。但无论如何构造Huffman树,对应相同概率分布的Huffman编码的平均码长是唯一的。扩展编码法Huffman编码优点平均长度最短,