您好,欢迎访问三七文档
1指令格式从便于程序设计、增加操作并行性、提高指令功能看,指令中应包含多种信息。但指令太长会占用更多的存储空间,增加访存次数。一条指令应包含下列信息:操作码:表明操作的性质和功能。每条指令都有相应的操作码。操作数地址。操作结果的存放地址。下一条指令的地址。为了压缩指令长度,可以用一个程序计数器(ProgramCounter,PC)存放指令地址。每执行一条指令,PC自动增加,指向下一条指令。由于使用了PC,指令中可以不包含下一条指令的地址。一条指令实际上包含两种信息:操作码(OperationCode,OP)和地址码。其基本格式为:地址码字段A操作码字段OP2指令字长指令中包含二进制代码的位数,称为指令字长。与机器字的长度有关:单字长,双字长,半字长,优点、缺点。以IBM370为例,其字长为32位。指令格式有16位(半字)的,有32位(单字)的,也有48位(一个半字)的。等长指令:各种指令字长度相等,称为等长指令字结构,结构简单,控制线路简单,RISC。变长指令:如果指令字长度随指令的功能而异,称为变长指令字结构。结构灵活,充分利用指令长度,控制复杂,CISC。3地址码根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式。此外,还有二地址格式、一地址格式和零地址格式。操作码A1A2A3三地址指令:操作码A1A2二地址指令:操作码A1一地址指令:操作码零地址指令:4(1)零地址指令的指令字中只有操作码,而没有地址码。如停机、空操作指令。其格式为:OP(2)一地址指令常称为单操作数指令。通常这种指令以运算器中累加寄存器AC中的数据为被操作数,指令字的地址码字段所指明的数为操作数,操作结果又放回累加寄存器AC中。其格式为:功能描述:(AC)OP(A1)→A1(PC)+1→PCOP表示操作性质;(AC)表示累加寄存器AC中的数;(A1)表示主存中地址为A1的存储单元中的数或运算器中地址为A1的通用寄存器中的数;→表示把操作(运算)结果传送到指定的地方。单操作数运算指令,如“+1”、“-1”、“求反”,指令中给出一个源操作数的地址OPA15(3)二地址指令常称为双操作数指令,它的两个地址码字段分别指明参与操作的两个数在主存中或运算器中通用寄存器的地址,A1作存放操作结果的地址。A1中原来的内容被覆盖。其格式为:功能描述:(A1)OP(A2)→A1(PC)+1→PC二地址指令在计算机中得到了广泛的应用,但是在使用时有一点必须注意:指令执行之后,A1中原存的内容已经被新的运算结果替换了。OPA1A26(4)三地址指令字中有三个操作数地址。A1为被操作数地址,也称源操作数地址;A2为操作数地址,也称目的操作数地址;A3为存放结果的地址。A1、A2、A3可以是主存中的单元地址,也可以是运算器中通用寄存器的地址。其格式为:功能描述:(A1)OP(A2)→A3(PC)+1→PC这种格式指令长度比较长,所以只在字长较长的大、中型机中使用,而小型、微型机中很少使用。OPA1A2A37二地址指令格式中,从操作数的物理位置来说,又可归结为三种类型。存储器-存储器(SS)型指令:操作时都是涉及主存单元,参与操作的数都放在主存里,从主存某单元中取操作数,操作结果存放至主存另一单元中。寄存器-寄存器(RR)型指令:需要多个通用寄存器或个别专用寄存器,从寄存器中取操作数,把操作结果放到另一寄存器。机器执行寄存器-寄存器型指令的速度很快,因为执行这类指令,不需要访问主存。寄存器-存储器(RS)型指令:执行此类指令时,既要访问主存单元,又要访问寄存器。指令字助记符由于硬件只能识别1和0,所以采用二进制操作码是必要的,但是我们用二进制来书写程序却非常麻烦。为了便于书写和阅读程序,采用一种缩写码叫做指令助记符用3~4个英文字母来表示操作码,一般为英文缩写不同的计算机系统,规定不一样必须用汇编程序翻译成二进制代码89操作码指令系统中每条指令有唯一确定的操作码,表明指令的性质和功能。操作码可以采用固定长度,也可以采用可变长度。固定长度操作码对于简化硬件设计、减少指令译码时间有利,在字长较大的大、中型机中广泛采用。可变长度操作码可以有效压缩操作码的平均长度,在字长较短的小型机和微型机中采用。定长编码:操作码的长度决定了指令系统中指令的数目。若操作码长度为k位,最多只能有2k条指令。以IBM370为例,其字长为32位。指令格式有16位(半字)的,有32位(单字)的,也有48位(一个半字)的。半字长指令不包含主存地址,单字长指令包含一个主存地址,一个半字长指令包含两个主存地址。IBM370机中,不论指令长度为多少,操作码字段都为8位。8位操作码允许指定256条指令,而IBM370只有183条指令,存在极大的信息冗余。10OPR1R2RR型:OPR1X2B2D2RX型:RS型:OPI2B1D1SI型:IBM370的五种指令格式:OPL1B1D1B2D2SS型:OPR1R2B2D28448444128444128841288412412OP:操作码;R:寄存器;X:基址寄存器;L:指定操作数的长度;D:位移量;I:直接操作数;B:变址寄存器。RR型:寄存器-寄存器型;RX型和RS型:寄存器-存储器型;SI型:直接带操作数;SS型:存储器-存储器型。11变长编码:在指令字长有限的情况下,变成编码可增加指令种类。当指令中地址部分位数较多时,让操作码的位数少些;地址部分位数较少时,让操作码的位数增多。PDP-11的字长为16位。指令分为单字长、二字长、三字长三种。操作码占4~16位不等。下面是PDP-11的部分指令格式:OPSDOPX2单字长(16位)OPSD地址OPSD地址1地址2OP46610616466164661616二字长(32位)三字长(48位)12操作码长度不固定会增加指令译码的难度,使控制器设计复杂化。通常用指令中固定长度的字段表示基本操作码,对于不需要某个地址字段的指令,将操作码扩展到该地址字段。设某机器指令字长16位,包括4位基本操作码和三个4位地址字段:OPA1A2A330741181512可按以下方式设置操作码:(1)15条三地址指令由基本操作码从0000~1110给出,剩下的1111用于将操作码扩展到A1字段;(2)15条二地址指令由8位操作码从11110000~11111110给出,剩下的11111111用于将操作码扩展到A2字段;(3)15条一地址指令由12位操作码从111111110000~111111111110给出,剩下的111111111111用于将操作码扩展到A3字段;(4)16条零地址指令由16位操作码从1111111111110000~1111111111111111给出。13例:指令字长12位,基本操作码3位,每个地址码3位,设计4条三地址指令、255条一地址指令和8条零地址指令。000×××××××××…………011×××××××××100000000×××…………111111110×××111111111000…………1111111111114条三地址指令255条一地址指令8条零地址指令3-8译码器Y4Y5Y6Y78-256译码器Y2553-8译码器……××××××××××××指令寄存器译码开始信号4条三地址指令255条一地址指令8条零地址指令OPA1A2A32053861191A.8B.4C.12D.162A.64B.63C.255D.25414OPA1A2065111512例如果零地址指令没有占用的话150000××××××××××××…………1011××××××××××××1100000000××××××…………1111111110××××××1111111111000000…………111111111111111112条双地址指令255条一地址指令64条零地址指令这一条一地址指令被用来编码2(最多可以64)条零地址指令这一条一地址指令被用来编码2(最多可以64)条零地址指令16操作码的优化为缩短操作码的平均长度,应该给使用频度高的指令分配短的操作码,使用频度低的指令分配长的操作码。Huffman编码就是按照这一原则进行编码的。假如某计算机有7条指令,使用频度用Pi表示,Huffman编码如下:指令Ii使用频度PiHuffman编码操作码长度LiI10.4001I20.26102I30.151103I40.06111005I50.05111015I60.04111105I70.04111115操作码的平均编码长度为:L=0.40×1+0.26×2+0.15×3+0.19×5=2.32位171.000.340.600.080.190.040.040.110.050.060.150.260.40111111000000(11111)I7(11110)I6(11101)I5(11100)I4(110)I3(10)I2(0)I1Huffman编码将7条指令按使用频度从小到大的顺序排序,每次将使用频度最小的两个结点合并为一个新的结点并重新排序,如此反复。最后将每个结点的两个分支分别用“1”和“0”标注。操作数类型地址数据:正整数数值数据:定点数、浮点数、BCD码字符数据:ASCII码逻辑数据:若干二进制位,分别看待1819指令寻址方式指令地址指令内容0LDA2001ADD2012INC4LDA2006INC7LDA2003JMP65SUB207程序计数器+1主存顺序寻址方式:指令地址在主存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令的顺序执行。为此,必须使用程序计数器PC来计数指令的顺序号,该顺序号就是指令在主存中的地址。指令地址指令内容4LDA200INC7LDA2003JMP5SUB207程序计数器66主存跳跃寻址方式:下条指令的地址码不是由程序计数器给出,而是由本条指令给出。程序跳跃后,按新的指令地址开始顺序执行。程序计数器的内容也必须相应改变。采用指令跳跃寻址方式,可以实现程序转移或构成循环程序。20操作数寻址方式操作数在主存中的存放并无一定规律,给操作数寻址带来困难。此外,受指令长度的限制,指令中的地址码不会很长,而主存容量却越来越大,因此仅能直接访问主存的一小部分,无法直接访问整个主存。把指令中地址码字段给出的地址称为形式地址,这个地址可能不能直接访问主存。能够直接访问主存的地址称为有效地址。寻址就是把操作数的形式地址变换为有效地址。OPXD上图是一种单地址指令。OP为操作码,X为寻址特征码,D为形式地址也称偏移量,有效地址E由X和D的组合给出。隐含寻址:在指令中不明显地给出而是隐含着操作数的地址。例如,单地址的指令格式,没有在地址字段中指明第二操作数地址,而是规定累加寄存器AC作为第二操作数地址,AC对单地址指令格式来说是隐含地址。21OP(移位)FD立即寻址:指令中地址字段给出的不是操作数的地址,而是操作数本身。上图为单地址移位指令。D不表示地址,而是一个操作数。F为标志位,F=1操作数右移,F=0操作数左移。取指时同时取出操作码和操作数,不需要访问存储器,提高了指令执行的速度。但操作数是指令的一部分,不能修改,而且立即数的大小受指令长度的限制,灵活性差。直接寻址:指令中地址字段直接给出操作数在主存中的地址。操作数S……OPXD指令主存指令中的形式地址D就是有效地址E,即E=D。如果操作数用S表示,则S=(E)=(D)随着主存容量不断扩大,所需要的地址码越来越长,而指令中地址码字段长度有限,限制了访问主存的范围。22间接寻址:形式地址不是操作数的有效地址,而是操作数地址的地址。E=(D)S=(E)=((D))操作数S…OPXD指令主存有效地址E……间接寻址扩大了寻址范围,可用指令中的短地址访问大的主存空间。此外,操作数的地址改变后,不需要修改指令,只要修改存放有效地址E的主存单元。间接寻址需要两次访存,降低了取操作数的速度。操作数SOPXD指令寄存器R寄存器寻址:指令中的地址码部分给出
本文标题:组成原理期末复习3
链接地址:https://www.777doc.com/doc-2057973 .html