您好,欢迎访问三七文档
1/292.6DLX指令集结构DLX是一种多元未饱和型指令集结构。DLX指令集结构的设计思想:具有一个简单的Load/Store指令集;注重指令流水效率;简化指令的译码;高效支持编译器。2/292.6.1DLX指令集结构1.DLX中的寄存器(1)32个通用寄存器命名:R0、R1、、R31长度:32位寄存器R0的值总是为0。(2)32个浮点寄存器命名:F0、F1、、F31长度:32位(用来保存32位的单精度浮点数)3/29◆64位双精度浮点数相邻两个浮点寄存器奇偶对FiFi+1(i=0,2,4,,30)命名:F0、F2、、F28、F30(3)一些特殊的寄存器(比如用来保存浮点操作结果信息的浮点状态寄存器)可以和通用寄存器相互进行数据传送。4/292.DLX的数据类型DLX提供了多种长度的整型数据和浮点数据。(1)整型数据有8位、16位和32位多种长度。(当8位和16位整型数据载入到寄存器中时,用0或数据的符号位来填充32位通用寄存器中的剩余位。)(2)浮点数据有32位单精度浮点数和64位双精度浮点数。浮点数据表示采用的是IEEE754标准。5/293.DLX的寻址方式和数据传送(1)寻址方式寄存器寻址立即值寻址偏移寻址寄存器间接寻址(2)寄存器寻址字段的大小为5位,用来表示32个通用寄存器或浮点寄存器。(3)存储器地址采用的是高端字节表示顺序,存储器按字节寻址,其地址宽度为32位。6/294.DLX的指令格式◆寻址方式编码在操作码中。◆指令的字长32位,其中用6位表示操作码。(4)通过寄存器(通用寄存器和浮点寄存器)和存储器之间的数据传送操作完成对存储器的访问。7/29各种类型指令的格式I类型指令65516操作码rs1rd立即值字节、半字、字的载入和储存;rdrs1op立即值。R类型指令655511操作码rs1rs2rdFunc寄存器-寄存器ALU操作:rdrs1funcrs2;函数对数据的操作进行编码:加、减、;对特殊寄存器的读/写和移动。J类型指令626操作码与PC相加的偏移量跳转,跳转并链接,从异常(exception)处自陷和返回。图2.13DLX的指令格式布局8/295.DLX中的操作(1)四种类型的操作Load和Store操作ALU操作分支和跳转操作浮点操作(2)约定(1)符号“”:数据传送操作其后附带一个下标n,也即“n”表示传送一个n位数据。(2)符号“##”:两个域的串联操作9/29(3)域的下标:表明从该域中选择某一位。域中位的标记是从最高位开始标记,并且起始标记为0。下标可以是一个单独的数字。如Regs[R4]0:选择寄存器R4中内容的符号位。下标也可以是一个范围。如Regs[R3]24..31:选择寄存器R3中内容的最低一个字节。(4)上标:表示复制一个域。如024可以得到一个24位全为0的一个域。10/29(5)变量Mem:表示存储器中的一个数组,存储器按照字节寻址。举例R8和R10:32位寄存器Regs[R10]16..3116(Mem[Regs[R8]]0)8##Mem[Regs[R8]]的含义。3.DLX中的四种操作类型(1)Load和Store操作11/29指令实例指令名称含义LWR1,30(R2)载入整型字Regs[R1]←32Mem[30+Regs[R2]]LWR1,1000(R0)载入整型字Regs[R1]←32Mem[1000+0]LBR1,40(R3)载入字节Regs[R1]←32(Mem[40+Regs[R3]]0)24##Mem[40+Regs[R3]]LBUR1,40(R3)载入无符号字节Regs[R1]←32024##Mem[40+Regs[R3]]LHR1,40(R3)载入整型半字Regs[R1]←32(Mem[40+Regs[R3]]0)16##Mem[40+Regs[R3]]##Mem[41+Regs[R3]]LFF0,50(R3)载入单精度浮点Regs[F0]←32Mem[50+Regs[R3]]LDF0,50(R2)载入双精度浮点Regs[F0]##Regs[F1]←64Mem[50+Regs[R2]]SW500(R4),R3储存整型字Mem[500+Regs[R4]]←32Regs[R3]SF40(R3),F0储存单精度浮点Mem[40+Regs[R3]]←32Regs[F0]SD40(R3),F0储存双精度浮点Mem[40+Regs[R3]]←32Regs[F0]Mem[44+Regs[R3]]←32Regs[F1]SH502(R2),R31储存整型半字Mem[502+Regs[R2]]←16Regs[R31]16..31SB41(R3),R2储存整型字节Mem[41+Regs[R3]]←8Regs[R2]24..31DLX中Load和Store指令实例12/29(2)ALU操作简单的算术和逻辑运算寄存器比较指令(,,,,,)指令实例指令名称含义AddR1,R2,R3加Regs[R1]←Regs[R2]+Regs[R3]ADDIR1,R2,#3和立即值相加Regs[R1]←Regs[R2]+3LHIR1,#42载入高位立即值Regs[R1]←42##016SLLIR1,R2,#5逻辑左移的立即值形式Regs[R1]←Regs[R2]5SLTR1,R2,R3设置小于if(Regs[R2]Regs[R3])Regs[R1]←1elseRegs[R1]←0ALU指令实例13/29(3)分支和跳转操作◆根据描述目标地址的方法和是否链接可以将跳转操作指令分为四种类型。其中:两种类型的跳转指令用带符号位的26位偏移量加上程序计数器的值来确定跳转的目标地址;另外两种类型的跳转指令则指定一个寄存器,由寄存器中的内容决定跳转的目标地址。14/29◆跳转有两种类型简单跳转跳转并链接(用于过程调用)返回一个地址,也即将下一条顺序指令地址(返回地址)保存在寄存器R31中。◆所有分支指令均是条件分支指令。分支目标地址由一个带符号的26位偏移量加上程序计数器的值来确定。15/29指令实例指令名称含义Jname跳转PC←name;((PC+4)-225)≤name≤((PC+4)+225)JALname跳转并链接Regs[R31]←PC+4;PC←name;((PC+4)-225)≤name≤((PC+4)+225)JALRR2寄存器型跳转并链接Regs[R31]←PC+4;PC←Regs[R2];JRR3寄存器型跳转PC←Regs[R3];BEQZR4,name“等于0”分支if(Regs[R4]==0)PC←name;((PC+4)-215)≤name≤((PC+4)+215)BNEZR4,name“不等于0”分支if(Regs[R4]!=0)PC←name;((PC+4)-215)≤name≤((PC+4)+215)典型的分支和跳转指令16/29(4)浮点操作浮点操作:加、减、乘、除。(后缀D:双精度浮点操作后缀F:单精度浮点操作)◆下表列出了DLX所有指令及其含义。◆各种指令使用频率测试统计结果。(SPECint92和SPECfp92基准程序)17/29DLX中的所有指令及其含义指令类型操作码含义数据传送LB,LBU,SB载入字节,载入无符号字节,储存字节LH,LHU,SH载入半字,载入无符号半字,储存半字LW,SW载入字,储存字LF,LD,SF,SD载入单精度浮点,载入双精度浮点,储存单精度浮点,储存双精度浮点MOVI2S,MOVS2I将通用寄存器中的内容移入特殊寄存器,将特殊寄存器中的内容移入通用寄存器MOVF,MOVD将一个单精度/双精度浮点寄存器的内容拷贝到另一个单精度/双精度浮点寄存器MOVFP2I,MOVI2FP将32位浮点寄存器中的内容移入整型寄存器,将32位整型寄存器中的内容移入浮点寄存器18/29指令类型操作码含义算术/逻辑ADD,ADDI,ADDU,ADDUI带符号加,带符号立即值加,无符号加,无符号立即值加SUB,SUBI,SUBU,SUBUI带符号减,带符号立即值减,无符号减,无符号立即值减MULT,MULTU,DIV,DIVU带符号乘,无符号乘,带符号除,无符号除AND,ANDI与,和立即值与OR,ORI,XOR,XORI或,和立即值或,异或,和立即值异或LHI载入高位立即值SLL,SRL,SRA,SLLI,SRLI,SRAI包含了立即值(S_I)和变量(S_)的移位操作,移位有:逻辑左移,逻辑右移和算术右移S_,S_I设置条件,“_”可以是LT,GT,LE,GE,EQ,NE19/29指令类型操作码含义控制BEQZ,BNEZ根据指定通用寄存器的内容等于/不等于0分支BFPT,BFPF测试浮点状态寄存器中的比较位为真/假进行分支J,JR跳转,基于寄存器的跳转JAL,JALR跳转并链接,基于寄存器的跳转并链接TRAP转换到操作系统RFE从异常恢复用户模式20/29指令类型操作码含义浮点ADDD,ADDF双精度浮点加,单精度浮点加SUBD,SUBF双精度浮点减,单精度浮点减MULTD,MULTF双精度浮点乘,单精度浮点乘DIVD,DIVF双精度浮点除,单精度浮点除CVTF2D,CVTF2I,CVTD2F,CTD2I,CVTI2F,CVTI2D转换指令,CVTx2y表示从类型x转换到类型y,其中x和y可以是I(整型)、D(双精度浮点)、F(单精度浮点)_D,_F双精度浮点和单精度浮点比较,“_”可以是LT、GT、LE、GE、EQ、NE,根据比较结果设置浮点状态寄存器中的位21/29基于SPECint92基准程序集的指令使用频率测量统计结果指令compresseqntottEspressogcc(cc1)li整型平均载入19.8%30.6%20.9%22.8%31.3%26%存储5.6%0.6%5.1%14.3%16.7%9%加14.4%8.5%23.8%14.6%11.1%14%减1.8%0.3%0.5%0%乘0.1%0%除0%比较15.4%26.5%8.3%12.4%5.4%13%载入立即值8.1%1.5%1.3%6.8%2.4%3%22/29指令compresseqntottEspressogcc(cc1)li整型平均条件分支17.4%24.0%15.0%11.5%14.6%16%无条件分支1.5%0.9%0.5%1.3%1.8%1%调用0.1%0.5%0.4%1.1%3.1%1%返回,跳转0.1%0.5%0.5%1.5%3.5%1%移位6.5%0.3%7.0%6.2%0.7%4%与2.1%0.1%9.4%1.6%2.1%3%或6.0%5.5%4.8%4.2%6.2%5%其它(异或,非)1.0%2.0%0.5%0.1%1%23/29指令compresseqntottEspressogcc(cc1)li整型平均载入浮点数0%储存浮点数0%浮点加0%浮点减0%浮点乘0%浮点除0%浮点比较0%浮点寄存器移动0%其它浮点操作0%24/29基于SPECfp92基准程序集的指令使用频率测量统计结果指令doducearhydro2dmdljdp2su2cor整型平均载入1.4%0.2%0.1%1.1%3.6%1%储存1.3%0.1%0.1%1.3%1%加13.6%13.6%10.9%4.7%9.7%11%减0.3%0.2%0.7%0%乘0%除0%比较3.2%3.1%1.2%0.3%1.3%2%载入立即值2.2%0.2%2.2%0.9%1%25/29指令doducearhydro2dmdljdp2su2cor整型平均条件分支8.0%10.1%11.7%9.3%2.6%8%无条件分支0.9%0.4%0.4%0.1%0%调用0.5%1.9%0.3%1%返回,跳转0.6%1.9%0.3%1%移位2.0%0.2%2.4%1.3%2.3%2%与0.4%0.1%0.3%0%或0.2%0.1%0.1%0.1%0%其它(异或,非)0%26/29指令doducearhydro2dmdljdp2su
本文标题:DLX指令集结构
链接地址:https://www.777doc.com/doc-7913376 .html