《第2章 计算机指令集结构.ppt》由会员分享,可在线阅读,更多相关《第2章 计算机指令集结构.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 1*/7*/7第2章 计算机指令集结构2 2*/7*/72.1指令集结构的分类2.2寻址方式2.3指令集结构的功能设计2.4操作数的类型和大小2.5指令格式的设计2.6MIPS指令集结构3 3*/7*/71.区别不同指令集结构的主要因素 CPU中用来存储操作数的存储单元的类型2.CPU中用来存储操作数的存储单元的主要类型堆栈累加器通用寄存器组3.将指令集结构分为三种类型2.1 指令集结构的分类4 4*/7*/72.1 指令集结构的分类堆栈结构累加器结构通用寄存器结构根据操作数的来源不同,又可进一步分为根据操作数的来源不同,又可进一步分为:q寄存器寄存器-存储器结构存储器结构(RMRM结构)
2、结构)(操作数可以来自存储器操作数可以来自存储器 )q寄存器寄存器-寄存器结构寄存器结构(RRRR结构)结构)(所有操作数都是来自通用寄存器组所有操作数都是来自通用寄存器组)也称为也称为load-storeload-store结构,这个名称强调:只有结构,这个名称强调:只有loadload指令和指令和storestore指令能够访问存储器。指令能够访问存储器。5 5*/7*/72.1 指令集结构的分类4.对于不同类型的指令集结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。显式给出:用指令字中的操作数字段给出隐式给出:使用事先约定好的存储单元 5.4种指令集结构的操作数的位置
3、以及结果的去向灰色块:操作数黑色块:结果灰色块:操作数黑色块:结果TOSTOS(Top Of StackTop Of Stack):栈顶):栈顶 7 7*/7*/72.1 指令集结构的分类 例:表达式表达式C=A+BC=A+B在在4 4种类型指令集结构上的代码。种类型指令集结构上的代码。假设:假设:A A、B B、C C均保存在存储器单元中,并且不能均保存在存储器单元中,并且不能 破坏破坏A A和和B B的值。的值。堆 栈 累加器寄存器(RM型)寄存器(RR型)push Aload Aload R1,Aload R1,Apush Badd Badd R1,Bload R2,Baddstore
4、Cstore R1,Cadd R3,R1,R2pop Cstore R3,C8 8*/7*/72.1 指令集结构的分类6.通用寄存器结构现代指令集结构的主流在灵活性和提高性能方面有明显的优势q跟其他的跟其他的CPUCPU内部存储单元一样,寄存器的访问内部存储单元一样,寄存器的访问 速度比存储器快。速度比存储器快。q对编译器而言,能更加容易、有效地分配和使用对编译器而言,能更加容易、有效地分配和使用 寄存器。寄存器。q寄存器可以用来存放变量。寄存器可以用来存放变量。(1 1)减少对存储器的访问,加快程序的执行速度;减少对存储器的访问,加快程序的执行速度;(因为寄存器比存储器快)(因为寄存器比存储
5、器快)9 9*/7*/72.1 指令集结构的分类(2 2)用更少的地址位(相对于存储器地址来说)来对寄用更少的地址位(相对于存储器地址来说)来对寄 存器进行寻址,从而有效地减少程序的目标代码的存器进行寻址,从而有效地减少程序的目标代码的 大小。大小。7.根据ALU指令的操作数的两个特征对通用寄存器型指 令集结构进一步细分ALU指令的操作数个数q3 3个操作数的指令个操作数的指令 两个源操作数、一个目的操作数两个源操作数、一个目的操作数q2 2个操作数的指令个操作数的指令其中一个操作数既作为源操作数,又作为目的操作数。其中一个操作数既作为源操作数,又作为目的操作数。1010*/7*/72.1 指
6、令集结构的分类ALU指令中存储器操作数的个数可以是可以是0 0中的某一个,为中的某一个,为0 0表示没有存储器操作数。表示没有存储器操作数。ALU指令中存储器操作数的个数 ALU指令中操作数的最多个数 结构类型 机器实例 03RR MIPS,SPARC,Alpha,PowerPC,ARM12RM IBM 360/370,Intel 80 x86,Motorola 680003RM IBM 360/370 22MM VAX 33MM VAX ALU指令中操作数个数和存储器操作数个数的典型组合1212*/7*/72.1 指令集结构的分类9.通用寄存器型指令集结构进一步细分为3种类型寄存器-寄存器型
7、(RR型)寄存器-存储器型(RM型)存储器-存储器型(MM型)10.3种通用寄存器型指令集结构的优缺点 表中(m,n)表示指令的n个操作数中有m个存 储器操作数。指令集结构类型指令集结构类型 优优 点点 缺缺 点点 寄存器寄存器型寄存器寄存器型 (0 0,3 3)指令字长固定,指令结构指令字长固定,指令结构简洁,是一种简单的代码简洁,是一种简单的代码生成模型,各种指令的执生成模型,各种指令的执行时钟周期数相近行时钟周期数相近 与指令中含存储器操作数的指令集结与指令中含存储器操作数的指令集结构相比,指令条数多,目标代码不够构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大紧凑,因而程
8、序占用的空间比较大 寄存器存储器型寄存器存储器型 (1 1,2 2)可以在可以在ALUALU指令中直接对存指令中直接对存储器操作数进行引用,而储器操作数进行引用,而不必先用不必先用loadload指令进行加指令进行加载。容易对指令进行编码,载。容易对指令进行编码,目标代码比较紧凑目标代码比较紧凑 指令中的两个操作数不对称。在一条指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行能够表示的寄存器个数。指令的执行时钟周期数因操作数的来源(寄存器时钟周期数因操
9、作数的来源(寄存器或存储器)不同而差别比较大或存储器)不同而差别比较大 存储器存储器型存储器存储器型 (2 2,2 2)或(或(3 3,3 3)目标代码最紧凑,不需要目标代码最紧凑,不需要设置寄存器来保存变量设置寄存器来保存变量 指令字长变化很大,特别是指令字长变化很大,特别是3 3操作数操作数指令。而且每条指令完成的工作也差指令。而且每条指令完成的工作也差别很大。对存储器的频繁访问会使存别很大。对存储器的频繁访问会使存储器成为瓶颈。这种类型的指令集结储器成为瓶颈。这种类型的指令集结构现在已不用了构现在已不用了1414*/7*/71.一种指令集结构如何确定所要访问的数据的地址?2.当前的指令集
10、结构中所采用的一些操作数寻址方式:赋值操作Mem:存储器Regs:寄存器组方括号:表示内容qMem Mem:存储器的内容:存储器的内容qRegs Regs:寄存器的内容:寄存器的内容qMemRegsR1MemRegsR1:以寄存器:以寄存器R1R1中的内容作为地址的中的内容作为地址的 存储器单元中的内容存储器单元中的内容2.2 寻址方式寻址方式指令实例含 义寄存器寻址Add R4,R3RegsR4RegsR4RegsR3立即值寻址Add R4,#3RegsR4RegsR43偏移寻址Add R4,100(R1)RegsR4RegsR4Mem100+RegsR1寄存器间接寻址Add R4,(R1)
11、RegsR4RegsR4MemRegsR1索引寻址Add R3,(R1+R2)RegsR3RegsR3MemRegsR1+RegsR2直接寻址或绝对寻址Add R1,(1001)RegsR1RegsR1Mem1001存储器间接寻址Add R1,(R3)RegsR1RegsR1MemMemRegsR3自增寻址Add R1,(R2)+RegsR1RegsR1MemRegsR2RegsR2RegsR2d自减寻址Add R1,-(R2)RegsR2RegsR2dRegsR1RegsR1+MemRegsR2缩放寻址AddR1,100(R2)R3RegsR1RegsR1Mem100RegsR2RegsR3
12、*d1616*/7*/72.2 寻址方式 采用多种寻址方式可以显著地减少程序的指令条 数,但可能增加计算机的实现复杂度以及指令的CPI。1717*/7*/72.2 寻址方式立即数寻址方式和偏移寻址方式的使用频度最高。各种寻址方式的使用情况统计结果在在VAXVAX机器上运行机器上运行gccgcc、SpiceSpice和和Tex Tex 基准程序基准程序1818*/7*/72.2 寻址方式4.偏移量的取值范围在在load-storeload-store结构的机器(结构的机器(AlphaAlpha)上运行)上运行SPEC CPU2000SPEC CPU2000基准程序基准程序1919*/7*/72.
13、2 寻址方式从该图可以看出:程序所使用的偏移量大小分布十分广泛 主要是因为在存储器中所保存的数据并不是十分主要是因为在存储器中所保存的数据并不是十分集中,需要使用不同的偏移量才能对其进行访问。集中,需要使用不同的偏移量才能对其进行访问。较小的偏移量和较大的偏移量均占有相当大 的比例 2020*/7*/72.2 寻址方式5.立即数寻址方式立即数寻址方式的使用频度 指令类型 使用频度 整型平均 浮点平均 load指令 23%22%ALU指令 25%19%所有指令 21%16%大约1/4的load指令和ALU指令采用了立即数寻址。2121*/7*/72.2 寻址方式立即数的取值范围 2222*/7*
14、/72.2 寻址方式q最常用的是较小的立即数;最常用的是较小的立即数;q有时也会用到较大的立即数(主要是用于地址计算)。有时也会用到较大的立即数(主要是用于地址计算)。q在指令集结构设计中,至少要将立即数的大小设置在指令集结构设计中,至少要将立即数的大小设置 为为8 81616位。位。q在在VAXVAX机(支持机(支持3232位立即数)上做过类似的统计,结果位立即数)上做过类似的统计,结果 表明表明20%20%25%25%的立即数超过的立即数超过1616位。位。2323*/7*/71.指令集结构的功能设计确定软、硬件功能分配,即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。2.在
15、确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性硬件实现的特点 速度快、成本高、灵活性差速度快、成本高、灵活性差软件实现的特点 速度慢、价格便宜、灵活性好速度慢、价格便宜、灵活性好2.3 指令集结构的功能设计2424*/7*/72.3 指令集结构的功能设计3.对指令集的基本要求 完整性、规整性、高效率、兼容性 完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令集所提供的指令足够用。q要求指令集功能齐全、使用方便要求指令集功能齐全、使用方便q下表为许多指令集结构都包含的一些指令类型下表为许多指令集结构都包含的一些指令类型 n前前4 4类类属于通用计算
16、机系统的基本指令属于通用计算机系统的基本指令n对于最后对于最后4 4种类型的操作,不同指令集结构的支种类型的操作,不同指令集结构的支 持大不相同持大不相同。2525*/7*/72.3 指令集结构的功能设计操作类型 实 例 算术和逻辑运算 算术运算和逻辑操作:加,减,乘,除,与,或等 数据传输 load,store控制 分支,跳转,过程调用和返回,自陷等 系统 操作系统调用,虚拟存储器管理等 浮点 浮点操作:加,减,乘,除,比较等 十进制 十进制加,十进制乘,十进制到字符的转换等 字符串 字符串移动,字符串比较,字符串搜索等 图形 像素操作,压缩/解压操作等 2626*/7*/72.3 指令集结
17、构的功能设计规整性:主要包括对称性和均匀性。q对称性:对称性:所有与指令集有关的存储单元的使用、所有与指令集有关的存储单元的使用、操作码的设置等都是对称的。操作码的设置等都是对称的。例如:例如:在存储单元的使用上,所有通用寄存器都要同等对在存储单元的使用上,所有通用寄存器都要同等对 待。在操作码的设置上,如果设置了待。在操作码的设置上,如果设置了A-BA-B的指的指 令,就应该也设置令,就应该也设置B-AB-A的指令。的指令。q均匀性:均匀性:指对于各种不同的操作数类型、字长、操作指对于各种不同的操作数类型、字长、操作 种类和数据存储单元,指令的设置都要同等对待。种类和数据存储单元,指令的设置
18、都要同等对待。例如:例如:如果某机器有如果某机器有5 5种数据表示,种数据表示,4 4种字长,两种存储单种字长,两种存储单 元,则要设置元,则要设置5 54 42=402=40种同一操作的指令。种同一操作的指令。2727*/7*/72.3 指令集结构的功能设计高效率:指指令的执行速度快、使用频度高。4.在设计指令集结构时,有两种截然不同的设计策略。(产生了两类不同的计算机系统)CISC(复杂指令集计算机)q增强指令功能,把越来越多的功能交由硬件来实增强指令功能,把越来越多的功能交由硬件来实 现,并且指令的数量也是越来越多。现,并且指令的数量也是越来越多。RISC(精简指令集计算机)q尽可能地把
19、指令集简化,不仅指令的条数少,而且尽可能地把指令集简化,不仅指令的条数少,而且 指令的功能也比较简单。指令的功能也比较简单。2828*/7*/72.3 指令集结构的功能设计1.CISC结构追求的目标 强化指令功能,减少程序的指令条数,以达到提高性能的目的。2.增强指令功能主要是从以下几个方面着手:面向目标程序增强指令功能 q增强运算型指令的功能增强运算型指令的功能q增强数据传送指令的功能增强数据传送指令的功能q增强程序控制指令的功能增强程序控制指令的功能 丰富的程序控制指令为编程提供了多种选择。丰富的程序控制指令为编程提供了多种选择。2.3.1 CISC指令集结构的功能设计2929*/7*/7
20、2.3 指令集结构的功能设计例如:循环在程序中占有相当大的 比例,所以在指令上提供专 门的支持。循环控制部分通常用3条指令完成:q一条加法指令一条加法指令q一条比较指令一条比较指令q一条分支指令一条分支指令设置循环控制指令,用一条指令完成上述3条指令的功能。一般循环程序的结构一般循环程序的结构3030*/7*/72.3 指令集结构的功能设计面向高级语言的优化实现来改进指令集 (缩小高级语言与机器语言的语义差距)高级语言与一般的机器语言的语义差距非常大,为高级语言程序的编译带来了一些问题。(1 1)编译器本身比较复杂。)编译器本身比较复杂。(2 2)编译生成)编译生成的目标代码比较难以达到很好的
21、优化。的目标代码比较难以达到很好的优化。3131*/7*/72.3 指令集结构的功能设计3232*/7*/72.3 指令集结构的功能设计q增强对高级语言和编译器的支持增强对高级语言和编译器的支持 p对源程序中各种高级语言语句的使用频度进行对源程序中各种高级语言语句的使用频度进行 统计与分析,对使用频度高、执行时间长的语句,统计与分析,对使用频度高、执行时间长的语句,增强有关指令的功能,加快这些指令的执行速度,增强有关指令的功能,加快这些指令的执行速度,或者增加专门的指令,可以达到减少目标程序的或者增加专门的指令,可以达到减少目标程序的执行时间和减少目标程序长度的目的。执行时间和减少目标程序长度
22、的目的。p增强系统结构的规整性,减少系统结构中的各种增强系统结构的规整性,减少系统结构中的各种例外情况。例外情况。(面向高级语言的计算机(面向高级语言的计算机)3333*/7*/72.3 指令集结构的功能设计q高级语言计算机高级语言计算机 间接执行高级语言机器间接执行高级语言机器 高级语言成为机器的汇编语言,这时高级语言和机高级语言成为机器的汇编语言,这时高级语言和机器语言是一一对应的。用汇编的方法把高级语言源程序器语言是一一对应的。用汇编的方法把高级语言源程序翻译成机器语言程序。翻译成机器语言程序。直接执行高级语言的机器直接执行高级语言的机器 直接把高级语言作为机器语言,直接由固件直接把高级
23、语言作为机器语言,直接由固件/硬件对硬件对高级语言源程序的语句逐条进行解释执行。这时既不用高级语言源程序的语句逐条进行解释执行。这时既不用编译,也不用汇编。编译,也不用汇编。3434*/7*/72.3 指令集结构的功能设计面向操作系统的优化实现改进指令集 q操作系统和计算机系统结构是紧密联系的,操作系操作系统和计算机系统结构是紧密联系的,操作系 统的实现在很大程度上取决于系统结构的支持。统的实现在很大程度上取决于系统结构的支持。q指令集对操作系统的支持主要有:指令集对操作系统的支持主要有:p处理机工作状态和访问方式的切换。处理机工作状态和访问方式的切换。p进程的管理和切换。进程的管理和切换。p
24、存储管理和信息保护。存储管理和信息保护。p进程的同步与互斥,信号灯的管理等。进程的同步与互斥,信号灯的管理等。支持操作系统的有些指令属于特权指令,一般用户支持操作系统的有些指令属于特权指令,一般用户程序是不能使用的。程序是不能使用的。3535*/7*/72.3 指令集结构的功能设计1.CISC指令集结构存在的问题 (1979年开始,Patterson等人的研究)各种指令的使用频度相差悬殊q据统计:只有据统计:只有2020的指令使用频度比较高,占运的指令使用频度比较高,占运行时间的行时间的8080,而其余,而其余8080的指令只在的指令只在2020的运行时的运行时间内才会用到。间内才会用到。q使
25、用频度高的指令也是最简单的指令。使用频度高的指令也是最简单的指令。2.3.2 RISC指令集结构的功能设计执行频度排序 80 x86指令 指令执行频度(占执行指令总数的百分比)1load 22%2条件分支 20%3比较 16%4store 12%5加 8%6与 6%7减 5%8寄存器-寄存器间数据移动 4%9调用子程序 1%10返回 1%合 计 95%Intel 80 x86最常用的10条指令3737*/7*/72.3 指令集结构的功能设计指令集庞大,指令条数很多,许多指令的功能又 很复杂,使得控制器硬件非常复杂。导致的问题:q占用了大量的芯片面积(如占用占用了大量的芯片面积(如占用CPUCP
26、U芯片总面积的芯片总面积的一半以上),给一半以上),给VLSIVLSI设计造成很大的困难;设计造成很大的困难;q增加了研制时间和成本,容易造成设计错误。增加了研制时间和成本,容易造成设计错误。许多指令由于操作繁杂,其CPI值比较大,执行 速度慢。采用这些复杂指令有可能使整个程序的 执行时间反而增加。由于指令功能复杂,规整性不好,不利于采用流 水技术来提高性能。3838*/7*/72.3 指令集结构的功能设计2.设计RISC机器遵循的原则 指令条数少而简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令。采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位。指令的执行
27、在单个机器周期内完成。(采用流水线机制采用流水线机制)只有load和store指令才能访问存储器,其他指令的操作都是在寄存器之间进行。(即采用(即采用load-storeload-store结构)结构)大多数指令都采用硬连逻辑来实现。3939*/7*/72.3 指令集结构的功能设计强调优化编译器的作用,为高级语言程序生成优化的代码。充分利用流水技术来提高性能。3.早期的RISC微处理器1981年,Berkeley分校的Patterson 等人的32位微处理器RISC I:q3131条条指令,指令字长都是指令,指令字长都是3232位位,7878个个通用寄存器,时通用寄存器,时钟频率为钟频率为8
28、MHz8 MHz;q控制部分所占的芯片面积只有约控制部分所占的芯片面积只有约6%6%。商品化微处理器。商品化微处理器MC68000MC68000和和Z8000Z8000分别为分别为50%50%和和53%53%;q性能比性能比MC68000MC68000和和Z8000Z8000快快3 34 4倍。倍。4040*/7*/72.3 指令集结构的功能设计1983年的RISC:q指令条数为指令条数为3939,通用寄存器个数为,通用寄存器个数为138138,时钟频率为,时钟频率为12 MHz12 MHz。q后来发展成了后来发展成了SunSun公司的公司的SPARCSPARC系列微处理器。系列微处理器。19
29、81年,Stanford大学Hennessy等人的MIPS后来发展成了后来发展成了MIPS Rxxx系列微处理器。系列微处理器。IBM的801共同特点:q采用采用load-storeload-store结构结构q指令字长为指令字长为3232位位q采用高效的流水技术采用高效的流水技术4141*/7*/72.3 指令集结构的功能设计1.控制指令是用来改变控制流的。跳转:当指令是无条件改变控制流时,称之为跳转指令。分支:当控制指令是有条件改变控制流时,则称之为分支指令。2.能够改变控制流的指令q分支分支q跳转跳转q过程调用过程调用q过程返回过程返回2.3.3 控制指令4242*/7*/72.3 指令
30、集结构的功能设计3.控制指令的使用频度(load-storeload-store型指令集结构的机器,基准程序为型指令集结构的机器,基准程序为SPEC CPU2000SPEC CPU2000)指令类型 使用频度 整型平均 浮点平均 调用/返回 19%8%跳转 6%10%分支 75%82%改变控制流的大部分指令是分支指令(条件转移)。4.常用的3种表示分支条件的方法及其优缺点 名 称 检测分支条件的方法 优 点 缺 点 条件码(CC)检测由ALU操作设置的一些特殊的位(即CC)可以自由设置分支条件 条件码是增设的状态。而且它限制了指令的执行顺序,因为要保证条件码能顺利地传送给分支指令 条件寄存器
31、比较指令把比较结果放入任何一个寄存器,检测时就检测该寄存器 简单 占用了一个寄存器 比较与分支 比较操作是分支指令的一部分,通常这种比较是受到一定限制的 用一条指令(而不是两条)就能实现分支 当采用流水方式时,该指令的操作可能太多,在一拍内做不完 4444*/7*/72.3 指令集结构的功能设计5.转移目标地址的表示最常用的方法 在指令中提供一个偏移量,由该偏移量和程序计数在指令中提供一个偏移量,由该偏移量和程序计数器(器(PCPC)的值相加而得出目标地址。)的值相加而得出目标地址。(PCPC相对寻址)相对寻址)优点q有效地减少表示该目标地址所需要的位数。有效地减少表示该目标地址所需要的位数。
32、q位置无关(代码可被装载到主存的任意位置执行)。位置无关(代码可被装载到主存的任意位置执行)。关键:确定偏移量字段的长度q模拟结果表明:采用模拟结果表明:采用4 48 8位位的偏移量字段(以指令字的偏移量字段(以指令字为单位)就能表示大多数控制指令的转移目标地址了。为单位)就能表示大多数控制指令的转移目标地址了。4545*/7*/72.3 指令集结构的功能设计6.过程调用和返回除了要改变控制流之外,可能还要保存机器状态,至少也得保存返回地址(放在专用的链接寄存器或堆栈中)。过去有些指令集结构提供了专门的保存机制来保存许多寄存器的内容。现在较新的指令集结构则要求由编译器生成load和store指
33、令来保存或恢复寄存器的内容。4646*/7*/7数据表示:计算机硬件能够直接识别、指令集可以直接调用的数据类型。q所有数据类型中最常用、相对比较简单、用硬件实现比较所有数据类型中最常用、相对比较简单、用硬件实现比较容易的几种。容易的几种。数据结构:由软件进行处理和实现的各种数据类型。研究:研究:这些数据类型的逻辑结构与物理结构之间的关这些数据类型的逻辑结构与物理结构之间的关 系,并给出相应的算法。系,并给出相应的算法。系统结构设计者要解决的问题:如何确定数据表示?(软硬件取舍折中的问题)(软硬件取舍折中的问题)2.4 操作数的类型和大小4747*/7*/72.4 操作数的类型和大小1.表示操作
34、数类型的方法有两种由指令中的操作码指定操作数的类型。带标志符的数据表示。给数据加上标识,由数据本身给出操作数类型。q优点:优点:简化指令集,可由硬件自动实现一致性检查和简化指令集,可由硬件自动实现一致性检查和类型转换,缩小了机器语言与高级语言的语义差距,类型转换,缩小了机器语言与高级语言的语义差距,简化编译器等。简化编译器等。q缺点:缺点:由于需要在执行过程中动态检测标志符,动态由于需要在执行过程中动态检测标志符,动态开销比较大,所以采用这种方案的机器很少见。开销比较大,所以采用这种方案的机器很少见。2.操作数的大小:操作数的位数或字节数。主要的大小:主要的大小:字节(字节(8 8位)、半字(
35、位)、半字(1616位)位)字(字(3232位)、双字(位)、双字(6464位)位)4848*/7*/72.4 操作数的类型和大小字符:用ASCII码表示,为一个字节大小。整数:用二进制补码表示,其大小可以是字节、半字或单字。浮点操作数:单精度浮点数(1个字)、双精度浮点数(双字)。一般都采用一般都采用IEEE 754IEEE 754浮点浮点标准标准十进制操作数类型q压缩十进制或二进制编码十进制(压缩十进制或二进制编码十进制(BCDBCD码):用码):用4 4位二位二进制编码表示数字进制编码表示数字0 09 9,并将两个十进制数字合并到,并将两个十进制数字合并到一个字节中存储。一个字节中存储。
36、q非压缩十进制:将十进制数直接用字符串来表示。非压缩十进制:将十进制数直接用字符串来表示。3.访问不同操作数大小的频度(SPECSPEC基准程序基准程序 )操作数大小 访问频度 整型平均 浮点平均 字节 7%0%半字 19%0%单字 74%31%双字 0%69%基准程序对单字和双字的数据访问具有较高的频度。一台一台3232位的机器应该支持位的机器应该支持8 8、1616、3232位整型操作数以及位整型操作数以及3232位和位和6464位的位的IEEE 754IEEE 754标准的浮点操作数。标准的浮点操作数。5050*/7*/71.指令由两部分组成:操作码、地址码2.指令格式的设计 确定指令字
37、的编码方式,包括操作码字段和地址码字段的编码和表示方式。3.操作码的编码比较简单和直观Huffman编码法 减少操作码的平均位数,但所获得的编码是变长减少操作码的平均位数,但所获得的编码是变长的,不规整,不利于硬件处理。的,不规整,不利于硬件处理。固定长度的操作码 保证操作码的译码速度。保证操作码的译码速度。2.5 指令格式的设计5151*/7*/72.5 指令格式的设计4.两种表示寻址方式的方法将寻址方式编码于操作码中,由操作码描述相应操作的寻址方式。适合:适合:处理机采用处理机采用l load-storeoad-store结构,寻址方式只有很少几种。结构,寻址方式只有很少几种。设置专门的地
38、址描述符,由地址描述符表示相应操作数的寻址方式。适合:适合:处理机具有多种寻址方式,且指令有多个操作数。处理机具有多种寻址方式,且指令有多个操作数。5252*/7*/72.5 指令格式的设计5.考虑因素机器中寄存器的个数和寻址方式的数目对指令平均字长的影响以及它们对目标代码大小的影响。所设计的指令格式便于硬件处理,特别是流水实现。指令字长应该是字节(8位)的整数倍,而不能是随意的位数。6.指令集的3种编码格式 变长编码格式、定长编码格式、混合型编码格式变长编码格式、定长编码格式、混合型编码格式5353*/7*/72.5 指令格式的设计变长编码格式q当指令集的寻址方式和操作种类很多时,这种编码当
39、指令集的寻址方式和操作种类很多时,这种编码格式是最好的。格式是最好的。q用最少的二进制位来表示目标代码。用最少的二进制位来表示目标代码。q可能会使各条指令的字长和执行时间相差很大。可能会使各条指令的字长和执行时间相差很大。5454*/7*/72.5 指令格式的设计定长编码格式q将操作类型和寻址方式一起编码到操作码中。将操作类型和寻址方式一起编码到操作码中。q当寻址方式和操作类型非常少时,这种编码格式非当寻址方式和操作类型非常少时,这种编码格式非常好。常好。q可以有效地降低译码的复杂度,提高译码的速度。可以有效地降低译码的复杂度,提高译码的速度。q大部分大部分RISCRISC的指令集均采用这种编
40、码格式。的指令集均采用这种编码格式。5555*/7*/72.5 指令格式的设计混合型编码格式q提供若干种固定的指令字长。提供若干种固定的指令字长。q以期达到既能够减少目标代码长度又能降低译码复以期达到既能够减少目标代码长度又能降低译码复杂度的目标。杂度的目标。5656*/7*/71.32个64位通用寄存器(GPRs)R0,R1,R31也被称为整数寄存器R0的值永远是02.32个64位浮点数寄存器(FPRs)F0,F1,F312.6 MIPS指令集结构介绍MIPS64的一个子集,简称为MIPS。2.6.1 MIPS的寄存器5757*/7*/72.6 MIPS指令集结构用来存放32个单精度浮点数(
41、32位),也可以用来存放32个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。3.一些特殊寄存器它们可以与通用寄存器交换数据。例如,浮点状态寄存器用来保存有关浮点操作结果的信息。5858*/7*/72.6 MIPS指令集结构1.MIPS的数据表示整数字节(字节(8 8位)位)半字(半字(1616位)位)字(字(3232位)位)双字(双字(6464位)位)浮点数单精度浮点数(单精度浮点数(3232位)位)双精度浮点数(双精度浮点数(6464位)位)2.字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的剩余部分。装入以后,对它们将
42、按照64位整数的方式进行运算。2.6.2 MIPS的数据表示5959*/7*/72.6 MIPS指令集结构1.立即数寻址与偏移量寻址立即数字段和偏移量字段都是立即数字段和偏移量字段都是1616位的。位的。2.寄存器间接寻址是通过把0作为偏移量来实现的3.16位绝对寻址是通过把R0(其值永远为0)作为基址 寄存器来完成的4.MIPS的存储器是按字节寻址的,地址为64位5.所有存储器访问都必须是边界对齐的2.6.3 MIPS的数据寻址方式6060*/7*/72.6 MIPS指令集结构1.寻址方式编码到操作码中2.所有的指令都是32位的3.操作码占6位4.3种指令格式2.6.4 MIPS的指令格式6
43、161*/7*/72.6 MIPS指令集结构I类指令q包括所有的包括所有的loadload和和storestore指令、立即数指令、分支指令、立即数指令、分支指令、寄存器跳转指令、寄存器链接跳转指令。指令、寄存器跳转指令、寄存器链接跳转指令。q立即数字段为立即数字段为1616位,用于提供立即数或偏移量。位,用于提供立即数或偏移量。6262*/7*/72.6 MIPS指令集结构qloadload指令指令 访存有效地址:访存有效地址:RegsrsRegsrsimmediateimmediate 从存储器取来的数据放入寄存器从存储器取来的数据放入寄存器rtrtqstorestore指令指令 访存有效
44、地址:访存有效地址:RegsrsRegsrsimmediateimmediate 要存入存储器的数据放在寄存器要存入存储器的数据放在寄存器rtrt中中q立即数指令立即数指令 Regsrt Regsrs op immediateRegsrt Regsrs op immediateq分支指令分支指令 转移目标地址:转移目标地址:RegsrsRegsrsimmediateimmediate 要判断的数据放在寄存器要判断的数据放在寄存器rtrt中中q寄存器跳转、寄存器跳转并链接寄存器跳转、寄存器跳转并链接 转移目标地址为转移目标地址为RegsrsRegsrs6363*/7*/72.6 MIPS指令集结
45、构R类指令q包括包括ALUALU指令、专用寄存器读指令、专用寄存器读/写指令、写指令、movemove指令等。指令等。qALUALU指令指令 Regsrd Regsrs funct RegsrtRegsrd Regsrs funct Regsrt func func为具体的运算操作编码为具体的运算操作编码6464*/7*/72.6 MIPS指令集结构J类指令q包括跳转指令、跳转并链接指令、自陷指令、异常返回包括跳转指令、跳转并链接指令、自陷指令、异常返回指令。指令。q在这类指令中,指令字的低在这类指令中,指令字的低2626位是偏移量,它与位是偏移量,它与PCPC值相值相加形成跳转的地址。加形成
46、跳转的地址。6565*/7*/72.6 MIPS指令集结构1.MIPS指令可以分为四大类qloadload和和storestoreqALUALU操作操作q分支与跳转分支与跳转q浮点操作浮点操作2.符号的意义 xny:从y传送n位到xx,yz:把z传送到x和y 2.6.5 MIPS的操作6666*/7*/72.6 MIPS指令集结构下标:表示字段中具体的位;q对于指令和数据,按从最高位到最低位(即从左到右)对于指令和数据,按从最高位到最低位(即从左到右)的顺序依次进行编号,最高位为第的顺序依次进行编号,最高位为第0 0位,次高位为第位,次高位为第1 1位,依此类推。位,依此类推。q下标可以是一个
47、数字,也可以是一个范围。下标可以是一个数字,也可以是一个范围。例如:例如:RegsR4RegsR40 0:寄存器:寄存器R4R4的符号位的符号位 RegsR4RegsR456.6356.63:R4R4的最低字节的最低字节Mem:表示主存;q按字节寻址,可以传输任意个字节。按字节寻址,可以传输任意个字节。上标:用于表示对字段进行复制的次数。例如:例如:0 0 3232:一个:一个3232位长的全位长的全0 0字段字段6767*/7*/72.6 MIPS指令集结构符号#:用于两个字段的拼接,并且可以出现在数据传送的任何一边。举例举例:R8R8、R10R10:6464位的寄存器,则位的寄存器,则Re
48、gsR8RegsR832.6332.63 3232 (Mem RegsR6Mem RegsR60 0)2424#Mem RegsR6#Mem RegsR6表示的意义是:表示的意义是:以以R6R6的内容作为地址访问内存,得到的字节按符的内容作为地址访问内存,得到的字节按符号位扩展为号位扩展为3232位后存入位后存入R8R8的低的低3232位,位,R8R8的高的高3232位(即位(即RegsR8RegsR80.310.31)不变。)不变。3.load和store指令指令举例 指令名称 含 义 LD R2,20(R3)装入双字 RegsR264 Mem20+RegsR3 LW R2,40(R3)装入
49、字 RegsR264(Mem40+RegsR30)32#Mem40+RegsR3 LB R2,30(R3)装入字节 RegsR264(Mem30+RegsR30)56#Mem30+RegsR3 LBU R2,40(R3)装入无符号字节 RegsR264 056#Mem40+RegsR3 LH R2,30(R3)装入半字 RegsR264(Mem30+RegsR30)48#Mem30+RegsR3#Mem31+RegsR3 L.S F2,60(R4)装入半字 RegsF264 Mem60+RegsR4#032 L.D F2,40(R3)装入双精度浮点数 RegsF264 Mem40+RegsR3
50、 SD R4,300(R5)保存双字 Mem300+RegsR564 RegsR4 SW R4,300(R5)保存字 Mem300+RegsR532 RegsR4 S.S F2,40(R2)保存单精度浮点数Mem40+RegsR232 RegsF2 031 SH R5,502(R4)保存半字Mem502+RegsR416 RegsR5 48.63 6969*/7*/74.ALU指令寄存器寄存器-寄存器型(寄存器型(RRRR型)指令或立即数型型)指令或立即数型算术和逻辑操作:加、减、与、或、异或和移位等算术和逻辑操作:加、减、与、或、异或和移位等指令举例 指令名称 含义 DADDUR1,R2,R