资源预览内容
第1页 / 共99页
第2页 / 共99页
第3页 / 共99页
第4页 / 共99页
第5页 / 共99页
第6页 / 共99页
第7页 / 共99页
第8页 / 共99页
第9页 / 共99页
第10页 / 共99页
亲,该文档总共99页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1 1/75/752.1指令集结构的分类2.2寻址方式2.3指令集结构的功能设计2.4操作数的类型和大小2.5指令格式的设计2.6MIPS指令集结构第2章 计算机指令集结构2 2/75/751.区别不同指令集结构的主要因素CPU中用来存储操作数的存储单元的类型2.CPU中用来存储操作数的存储单元的主要类型堆栈累加器通用寄存器组2.1 指令集结构的分类3 3/75/752.1 指令集结构的分类堆栈结构累加器结构通用寄存器结构根据操作数的来源不同,又可进一步分为根据操作数的来源不同,又可进一步分为:q寄存器寄存器- -存储器结构存储器结构(RMRM结构)结构) ( (操作数可以来自存储器操作数可以来自存储器 ) )q寄存器寄存器- -寄存器结构寄存器结构(RRRR结构)结构): :所有操作数均来自通用寄所有操作数均来自通用寄存器组存器组load-storeload-store结构结构:只有:只有loadload指令和指令和storestore指令能够访问存储器指令能够访问存储器3.将指令集结构分为三种类型4 4/75/752.1 指令集结构的分类1.对于不同类型的指令集结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。显式给出:用指令字中的操作数字段给出q操作数字段个数操作数字段个数q寻址方式寻址方式隐式给出:使用事先约定好的存储单元q堆栈栈顶堆栈栈顶q累加器累加器q特定寄存器特定寄存器q特定存储单元特定存储单元灰色块:操作数黑色块:结果灰色块:操作数黑色块:结果TOSTOS(Top Of StackTop Of Stack):):栈顶栈顶 5.4种指令集结构的操作数的位置以及结果的去向6 6/75/752.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 Cstore R1,Cadd R3,R1,R2pop Cstore R3,C7 7/75/752.1 指令集结构的分类1.通用寄存器结构现代指令集结构的主流在灵活性和提高性能方面有明显的优势q寄存器的访问速度比存储器快。寄存器的访问速度比存储器快。q对编译器而言,能更加容易、有效地分配和使用寄存对编译器而言,能更加容易、有效地分配和使用寄存器。器。q寄存器可以用来存放变量。寄存器可以用来存放变量。 (1 1)减少对存储器的访问,加快程序的执行速度;减少对存储器的访问,加快程序的执行速度; (因为寄存器比存储器快)(因为寄存器比存储器快) (2 2)用更少的地址位(相对于存储器地址)来对寄存用更少的地址位(相对于存储器地址)来对寄存器进行寻址,从而有效地减少程序的目标代码的大小。器进行寻址,从而有效地减少程序的目标代码的大小。8 8/75/752.1 指令集结构的分类1.根据ALU指令的操作数的两个特征对通用寄存器型指 令集结构进一步细分ALU指令的操作数个数q3 3个操作数的指令个操作数的指令 两个源操作数、一个目的操作数两个源操作数、一个目的操作数q2 2个操作数的指令个操作数的指令 其中一个操作数既作为源操作数,又作为目的操作数。其中一个操作数既作为源操作数,又作为目的操作数。ALU指令中存储器操作数的个数可以是可以是0 0中的某一个,为中的某一个,为0 0表示没有存储器操作数。表示没有存储器操作数。ALU指令中存储器操作数的个数 ALU指令中操作数的最多个数 结构类型 机器实例 03RR MIPS,SPARC,Alpha,PowerPC,ARM12RM IBM 360/370,Intel 80x86,Motorola 680003RM IBM 360/370 22MM VAX 33MM VAX 8.ALU指令中操作数个数和存储器操作数个数的典型组合1010/75/752.1 指令集结构的分类9.通用寄存器型指令集结构进一步细分为3种类型寄存器-寄存器型(RR型)寄存器-存储器型(RM型)存储器-存储器型(MM型)10. 3种通用寄存器型指令集结构的优缺点 表中(m,n)表示指令的n个操作数中有m个存 储器操作数。指令集结构类型指令集结构类型 优优 点点 缺缺 点点 寄存器寄存器型寄存器寄存器型 (0 0,3 3) 指令字长固定,指令结构指令字长固定,指令结构简洁,是一种简单的代码简洁,是一种简单的代码生成模型,各种指令的执生成模型,各种指令的执行时钟周期数相近行时钟周期数相近 与指令中含存储器操作数的指令集结与指令中含存储器操作数的指令集结构相比,指令条数多,目标代码不够构相比,指令条数多,目标代码不够紧凑,因而程序占用的空间比较大紧凑,因而程序占用的空间比较大 寄存器存储器型寄存器存储器型 (1 1,2 2) 可以在可以在ALUALU指令中直接对存指令中直接对存储器操作数进行引用,而储器操作数进行引用,而不必先用不必先用loadload指令进行加指令进行加载。容易对指令进行编码,载。容易对指令进行编码,目标代码比较紧凑目标代码比较紧凑 指令中的两个操作数不对称。在一条指令中的两个操作数不对称。在一条指令中同时对寄存器操作数和存储器指令中同时对寄存器操作数和存储器操作数进行编码,有可能限制指令所操作数进行编码,有可能限制指令所能够表示的寄存器个数。指令的执行能够表示的寄存器个数。指令的执行时钟周期数因操作数的来源(寄存器时钟周期数因操作数的来源(寄存器或存储器)不同而差别比较大或存储器)不同而差别比较大 存储器存储器型存储器存储器型 (2 2,2 2) 或(或(3 3,3 3) 目标代码最紧凑,不需要目标代码最紧凑,不需要设置寄存器来保存变量设置寄存器来保存变量 指令字长变化很大,特别是指令字长变化很大,特别是3 3操作数操作数指令。而且每条指令完成的工作也差指令。而且每条指令完成的工作也差别很大。对存储器的频繁访问会使存别很大。对存储器的频繁访问会使存储器成为瓶颈。这种类型的指令集结储器成为瓶颈。这种类型的指令集结构现在已不用了构现在已不用了1212/75/751.一种指令集结构如何确定所要访问的数据的地址?2.当前的指令集结构中所采用的一些操作数寻址方式:赋值操作Mem:存储器Regs:寄存器组方括号:表示内容qMemMem :存储器的内容存储器的内容qRegsRegs :寄存器的内容寄存器的内容qMemRegsR1MemRegsR1:以寄存器以寄存器R1R1中的内容作为地址的中的内容作为地址的 存储器单元中的内容存储器单元中的内容2.2 寻址方式寻址方式指令实例含 义寄存器寻址Add R4 , R3RegsR4RegsR4RegsR3立即数寻址Add R4 , #3RegsR4RegsR43偏移寻址Add R4 , 100(R1)RegsR4RegsR4Mem100+RegsR1寄存器间接寻址Add R4 , (R1)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*d1414/75/752.2 寻址方式 采用多种寻址方式可以显著地减少程序的指令条 数,但可能增加计算机的实现复杂度以及指令的CPI。1515/75/752.2 寻址方式立即数寻址方式和偏移寻址方式的使用频度最高。 1.各种寻址方式的使用情况统计结果在在VAXVAX机器上运行机器上运行gccgcc、SpiceSpice和和TexTex基准程序基准程序1616/75/752.2 寻址方式1. 偏移量的取值范围在在load-storeload-store结构的机器(结构的机器(AlphaAlpha)上运行上运行SPEC CPU2000SPEC CPU2000基准程序基准程序1717/75/752.2 寻址方式从该图可以看出:程序所使用的偏移量大小分布十分广泛 主要是因为在存储器中所保存的数据并不是十分集中,主要是因为在存储器中所保存的数据并不是十分集中,需要使用不同的偏移量才能对其进行访问。需要使用不同的偏移量才能对其进行访问。 较小的偏移量和较大的偏移量均占有相当大 的比例 1818/75/752.2 寻址方式1.立即数寻址方式立即数寻址方式的使用频度 指令类型 使用频度 整型平均 浮点平均 load指令 23% 22% ALU指令 25% 19% 所有指令 21% 16% 大约1/4的load指令和ALU指令采用了立即数寻址。 1919/75/752.2 寻址方式立即数的取值范围 2020/75/752.2 寻址方式q最常用的是较小的立即数;最常用的是较小的立即数;q有时也会用到较大的立即数(主要是用于地址计算)。有时也会用到较大的立即数(主要是用于地址计算)。q在指令集结构设计中,至少要将立即数的大小设置在指令集结构设计中,至少要将立即数的大小设置 为为8 81616位。位。q在在VAXVAX机(支持机(支持3232位立即数)上做过类似的统计,结果位立即数)上做过类似的统计,结果 表明表明20%20%25%25%的立即数超过的立即数超过1616位。位。 2121/75/751.指令集结构的功能设计确定软、硬件功能分配。即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。2.在确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性硬件实现的特点速度快、成本高、灵活性差速度快、成本高、灵活性差软件实现的特点速度慢、价格便宜、灵活性好速度慢、价格便宜、灵活性好2.3 指令集结构的功能设计2222/75/752.3 指令集结构的功能设计3.对指令集的基本要求 完整性、规整性、高效率、兼容性完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令集所提供的指令足够用。q要求指令集功能齐全、使用方便要求指令集功能齐全、使用方便q下表为许多指令集结构都包含的一些指令类型下表为许多指令集结构都包含的一些指令类型 n前前4 4类类属于通用计算机系统的基本指令属于通用计算机系统的基本指令n对于最后对于最后4 4种类型的操作,不同指令集结构的支种类型的操作,不同指令集结构的支 持大不相同持大不相同 。2323/75/752.3 指令集结构的功能设计操作类型 实 例 算术和逻辑运算 算术运算和逻辑操作:加,减,乘,除,与,或等 数据传输 load,store程序控制 分支,跳转,过程调用和返回,自陷等 操作系统支持 操作系统调用,虚拟存储器管理等 浮点 浮点操作:加,减,乘,除,比较等 十进制 十进制加,十进制乘,十进制到字符的转换等 字符串 字符串移动,字符串比较,字符串搜索等 图形 像素操作,压缩/解压操作等 2424/75/752.3 指令集结构的功能设计规整性:主要包括对称性和均匀性。q对称性:对称性:所有与指令集有关的存储单元的使用、所有与指令集有关的存储单元的使用、 操作码的设置等都是对称的。操作码的设置等都是对称的。例如:例如:在存储单元的使用上,所有通用寄存器都要同等对在存储单元的使用上,所有通用寄存器都要同等对 待。在操作码的设置上,如果设置了待。在操作码的设置上,如果设置了A-BA-B的指的指 令,就应该也设置令,就应该也设置B-AB-A的指令。的指令。 q均匀性:均匀性:指对于各种不同的操作数类型、字长、操作指对于各种不同的操作数类型、字长、操作 种类和数据存储单元,指令的设置都要同等对待。种类和数据存储单元,指令的设置都要同等对待。例如:例如:如果某机器有如果某机器有5 5种数据表示,种数据表示,4 4种字长,两种存储单种字长,两种存储单 元,则要设置元,则要设置5 54 42=402=40种同一操作的指令。种同一操作的指令。 2525/75/751.指令的执行速度要快指令的执行速度要快2.指令的使用频度要高指令的使用频度要高3.各类指令要有一定的比例各类指令要有一定的比例 如:运算类指令占40%以上, 数据传送类指令占30%等。兼容性:兼容性:1.在同一系列机内,指令系统,包括寻址方式和数据表示等保持基本不变;2.可以适当增加指令、增加寻址方式,增加数据表示等;但不能减少任何已有的指令。高效率:指令的执行速度快、使用频度高。2626/75/752.3 指令集结构的功能设计1.在设计指令集结构时,有两种截然不同的设计策略。产生了两类不同的计算机系统:CISC(复杂指令集计算机)增强指令功能,把越来越多的功能交由硬件来实现,并且增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。指令的数量也是越来越多。RISC(精简指令集计算机)尽可能地把指令集简化,不仅指令的条数少,而且指令的尽可能地把指令集简化,不仅指令的条数少,而且指令的功能也比较简单。功能也比较简单。 2727/75/752.3 指令集结构的功能设计1.CISC结构追求的目标强化指令功能,减少程序的指令条数,以达到提高性能的目的。2.增强指令功能主要是从以下几个方面着手:面向目标程序增强指令功能q增强运算型指令的功能增强运算型指令的功能q增强数据传送指令的功能增强数据传送指令的功能q增强程序控制指令的功能增强程序控制指令的功能 丰富的程序控制指令为编程提供了多种选择。丰富的程序控制指令为编程提供了多种选择。 2.3.1 CISC指令集结构的功能设计2828/75/752.3 指令集结构的功能设计例如:循环在程序中占有相当大的 比例,所以在指令上提供专 门的支持。循环控制部分通常用3条指令完成:q一条加法指令一条加法指令q一条比较指令一条比较指令q一条分支指令一条分支指令设置循环控制指令,用一条指令完成上述3条指令的功能。 一般循环程序的结构一般循环程序的结构2929/75/752.3 指令集结构的功能设计面向高级语言的优化实现来改进指令集 (缩小高级语言与机器语言的语义差距) 高级语言与一般的机器语言的语义差距非常大,为高级语言程序的编译带来了一些问题。(1 1)编译器本身比较复杂。)编译器本身比较复杂。(2 2)编译生成)编译生成的目标代码比较难以达到很好的优化。的目标代码比较难以达到很好的优化。 3030/75/752.3 指令集结构的功能设计3131/75/752.3 指令集结构的功能设计q增强对高级语言和编译器的支持增强对高级语言和编译器的支持 p对源程序中各种高级语言语句的使用频度进行对源程序中各种高级语言语句的使用频度进行 统计与分析,对使用频度高、执行时间长的语句,统计与分析,对使用频度高、执行时间长的语句,增强有关指令的功能,加快这些指令的执行速度,增强有关指令的功能,加快这些指令的执行速度,或者增加专门的指令,可以达到减少目标程序的或者增加专门的指令,可以达到减少目标程序的执行时间和减少目标程序长度的目的。执行时间和减少目标程序长度的目的。 p增强系统结构的规整性,减少系统结构中的各种增强系统结构的规整性,减少系统结构中的各种例外情况。例外情况。 (面向高级语言的计算机(面向高级语言的计算机 )3232/75/752.3 指令集结构的功能设计q高级语言计算机高级语言计算机 间接执行高级语言机器间接执行高级语言机器 高级语言成为机器的汇编语言,这时高级语言和机高级语言成为机器的汇编语言,这时高级语言和机器语言是一一对应的。用汇编的方法把高级语言源程序器语言是一一对应的。用汇编的方法把高级语言源程序翻译成机器语言程序。翻译成机器语言程序。 直接执行高级语言的机器直接执行高级语言的机器 直接把高级语言作为机器语言,直接由固件直接把高级语言作为机器语言,直接由固件/硬件对硬件对高级语言源程序的语句逐条进行解释执行。这时既不用高级语言源程序的语句逐条进行解释执行。这时既不用编译,也不用汇编。编译,也不用汇编。3333/75/752.3 指令集结构的功能设计面向操作系统的优化实现改进指令集 q操作系统和计算机系统结构是紧密联系的,操作系操作系统和计算机系统结构是紧密联系的,操作系 统的实现在很大程度上取决于系统结构的支持。统的实现在很大程度上取决于系统结构的支持。q指令集对操作系统的支持主要有:指令集对操作系统的支持主要有:p处理机工作状态和访问方式的切换。处理机工作状态和访问方式的切换。p进程的管理和切换。进程的管理和切换。p存储管理和信息保护。存储管理和信息保护。p进程的同步与互斥,信号灯的管理等。进程的同步与互斥,信号灯的管理等。 支持操作系统的有些指令属于特权指令,一般用户支持操作系统的有些指令属于特权指令,一般用户程序是不能使用的。程序是不能使用的。 3434/75/757070年代,指令系统已经非常复杂年代,指令系统已经非常复杂3535/75/752.3 指令集结构的功能设计1.CISC指令集结构存在的问题 1979年开始,Patterson等人的研究各种指令的使用频度相差悬殊q据统计:只有据统计:只有2020的指令使用频度比较高,占运的指令使用频度比较高,占运行时间的行时间的8080,而其余,而其余8080的指令只在的指令只在2020的运行时的运行时间内才会用到。间内才会用到。q使用频度高的指令也是最简单的指令。使用频度高的指令也是最简单的指令。2.3.2 RISC指令集结构的功能设计执行频度排序 80x86指令 指令执行频度(占执行指令总数的百分比) 1load 22% 2条件分支 20% 3比较 16% 4store 12% 5加 8% 6与 6% 7减 5% 8寄存器-寄存器间数据移动 4% 9调用子程序 1% 10返回 1% 合 计 95% Intel 80x86最常用的10条指令3737/75/752.3 指令集结构的功能设计指令集庞大,指令条数很多,许多指令的功能又 很复杂,使得控制器硬件非常复杂。 导致的问题:q占用了大量的芯片面积(如占用占用了大量的芯片面积(如占用CPUCPU芯片总面积的芯片总面积的一半以上),给一半以上),给VLSIVLSI设计造成很大的困难;设计造成很大的困难;q增加了研制时间和成本,容易造成设计错误。增加了研制时间和成本,容易造成设计错误。许多指令由于操作繁杂,其CPI值比较大,执行 速度慢。采用这些复杂指令有可能使整个程序的 执行时间反而增加。由于指令功能复杂,规整性不好,不利于采用流 水技术来提高性能。 3838/75/751975年,IBM公司率先组织力量开始研究指令系统的合理性问题1979年研制出世界上第一台采用RISC思想的计算机IBM 8011981年,Stanford大学Hennessy等人的MIPS后来发展成了后来发展成了MIPS Rxxx系列微处理器。系列微处理器。1986年,IBM正式推出采用RISC体系结构的工作站IBM RT PC共同特点:q采用采用load-storeload-store结构结构q指令字长为指令字长为3232位位q采用高效的流水技术采用高效的流水技术3939/75/752.3 指令集结构的功能设计1.设计RISC机器遵循的原则 指令条数少而简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令。采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位。指令的执行在单个机器周期内完成。(采用流水线机制)采用load-store结构:只有load和store指令才能访问存储器,其他指令的操作都是在寄存器之间进行大多数指令都采用硬连逻辑来实现。强调优化编译器的作用,为高级语言程序生成优化的代码。充分利用流水技术来提高性能。4040/75/752.3 指令集结构的功能设计3.早期的RISC微处理器1981年 ,Berkeley分校的Patterson 等人的32位微处理器RISC I :q3131条条指令,指令字长都是指令,指令字长都是3232位位,7878个个通用寄存器,时通用寄存器,时钟频率为钟频率为8 MHz8 MHz;q控制部分所占的芯片面积只有约控制部分所占的芯片面积只有约6%6%。商品化微处理器。商品化微处理器MC68000MC68000和和Z8000Z8000分别为分别为50%50%和和53%53%;q性能比性能比MC68000MC68000和和Z8000Z8000快快3 34 4倍。倍。1983年的RISC:q指令条数为指令条数为3939,通用寄存器个数为,通用寄存器个数为138138,时钟频率为,时钟频率为12 MHz12 MHz。q后来发展成了后来发展成了SunSun公司的公司的SPARCSPARC系列微处理器。系列微处理器。4141/75/75RISCRISC思想的精华思想的精华1.1.减少减少CPICPI是是RISCRISC思想的精华思想的精华2.2.程序执行时间程序执行时间: TimeTime CPI T CPI T同类问题的同类问题的程序长度程序长度:RISCRISC比比CISCCISC长长30%-40%30%-40% CPICPI:RISCRISC比比CISCCISC少少2 2倍倍-10-10倍倍RISCRISC的速度要比的速度要比CISCCISC快快3 3倍左右倍左右, ,关键是关键是RISCRISC的的CPICPI更小更小4242/75/75RISCRISC设计思想也可以用于设计思想也可以用于CISCCISC中中wx86x86处理机的处理机的CPICPI在不断缩小在不断缩小,80888088的的CPICPI大于大于20208028680286的的CPICPI大约是大约是5.55.58038680386的的CPICPI进一步减小到进一步减小到4 4左右左右8048680486的的CPICPI已经接近已经接近2 2PentiumPentium处理机的处理机的CPICPI已经与已经与RISCRISC十分接近十分接近w目前,超标量处理机、超流水线处理机的目前,超标量处理机、超流水线处理机的CPICPI已经达到已经达到0.50.5,实实际上用际上用IPC(Instruction Per Cycle)IPC(Instruction Per Cycle)更确切。更确切。4343/75/752.3 指令集结构的功能设计1.控制指令是用来改变控制流的。 跳转:当指令是无条件改变控制流时,称之为跳转指令。分支:当控制指令是有条件改变控制流时,则称之为分支指令。 2.能够改变控制流的指令q分支分支q跳转跳转q过程调用过程调用q过程返回过程返回2.3.3 控制指令4444/75/752.3 指令集结构的功能设计1.控制指令的使用频度 (load-storeload-store型指令集结构的机器,基准程序为型指令集结构的机器,基准程序为SPEC CPU2000SPEC CPU2000)指令类型 使用频度 整型平均 浮点平均 调用/返回 19% 8% 跳转 6% 10% 分支 75% 82% 改变控制流的大部分指令是分支指令(条件转移)。 1.常用的3种表示分支条件的方法及其优缺点 名 称 检测分支条件的方法 优 点 缺 点 条件码(CC) 检测由ALU操作设置的一些特殊的位(即CC) 可以自由设置分支条件 条件码是增设的状态。而且它限制了指令的执行顺序,因为要保证条件码能顺利地传送给分支指令 条件寄存器 比较指令把比较结果放入任何一个寄存器,检测时就检测该寄存器 简单 占用了一个寄存器 比较与分支 比较操作是分支指令的一部分,通常这种比较是受到一定限制的 用一条指令(而不是两条)就能实现分支 当采用流水方式时,该指令的操作可能太多,在一拍内做不完 4646/75/752.3 指令集结构的功能设计5.转移目标地址的表示最常用的方法在指令中提供一个偏移量,由该偏移量和程序计数器在指令中提供一个偏移量,由该偏移量和程序计数器(PCPC)的值相加而得出目标地址。的值相加而得出目标地址。(PCPC相对寻址)相对寻址)优点q有效地减少表示该目标地址所需要的位数。有效地减少表示该目标地址所需要的位数。q位置无关(代码可被装载到主存的任意位置执行)。位置无关(代码可被装载到主存的任意位置执行)。关键:确定偏移量字段的长度q模拟结果表明:采用模拟结果表明:采用4 48 8位位的偏移量字段(以指令字的偏移量字段(以指令字为单位)就能表示大多数控制指令的转移目标地址了。为单位)就能表示大多数控制指令的转移目标地址了。4747/75/752.3 指令集结构的功能设计1.过程调用和返回除了要改变控制流之外,可能还要保存机器状态,至少也得保存返回地址(放在专用的链接寄存器或堆栈中)。过去有些指令集结构提供了专门的保存机制来保存许多寄存器的内容。现在较新的指令集结构则要求由编译器生成load和store指令来保存或恢复寄存器的内容。 4848/75/75数据表示:计算机硬件能够直接识别、指令集可以直接调用的数据类型。q所有数据类型中最常用、相对比较简单、用硬件实现比较所有数据类型中最常用、相对比较简单、用硬件实现比较容易的几种。容易的几种。 数据结构:由软件进行处理和实现的各种数据类型。研究:研究:这些数据类型的逻辑结构与物理结构之间的关这些数据类型的逻辑结构与物理结构之间的关 系,并给出相应的算法。系,并给出相应的算法。 系统结构设计者要解决的问题:如何确定数据表示?(软硬件取舍折中的问题)(软硬件取舍折中的问题)2.4 操作数的类型和大小4949/75/752.4 操作数的类型和大小1.表示操作数类型的方法有两种由指令中的操作码指定操作数的类型。带标志符的数据表示。给数据加上标识,由数据本身给出操作数类型。q优点:优点:简化指令集,可由硬件自动实现一致性检查和类型转换,简化指令集,可由硬件自动实现一致性检查和类型转换,缩小了机器语言与高级语言的语义差距,简化编译器等。缩小了机器语言与高级语言的语义差距,简化编译器等。q缺点:缺点:由于需要在执行过程中动态检测标志符,动态开销比较由于需要在执行过程中动态检测标志符,动态开销比较大,所以采用这种方案的机器很少见。大,所以采用这种方案的机器很少见。5050/75/75在B5000大型机中,每个数据有一位标志符在B6500和B7500大型机中,每个数据有三位标志符在R-2巨型机中采用10位标志符5151/75/75R-2R-2巨型机中的标志符巨型机中的标志符 功能位功能位2 2位位:操作数、指令、地址、控制字 陷井位陷井位2 2位位:由软件定义四种捕捉方式 封写位封写位1 1位位:指定数据是只读的还是可读可写 类型位类型位4 4位位:二进制,十进制,定点数,浮点数,复数,字符串,单精度,双精度;绝对地址、相对地址、变址地址、未连接地址等。 校验位校验位1 1位位:奇偶校验位标志符由编译器或其它系统软件建立,对程序员透明标志符由编译器或其它系统软件建立,对程序员透明程序(包括指令和数据)的存储量分析程序(包括指令和数据)的存储量分析: : 数据存储量增加,指令存储量减少数据存储量增加,指令存储量减少5252/75/75例例1 1:假设X处理机的数据不带标志符,其指令字长和数据字长均为32位;Y处理机的数据带标志符,数据字长增加至35位,其中3位是标志符,其指令字长由32位减少至30位。并假设一条指令平均访问两个操作数,每个操作数平均被访问R次。分别计算这两种不同类型的处理机中程序所占用的存储空间。解:解:X和Y处理机程序占用的存储空间总和分别 为: 和5353/75/75 程序占用存储空间的比值: 当R3时,有 , 在实际应用中经常是 R10,即带标志符的处理机所占用的存储空间通常要小。带标志符的处理机所占用的存储空间通常要小。5454/75/75常规常规数据数据表示表示方法方法 与与带标带标志符志符数据数据表示表示方法方法 的的比较比较5555/75/752.4 操作数的类型和大小字符:用ASCII码表示,为一个字节大小。整数:用二进制补码表示,其大小可以是字节、半字或单字。浮点操作数:单精度浮点数(1个字)、双精度浮点数(双字)。一般都采用IEEE 754浮点标准十进制操作数类型q压缩十进制或二进制编码十进制(压缩十进制或二进制编码十进制(BCDBCD码):用码):用4 4位二进制编码位二进制编码表示数字表示数字0 09 9,并将两个十进制数字合并到一个字节中存储。,并将两个十进制数字合并到一个字节中存储。q非压缩十进制:将十进制数直接用字符串来表示。非压缩十进制:将十进制数直接用字符串来表示。2.操作数的大小:操作数的位数或字节数。 主要的大小:字节(主要的大小:字节(8 8位)、半字(位)、半字(1616位)、字(位)、字(3232位)、双字(位)、双字(6464位)位)1.访问不同操作数大小的频度(SPECSPEC基准程序基准程序 )操作数大小 访问频度 整型平均 浮点平均 字节 7% 0% 半字 19% 0% 单字 74% 31% 双字 0% 69% 基准程序对单字和双字的数据访问具有较高的频度。 一台一台3232位的机器应该支持位的机器应该支持8 8、1616、3232位整型操作数以及位整型操作数以及3232位和位和6464位的位的IEEE 754IEEE 754标准的浮点操作数。标准的浮点操作数。5757/75/751.指令由两部分组成:操作码、地址码2.指令格式的设计:确定指令字的编码方式包括操作码字段和地址码字段的编码和表示方式。3.操作码的编码比较简单和直观Huffman编码法减少操作码的平均位数,但所获得的编码是变长的,不减少操作码的平均位数,但所获得的编码是变长的,不规整,不利于硬件处理。规整,不利于硬件处理。 固定长度的操作码保证操作码的译码速度。保证操作码的译码速度。 2.5 指令格式的设计5858/75/75操作码的三种编码方法:操作码的三种编码方法: 固定长度、固定长度、HuffmanHuffman编码、扩展编码编码、扩展编码优化操作码编码的目的:优化操作码编码的目的:节省程序存储空间节省程序存储空间例如:Burroughs公司的B-1700机5959/75/75例例2 2:假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman操作码的信息冗余量。6060/75/75HuffmanHuffman操作码编码操作码编码0.4510.3020.1530.0540.035(0.01+0.01)61.976161/75/75扩展编码法扩展编码法HuffmanHuffman操作码的主要缺点:操作码的主要缺点: 操作码长度很不规整,硬件译码困难操作码长度很不规整,硬件译码困难 与地址码共同组成固定长的指令比较困难与地址码共同组成固定长的指令比较困难扩展编码法扩展编码法:由固定长操作码与Huffman编码法相结合形成例例3:将例2改为1-2-3-5扩展编码法,操作码最短平均长度为: H0.4510.3020.153 (0.050.030.010.01)52.006262/75/75例例4:将例2改为2-4等长扩展编码法,操作码最短平均长度为: H(0.450.300.15)2(0.050.030.010.01)42.206363/75/756464/75/756565/75/752.5 指令格式的设计1.两种表示寻址方式的方法将寻址方式编码于操作码中,由操作码描述相应操作的寻址方式。适合:适合:处理机采用处理机采用l load-storeoad-store结构,寻址方式只有很少几种。结构,寻址方式只有很少几种。设置专门的地址描述符,由地址描述符表示相应操作数的寻址方式。 适合:适合:处理机具有多种寻址方式,且指令有多个操作数。处理机具有多种寻址方式,且指令有多个操作数。6666/75/752.5 指令格式的设计1.考虑因素机器中寄存器的个数和寻址方式的数目对指令平均字长的影响以及它们对目标代码大小的影响。所设计的指令格式便于硬件处理,特别是流水实现。指令字长应该是字节(8位)的整数倍,而不能是随意的位数。2.指令集的3种编码格式 变长编码格式、定长编码格式、混合型编码格式变长编码格式、定长编码格式、混合型编码格式6767/75/752.5 指令格式的设计变长编码格式q当指令集的寻址方式和操作种类很多时,这种编码当指令集的寻址方式和操作种类很多时,这种编码格式是最好的。格式是最好的。q用最少的二进制位来表示目标代码。用最少的二进制位来表示目标代码。q可能会使各条指令的字长和执行时间相差很大。可能会使各条指令的字长和执行时间相差很大。6868/75/752.5 指令格式的设计定长编码格式q将操作类型和寻址方式一起编码到操作码中。将操作类型和寻址方式一起编码到操作码中。q当寻址方式和操作类型非常少时,这种编码格式非当寻址方式和操作类型非常少时,这种编码格式非常好。常好。q可以有效地降低译码的复杂度,提高译码的速度。可以有效地降低译码的复杂度,提高译码的速度。q大部分大部分RISCRISC的指令集均采用这种编码格式。的指令集均采用这种编码格式。6969/75/752.5 指令格式的设计混合型编码格式q提供若干种固定的指令字长。提供若干种固定的指令字长。q以期达到既能够减少目标代码长度又能降低译码复以期达到既能够减少目标代码长度又能降低译码复杂度的目标。杂度的目标。7070/75/75例5:若某机要求有:三地址指令4条,单地址指令255条,零地址指令16条。设指令字长为12位,每个地址码长为3位。问能否以扩展操作码为其编码?如果其中单地址指令为254条呢?说明其理由。7171/75/751.32个64位通用寄存器(GPRs)R0,R1,R31也被称为整数寄存器R0的值永远是02.32个64位浮点数寄存器(FPRs)F0,F1,F312.6 MIPS指令集结构介绍MIPS64的一个子集,简称为MIPS。2.6.1 MIPS的寄存器7272/75/752.6 MIPS指令集结构用来存放32个单精度浮点数(32位),也可以用来存放32个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。1.一些特殊寄存器它们可以与通用寄存器交换数据。例如,浮点状态寄存器用来保存有关浮点操作结果的信息。7373/75/752.6 MIPS指令集结构1.MIPS的数据表示整数字节(字节(8 8位)位) 半字(半字(1616位)位)字(字(3232位)位) 双字(双字(6464位)位)浮点数单精度浮点数(单精度浮点数(3232位)位) 双精度浮点数(双精度浮点数(6464位)位)2.字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的剩余部分。装入以后,对它们将按照64位整数的方式进行运算。2.6.2 MIPS的数据表示7474/75/752.6 MIPS指令集结构1.立即数寻址与偏移量寻址立即数字段和偏移量字段都是16位的。2.寄存器间接寻址是通过把0作为偏移量来实现的3.16位绝对寻址是通过把R0(其值永远为0)作为基址 寄存器来完成的1.MIPS的存储器是按字节寻址的,地址为64位2.所有存储器访问都必须是边界对齐的2.6.3 MIPS的数据寻址方式7575/75/758倍4倍2倍7676/75/752.6 MIPS指令集结构1.寻址方式编码到操作码中2.所有的指令都是32位的3.操作码占6位4.3种指令格式2.6.4 MIPS的指令格式7777/75/752.6 MIPS指令集结构I类指令q包括所有的包括所有的loadload和和storestore指令、立即数指令、,分指令、立即数指令、,分支指令、寄存器跳转指令、寄存器链接跳转指令。支指令、寄存器跳转指令、寄存器链接跳转指令。q立即数字段为立即数字段为1616位,用于提供立即数或偏移量。位,用于提供立即数或偏移量。7878/75/752.6 MIPS指令集结构qloadload指令指令 访存有效地址:访存有效地址:RegsrsRegsrs immediateimmediate 从存储器取来的数据放入寄存器从存储器取来的数据放入寄存器rtrtqstorestore指令指令 访存有效地址:访存有效地址:RegsrsRegsrs immediateimmediate 要存入存储器的数据放在寄存器要存入存储器的数据放在寄存器rtrt中中q立即数指令立即数指令 RegsrtRegsrt RegsrsRegsrs op immediate op immediateq分支指令分支指令 转移目标地址:转移目标地址:RegsrsRegsrs immediateimmediate,rtrt无用无用q寄存器跳转、寄存器跳转并链接寄存器跳转、寄存器跳转并链接 转移目标地址为转移目标地址为RegsrsRegsrs 7979/75/752.6 MIPS指令集结构R类指令q包括包括ALUALU指令、专用寄存器读指令、专用寄存器读/ /写指令、写指令、movemove指令等。指令等。qALUALU指令指令 RegsrdRegsrd RegsrsRegsrs funcfunc RegsrtRegsrt funcfunc为具体的运算操作编码为具体的运算操作编码8080/75/752.6 MIPS指令集结构J类指令q包括跳转指令、跳转并链接指令、自陷指令、异常返回包括跳转指令、跳转并链接指令、自陷指令、异常返回指令。指令。q在这类指令中,指令字的低在这类指令中,指令字的低2626位是偏移量,它与位是偏移量,它与PCPC值相值相加形成跳转的地址。加形成跳转的地址。8181/75/758282/75/758383/75/75SPECIAL操作码对应操作码对应Function段编码段编码 8484/75/75SPECIAL2操作码对应操作码对应Function段编码段编码 8585/75/75REGIMM操作码对应操作码对应rt段编码段编码 COP0 中中 rs 段编码段编码 8686/75/75COP0 中中 rs为为CO时时funciton段编码段编码8787/75/752.6 MIPS指令集结构1.MIPS指令可以分为四大类qloadload和和storestoreqALUALU操作操作q分支与跳转分支与跳转q浮点操作浮点操作2.符号的意义 xny:从y传送n位到xx,yz:把z传送到x和y 2.6.5 MIPS的操作8888/75/752.6 MIPS指令集结构下标:表示字段中具体的位;q对于指令和数据,按从最高位到最低位(即从左到右)对于指令和数据,按从最高位到最低位(即从左到右)的顺序依次进行编号,最高位为第的顺序依次进行编号,最高位为第0 0位,次高位为第位,次高位为第1 1位,依此类推。位,依此类推。q下标可以是一个数字,也可以是一个范围。下标可以是一个数字,也可以是一个范围。例如:例如:RegsR4RegsR40 0:寄存器寄存器R4R4的符号位的符号位 RegsR4RegsR456.6356.63:R4R4的最低字节的最低字节Mem:表示主存;q按字节寻址,可以传输任意个字节。按字节寻址,可以传输任意个字节。上标:用于表示对字段进行复制的次数。例如:例如:0 0 3232:一个:一个3232位长的全位长的全0 0字段字段8989/75/752.6 MIPS指令集结构符号#:用于两个字段的拼接,并且可以出现在数据传送的任何一边。举例举例:R8R8、R10R10:6464位的寄存器,则位的寄存器,则RegsR8RegsR832.6332.63 3232 (MemMem RegsR6 RegsR60 0)2424 # # MemMem RegsR6 RegsR6表示的意义是:表示的意义是:以以R6R6的内容作为地址访问内存,得到的字节按符号位扩展的内容作为地址访问内存,得到的字节按符号位扩展为为3232位后存入位后存入R8R8的低的低3232位,位,R8R8的高的高3232位(即位(即RegsR8RegsR80.310.31)不变。不变。 3.load和store指令指令举例 指令名称 含 义 LD R2,20(R3) 装入双字 RegsR264 Mem20+RegsR3 LW R2,40(R3) 装入字 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 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 1.ALU指令寄存器寄存器- -寄存器型(寄存器型(RRRR型)指令或立即数型型)指令或立即数型算术和逻辑操作:加、减、与、或、异或和移位等算术和逻辑操作:加、减、与、或、异或和移位等指令举例 指令名称 含义 DADDUR1,R2,R3 无符号加 RegsR1 RegsR2+ RegsR3 DADDIU R4,R5,#6 加无符号立即数 RegsR4 RegsR5+6 LUIR1,#4 把立即数装入到一个字的高16位 RegsR1 032 # 4 # 016DSLLR1,R2,#5 逻辑左移 RegsR1 RegsR25 DSLT R1,R2,R3 置小于 If(RegsR2 RegsR3)RegsR1 1 else RegsR10 9292/75/752.6 MIPS指令集结构R0的值永远是0,它可以用来合成一些常用的操作。例如:DADDIU R1DADDIU R1,R0R0,#100#100 / /给寄存器给寄存器R1R1装入常数装入常数100100DADD R1DADD R1,R0R0,R2R2 / /把寄存器把寄存器R2R2中的数据传送到寄存器中的数据传送到寄存器R1R19393/75/752.6 MIPS指令集结构1.由一组跳转和一组分支指令来实现控制流的改变2.典型的MIPS控制指令2.6.6 MIPS的控制指令指令举例 指令名称 含义 J name 跳转 PC 3663 name2JAL name 跳转并链接 RegsR31PC+4;PC 3663name2;(PC+4)227)name(PC+4)+227) JALR R3 寄存器跳转并链接 RegsR31PC+4;PC RegsR3 JR R5 寄存器跳转 PC RegsR5 BEQZ R4,name 等于零时分支 if(RegsR4= 0) PCname ;(PC+4)217)name(PC+4)+217) BNE R3,R4,name 不相等时分支 if(RegsR3!= RegsR4) PCname(PC+4)217)name(PC+4)+217) MOVZ R1,R2,R3 等于零时移动 if(RegsR3=0) RegsR1 RegsR2 9595/75/752.6 MIPS指令集结构3.跳转指令根据跳转指令确定目标地址的方式不同以及跳转时是否链接,可以把跳转指令分成4种。确定目标地址的方式q把指令中的把指令中的2626位偏移量左移位偏移量左移2 2位(因为指令字长都是位(因为指令字长都是4 4个字节)后,替换程序计数器的低个字节)后,替换程序计数器的低2828位。位。q间接跳转:由指令中指定的一个寄存器来给出转移目间接跳转:由指令中指定的一个寄存器来给出转移目标地址。标地址。跳转的两种类型q简单跳转:简单跳转:把目标地址送入程序计数器。把目标地址送入程序计数器。q跳转并链接:跳转并链接:把目标地址送入程序计数器,把返回地把目标地址送入程序计数器,把返回地址(即顺序下一条指令的地址)放入寄存器址(即顺序下一条指令的地址)放入寄存器R31R31。9696/75/752.6 MIPS指令集结构4.分支指令(条件转移)分支条件由指令确定。例如:例如:测试某个寄存器的值是否为零测试某个寄存器的值是否为零提供一组比较指令,用于比较两个寄存器的值。例如:例如:“置小于置小于”指令指令有的分支指令可以直接判断寄存器内容是否为负,或者比较两个寄存器是否相等。分支的目标地址。由由1616位带符号偏移量左移两位后和位带符号偏移量左移两位后和PCPC相加的结果来决定相加的结果来决定一条浮点条件分支指令:通过测试浮点状态寄存器来决定是否进行分支。9797/75/752.6 MIPS指令集结构1.由操作码指出操作数是单精度(SP)或双精度(DP)后缀S:表示操作数是单精度浮点数后缀D:表示是双精度浮点数2.浮点操作包括加、减、乘、除,分别有单精度和双精度指令。3.浮点数比较指令根据比较结果设置浮点状态寄存器中的某一位,以便于后面的分支指令BC1T(若真则分支)或BC1F(若假则分支)测试该位,以决定是否进行分支。2.6.7 MIPS的浮点操作9898/75/75作作 业业1.某机指令字长16位。设有单地址指令和双地址指令两类。若每个地址字段均为6位,且双地址指令有x条。问单地址指令最多可以有多少条?9999/75/752.某模型机有9条指令,其使用频度为: ADD(加) 30% SUB(减)24% JOM(按负转移)6 STO(存) 7% JMP(转移)7% SHR(右移) 2% CIL(循环左移) 3% CLA(清加)20% STP(停机) 1%要求有两种指令字长,都按双操作数指令格式编排。采用扩展操作码,并限制只能有两种操作码码长。设该机有若干个通用寄存器。主存为16位宽,按字节编址,采用按整数边界存贮,任何指令都在一个主存周期中取得。短指令为寄存器寄存器型,长指令为寄存器主存型。主存地址应能变址寻址。 (1)仅根据使用频度,不考虑其它要求,设计出Huffman操作码,并计算其平均码长; (2)考虑题目全部要求,设计优化实用的操作码形式,并计算其操作码的平均码长; (3)该机允许使用多少个可编址的通用寄存器? (4)画出该机两种指令字格式,标出各字段之位数; (5)指出访存操作数地址寻址的最大相对位移量为多少个字节。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号