计算机体系结构(张晨曦)第1章.ppt

上传人:zhu****ei 文档编号:3590217 上传时间:2019-12-18 格式:PPT 页数:75 大小:764KB
返回 下载 相关 举报
计算机体系结构(张晨曦)第1章.ppt_第1页
第1页 / 共75页
计算机体系结构(张晨曦)第1章.ppt_第2页
第2页 / 共75页
计算机体系结构(张晨曦)第1章.ppt_第3页
第3页 / 共75页
点击查看更多>>
资源描述
第2章计算机指令集结构张晨曦刘依www.GotoSxzhang2000,2.1指令集结构的分类2.2寻址方式2.3指令集结构的功能设计2.4操作数的类型和大小2.5指令格式的设计2.6MIPS指令集结构,区别不同指令集结构的主要因素CPU中用来存储操作数的存储单元的类型CPU中用来存储操作数的存储单元的主要类型堆栈累加器通用寄存器组将指令集结构分为三种类型,2.1指令集结构的分类,2.1指令集结构的分类,堆栈结构累加器结构通用寄存器结构根据操作数的来源不同,又可进一步分为:寄存器-存储器结构(RM结构)(操作数可以来自存储器)寄存器-寄存器结构(RR结构)(所有操作数都是来自通用寄存器组)也称为load-store结构,这个名称强调:只有load指令和store指令能够访问存储器。,2.1指令集结构的分类,对于不同类型的指令集结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同。显式给出:用指令字中的操作数字段给出隐式给出:使用事先约定好的存储单元4种指令集结构的操作数的位置以及结果的去向,灰色块:操作数黑色块:结果TOS(TopOfStack):栈顶,2.1指令集结构的分类,例:表达式C=A+B在4种类型指令集结构上的代码。假设:A、B、C均保存在存储器单元中,并且不能破坏A和B的值。,2.1指令集结构的分类,通用寄存器结构现代指令集结构的主流在灵活性和提高性能方面有明显的优势跟其他的CPU内部存储单元一样,寄存器的访问速度比存储器快。对编译器而言,能更加容易、有效地分配和使用寄存器。寄存器可以用来存放变量。(1)减少对存储器的访问,加快程序的执行速度;(因为寄存器比存储器快),2.1指令集结构的分类,(2)用更少的地址位(相对于存储器地址来说)来对寄存器进行寻址,从而有效地减少程序的目标代码的大小。根据ALU指令的操作数的两个特征对通用寄存器型指令集结构进一步细分ALU指令的操作数个数3个操作数的指令两个源操作数、一个目的操作数2个操作数的指令其中一个操作数既作为源操作数,又作为目的操作数。,2.1指令集结构的分类,ALU指令中存储器操作数的个数可以是0中的某一个,为0表示没有存储器操作数。,ALU指令中操作数个数和存储器操作数个数的典型组合,2.1指令集结构的分类,通用寄存器型指令集结构进一步细分为3种类型寄存器-寄存器型(RR型)寄存器-存储器型(RM型)存储器-存储器型(MM型)3种通用寄存器型指令集结构的优缺点表中(m,n)表示指令的n个操作数中有m个存储器操作数。,一种指令集结构如何确定所要访问的数据的地址?当前的指令集结构中所采用的一些操作数寻址方式:赋值操作Mem:存储器Regs:寄存器组方括号:表示内容Mem:存储器的内容Regs:寄存器的内容MemRegsR1:以寄存器R1中的内容作为地址的存储器单元中的内容,2.2寻址方式,2.2寻址方式,采用多种寻址方式可以显著地减少程序的指令条数,但可能增加计算机的实现复杂度以及指令的CPI。,2.2寻址方式,立即数寻址方式和偏移寻址方式的使用频度最高。,各种寻址方式的使用情况统计结果在VAX机器上运行gcc、Spice和Tex基准程序,2.2寻址方式,偏移量的取值范围在load-store结构的机器(Alpha)上运行SPECCPU2000基准程序,2.2寻址方式,从该图可以看出:程序所使用的偏移量大小分布十分广泛主要是因为在存储器中所保存的数据并不是十分集中,需要使用不同的偏移量才能对其进行访问。较小的偏移量和较大的偏移量均占有相当大的比例,2.2寻址方式,立即数寻址方式立即数寻址方式的使用频度,大约1/4的load指令和ALU指令采用了立即数寻址。,2.2寻址方式,立即数的取值范围,2.2寻址方式,最常用的是较小的立即数;有时也会用到较大的立即数(主要是用于地址计算)。在指令集结构设计中,至少要将立即数的大小设置为816位。在VAX机(支持32位立即数)上做过类似的统计,结果表明20%25%的立即数超过16位。,指令集结构的功能设计确定软、硬件功能分配,即确定哪些基本功能应该由硬件实现,哪些功能由软件实现比较合适。在确定哪些基本功能用硬件来实现时,主要考虑3个因素:速度、成本、灵活性硬件实现的特点速度快、成本高、灵活性差软件实现的特点速度慢、价格便宜、灵活性好,2.3指令集结构的功能设计,2.3指令集结构的功能设计,对指令集的基本要求完整性、规整性、高效率、兼容性完整性:在一个有限可用的存储空间内,对于任何可解的问题,编制计算程序时,指令集所提供的指令足够用。要求指令集功能齐全、使用方便下表为许多指令集结构都包含的一些指令类型前4类属于通用计算机系统的基本指令对于最后4种类型的操作,不同指令集结构的支持大不相同。,2.3指令集结构的功能设计,2.3指令集结构的功能设计,规整性:主要包括对称性和均匀性。对称性:所有与指令集有关的存储单元的使用、操作码的设置等都是对称的。例如:在存储单元的使用上,所有通用寄存器都要同等对待。在操作码的设置上,如果设置了A-B的指令,就应该也设置B-A的指令。均匀性:指对于各种不同的操作数类型、字长、操作种类和数据存储单元,指令的设置都要同等对待。例如:如果某机器有5种数据表示,4种字长,两种存储单元,则要设置542=40种同一操作的指令。,2.3指令集结构的功能设计,高效率:指指令的执行速度快、使用频度高。在设计指令集结构时,有两种截然不同的设计策略。(产生了两类不同的计算机系统)CISC(复杂指令集计算机)增强指令功能,把越来越多的功能交由硬件来实现,并且指令的数量也是越来越多。RISC(精简指令集计算机)尽可能地把指令集简化,不仅指令的条数少,而且指令的功能也比较简单。,2.3指令集结构的功能设计,CISC结构追求的目标强化指令功能,减少程序的指令条数,以达到提高性能的目的。增强指令功能主要是从以下几个方面着手:面向目标程序增强指令功能增强运算型指令的功能增强数据传送指令的功能增强程序控制指令的功能丰富的程序控制指令为编程提供了多种选择。,2.3.1CISC指令集结构的功能设计,2.3指令集结构的功能设计,例如:循环在程序中占有相当大的比例,所以在指令上提供专门的支持。循环控制部分通常用3条指令完成:一条加法指令一条比较指令一条分支指令设置循环控制指令,用一条指令完成上述3条指令的功能。,一般循环程序的结构,2.3指令集结构的功能设计,面向高级语言的优化实现来改进指令集(缩小高级语言与机器语言的语义差距)高级语言与一般的机器语言的语义差距非常大,为高级语言程序的编译带来了一些问题。(1)编译器本身比较复杂。(2)编译生成的目标代码比较难以达到很好的优化。,2.3指令集结构的功能设计,2.3指令集结构的功能设计,增强对高级语言和编译器的支持对源程序中各种高级语言语句的使用频度进行统计与分析,对使用频度高、执行时间长的语句,增强有关指令的功能,加快这些指令的执行速度,或者增加专门的指令,可以达到减少目标程序的执行时间和减少目标程序长度的目的。增强系统结构的规整性,减少系统结构中的各种例外情况。(面向高级语言的计算机),2.3指令集结构的功能设计,高级语言计算机间接执行高级语言机器高级语言成为机器的汇编语言,这时高级语言和机器语言是一一对应的。用汇编的方法把高级语言源程序翻译成机器语言程序。直接执行高级语言的机器直接把高级语言作为机器语言,直接由固件/硬件对高级语言源程序的语句逐条进行解释执行。这时既不用编译,也不用汇编。,2.3指令集结构的功能设计,面向操作系统的优化实现改进指令集操作系统和计算机系统结构是紧密联系的,操作系统的实现在很大程度上取决于系统结构的支持。指令集对操作系统的支持主要有:处理机工作状态和访问方式的切换。进程的管理和切换。存储管理和信息保护。进程的同步与互斥,信号灯的管理等。支持操作系统的有些指令属于特权指令,一般用户程序是不能使用的。,2.3指令集结构的功能设计,CISC指令集结构存在的问题(1979年开始,Patterson等人的研究)各种指令的使用频度相差悬殊据统计:只有20的指令使用频度比较高,占运行时间的80,而其余80的指令只在20的运行时间内才会用到。使用频度高的指令也是最简单的指令。,2.3.2RISC指令集结构的功能设计,Intel80 x86最常用的10条指令,2.3指令集结构的功能设计,指令集庞大,指令条数很多,许多指令的功能又很复杂,使得控制器硬件非常复杂。导致的问题:占用了大量的芯片面积(如占用CPU芯片总面积的一半以上),给VLSI设计造成很大的困难;增加了研制时间和成本,容易造成设计错误。许多指令由于操作繁杂,其CPI值比较大,执行速度慢。采用这些复杂指令有可能使整个程序的执行时间反而增加。由于指令功能复杂,规整性不好,不利于采用流水技术来提高性能。,2.3指令集结构的功能设计,设计RISC机器遵循的原则指令条数少而简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令。采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位。指令的执行在单个机器周期内完成。(采用流水线机制)只有load和store指令才能访问存储器,其他指令的操作都是在寄存器之间进行。(即采用load-store结构)大多数指令都采用硬连逻辑来实现。,2.3指令集结构的功能设计,强调优化编译器的作用,为高级语言程序生成优化的代码。充分利用流水技术来提高性能。早期的RISC微处理器1981年,Berkeley分校的Patterson等人的32位微处理器RISCI:31条指令,指令字长都是32位,78个通用寄存器,时钟频率为8MHz;控制部分所占的芯片面积只有约6%。商品化微处理器MC68000和Z8000分别为50%和53%;性能比MC68000和Z8000快34倍。,2.3指令集结构的功能设计,1983年的RISC:指令条数为39,通用寄存器个数为138,时钟频率为12MHz。后来发展成了Sun公司的SPARC系列微处理器。1981年,Stanford大学Hennessy等人的MIPS后来发展成了MIPSRxxx系列微处理器。IBM的801共同特点:采用load-store结构指令字长为32位采用高效的流水技术,2.3指令集结构的功能设计,控制指令是用来改变控制流的。跳转:当指令是无条件改变控制流时,称之为跳转指令。分支:当控制指令是有条件改变控制流时,则称之为分支指令。能够改变控制流的指令分支跳转过程调用过程返回,2.3.3控制指令,2.3指令集结构的功能设计,控制指令的使用频度(load-store型指令集结构的机器,基准程序为SPECCPU2000),改变控制流的大部分指令是分支指令(条件转移)。,常用的3种表示分支条件的方法及其优缺点,2.3指令集结构的功能设计,转移目标地址的表示最常用的方法在指令中提供一个偏移量,由该偏移量和程序计数器(PC)的值相加而得出目标地址。(PC相对寻址)优点有效地减少表示该目标地址所需要的位数。位置无关(代码可被装载到主存的任意位置执行)。关键:确定偏移量字段的长度模拟结果表明:采用48位的偏移量字段(以指令字为单位)就能表示大多数控制指令的转移目标地址了。,2.3指令集结构的功能设计,过程调用和返回除了要改变控制流之外,可能还要保存机器状态,至少也得保存返回地址(放在专用的链接寄存器或堆栈中)。过去有些指令集结构提供了专门的保存机制来保存许多寄存器的内容。现在较新的指令集结构则要求由编译器生成load和store指令来保存或恢复寄存器的内容。,数据表示:计算机硬件能够直接识别、指令集可以直接调用的数据类型。所有数据类型中最常用、相对比较简单、用硬件实现比较容易的几种。数据结构:由软件进行处理和实现的各种数据类型。研究:这些数据类型的逻辑结构与物理结构之间的关系,并给出相应的算法。系统结构设计者要解决的问题:如何确定数据表示?(软硬件取舍折中的问题),2.4操作数的类型和大小,2.4操作数的类型和大小,表示操作数类型的方法有两种由指令中的操作码指定操作数的类型。带标志符的数据表示。给数据加上标识,由数据本身给出操作数类型。优点:简化指令集,可由硬件自动实现一致性检查和类型转换,缩小了机器语言与高级语言的语义差距,简化编译器等。缺点:由于需要在执行过程中动态检测标志符,动态开销比较大,所以采用这种方案的机器很少见。操作数的大小:操作数的位数或字节数。主要的大小:字节(8位)、半字(16位)字(32位)、双字(64位),2.4操作数的类型和大小,字符:用ASCII码表示,为一个字节大小。整数:用二进制补码表示,其大小可以是字节、半字或单字。浮点操作数:单精度浮点数(1个字)、双精度浮点数(双字)。一般都采用IEEE754浮点标准十进制操作数类型压缩十进制或二进制编码十进制(BCD码):用4位二进制编码表示数字09,并将两个十进制数字合并到一个字节中存储。非压缩十进制:将十进制数直接用字符串来表示。,访问不同操作数大小的频度(SPEC基准程序),基准程序对单字和双字的数据访问具有较高的频度。一台32位的机器应该支持8、16、32位整型操作数以及32位和64位的IEEE754标准的浮点操作数。,指令由两部分组成:操作码、地址码指令格式的设计确定指令字的编码方式,包括操作码字段和地址码字段的编码和表示方式。操作码的编码比较简单和直观Huffman编码法减少操作码的平均位数,但所获得的编码是变长的,不规整,不利于硬件处理。固定长度的操作码保证操作码的译码速度。,2.5指令格式的设计,2.5指令格式的设计,两种表示寻址方式的方法将寻址方式编码于操作码中,由操作码描述相应操作的寻址方式。适合:处理机采用load-store结构,寻址方式只有很少几种。设置专门的地址描述符,由地址描述符表示相应操作数的寻址方式。适合:处理机具有多种寻址方式,且指令有多个操作数。,2.5指令格式的设计,考虑因素机器中寄存器的个数和寻址方式的数目对指令平均字长的影响以及它们对目标代码大小的影响。所设计的指令格式便于硬件处理,特别是流水实现。指令字长应该是字节(8位)的整数倍,而不能是随意的位数。指令集的3种编码格式变长编码格式、定长编码格式、混合型编码格式,2.5指令格式的设计,变长编码格式当指令集的寻址方式和操作种类很多时,这种编码格式是最好的。用最少的二进制位来表示目标代码。可能会使各条指令的字长和执行时间相差很大。,2.5指令格式的设计,定长编码格式将操作类型和寻址方式一起编码到操作码中。当寻址方式和操作类型非常少时,这种编码格式非常好。可以有效地降低译码的复杂度,提高译码的速度。大部分RISC的指令集均采用这种编码格式。,2.5指令格式的设计,混合型编码格式提供若干种固定的指令字长。以期达到既能够减少目标代码长度又能降低译码复杂度的目标。,32个64位通用寄存器(GPRs)R0,R1,R31也被称为整数寄存器R0的值永远是032个64位浮点数寄存器(FPRs)F0,F1,F31,2.6MIPS指令集结构,介绍MIPS64的一个子集,简称为MIPS。,2.6.1MIPS的寄存器,2.6MIPS指令集结构,用来存放32个单精度浮点数(32位),也可以用来存放32个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。一些特殊寄存器它们可以与通用寄存器交换数据。例如,浮点状态寄存器用来保存有关浮点操作结果的信息。,2.6MIPS指令集结构,MIPS的数据表示整数字节(8位)半字(16位)字(32位)双字(64位)浮点数单精度浮点数(32位)双精度浮点数(64位)字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的剩余部分。装入以后,对它们将按照64位整数的方式进行运算。,2.6.2MIPS的数据表示,2.6MIPS指令集结构,立即数寻址与偏移量寻址立即数字段和偏移量字段都是16位的。寄存器间接寻址是通过把0作为偏移量来实现的16位绝对寻址是通过把R0(其值永远为0)作为基址寄存器来完成的MIPS的存储器是按字节寻址的,地址为64位所有存储器访问都必须是边界对齐的,2.6.3MIPS的数据寻址方式,2.6MIPS指令集结构,寻址方式编码到操作码中所有的指令都是32位的操作码占6位3种指令格式,2.6.4MIPS的指令格式,2.6MIPS指令集结构,I类指令包括所有的load和store指令、立即数指令、,分支指令、寄存器跳转指令、寄存器链接跳转指令。立即数字段为16位,用于提供立即数或偏移量。,2.6MIPS指令集结构,load指令访存有效地址:Regsrsimmediate从存储器取来的数据放入寄存器rtstore指令访存有效地址:Regsrsimmediate要存入存储器的数据放在寄存器rt中立即数指令RegsrtRegsrsopimmediate分支指令转移目标地址:Regsrsimmediate,rt无用寄存器跳转、寄存器跳转并链接转移目标地址为Regsrs,2.6MIPS指令集结构,R类指令包括ALU指令、专用寄存器读/写指令、move指令等。ALU指令RegsrdRegsrsfunctRegsrtfunc为具体的运算操作编码,2.6MIPS指令集结构,J类指令包括跳转指令、跳转并链接指令、自陷指令、异常返回指令。在这类指令中,指令字的低26位是偏移量,它与PC值相加形成跳转的地址。,2.6MIPS指令集结构,MIPS指令可以分为四大类load和storeALU操作分支与跳转浮点操作符号的意义xny:从y传送n位到xx,yz:把z传送到x和y,2.6.5MIPS的操作,2.6MIPS指令集结构,下标:表示字段中具体的位;对于指令和数据,按从最高位到最低位(即从左到右)的顺序依次进行编号,最高位为第0位,次高位为第1位,依此类推。下标可以是一个数字,也可以是一个范围。例如:RegsR40:寄存器R4的符号位RegsR456.63:R4的最低字节Mem:表示主存;按字节寻址,可以传输任意个字节。上标:用于表示对字段进行复制的次数。例如:032:一个32位长的全0字段,2.6MIPS指令集结构,符号#:用于两个字段的拼接,并且可以出现在数据传送的任何一边。举例:R8、R10:64位的寄存器,则RegsR832.6332(MemRegsR60)24#MemRegsR6表示的意义是:以R6的内容作为地址访问内存,得到的字节按符号位扩展为32位后存入R8的低32位,R8的高32位(即RegsR80.31)不变。,load和store指令,ALU指令寄存器-寄存器型(RR型)指令或立即数型算术和逻辑操作:加、减、与、或、异或和移位等,2.6MIPS指令集结构,R0的值永远是0,它可以用来合成一些常用的操作。例如:DADDIUR1,R0,#100/给寄存器R1装入常数100DADDR1,R0,R2/把寄存器R2中的数据传送到寄存器R1,2.6MIPS指令集结构,由一组跳转和一组分支指令来实现控制流的改变典型的MIPS控制指令,2.6.6MIPS的控制指令,2.6MIPS指令集结构,跳转指令根据跳转指令确定目标地址的方式不同以及跳转时是否链接,可以把跳转指令分成4种。确定目标地址的方式把指令中的26位偏移量左移2位(因为指令字长都是4个字节)后,替换程序计数器的低28位。间接跳转:由指令中指定的一个寄存器来给出转移目标地址。跳转的两种类型简单跳转:把目标地址送入程序计数器。跳转并链接:把目标地址送入程序计数器,把返回地址(即顺序下一条指令的地址)放入寄存器R31。,2.6MIPS指令集结构,分支指令(条件转移)分支条件由指令确定。例如:测试某个寄存器的值是否为零提供一组比较指令,用于比较两个寄存器的值。例如:“置小于”指令有的分支指令可以直接判断寄存器内容是否为负,或者比较两个寄存器是否相等。分支的目标地址。由16位带符号偏移量左移两位后和PC相加的结果来决定一条浮点条件分支指令:通过测试浮点状态寄存器来决定是否进行分支。,2.6MIPS指令集结构,由操作码指出操作数是单精度(SP)或双精度(DP)后缀S:表示操作数是单精度浮点数后缀D:表示是双精度浮点数浮点操作包括加、减、乘、除,分别有单精度和双精度指令。浮点数比较指令根据比较结果设置浮点状态寄存器中的某一位,以便于后面的分支指令BC1T(若真则分支)或BC1F(若假则分支)测试该位,以决定是否进行分支。,2.6.7MIPS的浮点操作,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!