MIPS系统指令系统超详细

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

3.1概述3.2计算机硬件的操作3.3计算机硬件的操作数3.4指令的计算机内部表示3.5决策指令3.6计算机硬件对过程的支持3.7计算机对字符的处理(略去)3.8MIPS的其他寻址方式第三章指令系统3.1概述要给计算机硬件直接下命令,就必须使用机器的语言。机器语言中的“单词”称为指令,其“词汇表”称为指令集。本章将介绍现实中计算机所使用的指令集系统。通过学习机器指令,你会了解到计算机中的一个重要概念:存储程序(stored-rogram)着重介绍的是MIPS指令集,涉及到MIPS指令的操作数、指令格式及指令类别1、CISC---复杂指令系统计算机ComplexInstructionSetComputer,20世纪60年代后期,随着IC、LSI、VLSI的出现和发展,计算机硬件成本不断下降,人们热衷于在指令系统真增加更多的指令和复杂的指令,来提高操作系统的效率,促使指令系统越来越复杂,这一时期的计算机称为CISC。2、RISC---精简指令系统计算机ReducedInstructionSetComputer,1975年IBM公司开始研究指令系统的合理性问题,IBM的JohnCocke提出精简指令的想法,本书作者DavidA.Patterson创造了RISC一词,并定义了其含义,后来JohnL.Hennessy带领他在斯坦福的研究小组研制成功MIPS机,精简指令系统计算机从此诞生并发展起来。一、指令系统的发展二、RISC的特点1、优先选取一些使用频率最高的简单指令,以及一些很有用但不复杂的指令,避免复杂指令。2、指令长度固定,指令格式种类少,寻址方式种类少,指令各字段的划分比较一致,各字段功能较规整。3、只有存数、取数指令访问存储器,其余指令的操作都在寄存器之间进行。4、CPU中通用寄存器数量较多。三、MIPS简介1、处理器的缩写①MillionInstructionPerSecond,泛指每秒能执行百万条指令的处理器②MicroprocessorwithoutInterlockingPipelineStage,一种无内锁的流水线微处理器2、MIPS公司3.2计算机硬件的操作指令一、指令的基本格式指令格式,是指令用二进制代码表示的结构形式,通常有操作码字段和地址码字段组成。操作码表示指令的操作特性和功能,而地址码通常指定参与操作的操作数的地址,故指令基本格式如下:OPA1、操作码操作码字段的位数取决于指令系统的规模,例如,只有8条指令的指令系统,OP字段有3位就够了,如果系统包含32条指令,则OP字段需要5位操作码。一般来说一个包含n位的操作码能够表示2n条指令。2、地址码根据一条指令中有几个操作数地址,可将该指令称为几地址指令,一般有三地址指令、二地址指令、一地址指令和零地址指令格式:OPAOPA2A1OPA2A1A3OP1、加法指令addrd,rs,rt#注释①每条指令只执行一个操作,并且有且只有三个变量②书写时,每一行只有一条指令,注释放在行尾,由#号引出③该指令执行rd=rs+rt的操作例如:adda,b,c#b+c的和存放在a中其中add称操作符,表示加运算;紧跟add的a是目的操作数,即为结果,其余b、c表示源操作数。每条指令中由“#”号领头的部分是注释。三、MIPS算术运算指令例如:计算a=b+c+d+e;adda,b,c#b+c的和存放在a中adda,a,d#b+c+d的和已存放在a中adda,a,e#b+c+d+e的和已存放在a中2、减法指令subrd,rs,rt#注释例3.1把两个C语言赋值语句编译成MIPS汇编指令下面这段C语言代码包含5个变量a,b,c,d,e:a=b+c;d=a–e;【解答】adda,b,c#a=b+csubd,a,e#d=a–e例3.2把一个复杂的C语言赋值语句编译成MIPS汇编指令f=(g+h)–(i+j);【解答】addt0,g,h#临时变量t0=g+h的和addt1,i,j#临时变量t1=i+j的和最后做减法,把差放在f中:subf,t0,t1#f=t0-t1的值完成一个类似于加法的操作需要3个操作数:2个数参与运算,1个数存放结果。每条指令刚好包含3个操作数,不多也不少,这是遵循简化硬件的原则,因为操作数的个数不定的硬件实现比个数固定的硬件实现复杂得多。这就是硬件设计要考虑的第一条原则:设计原则1:简单性来自规则性。(Simplicityfavorsregularity.)3.3计算机硬件的操作数cpu的寄存器(register)中---寄存器操作数寄存器是建造计算机的基石,因为它们是硬件设计中用到的基本单元,对于程序员也是可见的,但其数量有限。计算机硬件的操作数放在什么地方?存储器中---存储器操作数复杂数据结构,如数组、结构体等包含大量数据元素,不可能映射到数量有限的寄存器上,只能存储到存储器中。指令中---立即数有些操作数直接与指令存放在一起,称为立即数,而MIPS中专门设置有一些立即数指令,如addi,slti等。一、MIPS的寄存器在MIPS体系结构中,一个寄存器的长度是32位;又称32位为字长。MIPS体系中的数据字、指令字都是32位。MIPS寄存器汇编符号记为$s0、$s1、$s2、$s3…$s7,对应编码为:16、17、…23;以及$t0、$t1、$t2、$t3…$t7,对应编码为:8、9、…15。寄存器和编程语言的变量的一个主要区别是,寄存器数量有限,现在的计算机中一般是32个。MIPS也只有32个寄存器。为什么限于32个寄存器?原因可以从硬件设计的第二条原则找到:设计原则2:越小越快。(Smallerisfaster.)寄存器的数量如果很大,则电信号需要传输的距离更长,因而时钟周期也会变得很长。例3.3使用寄存器编译C语言赋值语句以上例C语言赋值语句为例:f=(g+h)–(i+j);为变量f,g,h,i,j分别指定寄存器$s0,$s1,$s2,$s3,$s4而临时变量指定寄存器$t0,$t1,则MIPS汇编符号指令:add$t0,$s1,$s2#寄存器$t0中包含g+h的和add$t1,$s3,$s4#寄存器$t1中包含i+j的和sub$s0,$t0,$t1#$t0-$t1的差放入f中硬件/软件接口编译器不仅把变量同寄存器联系起来,还为数组和结构这样的数据结构分配内存空间。这样,编译器就能把恰当的基地址放入数据传送指令中。二、操作数在内存单元中计算机如何表示和存取数组这样的复杂数据结构呢?处理器只能在寄存器中保存很少的数据,而内存则可以存放数以百万计的数据单元。因此,数组这样的数据结构存放在内存中。内存单元用地址编号表示,叫内存地址,例:实际MIPS内存地址:一个字=4字节表示,按字节编址:字节寻址还影响数组的索引。要得到正确的地址,加到基址上的偏移量应该乘以4。三、数据传送指令:LW与SW1、取字指令(LoadWord)LW指令格式:Lwrt,offset(rs)#注释①offset为偏移量,是数组首地址到数组中某元素存储位置的字节偏移量,是一个常数。②rs是存储数组首地址的寄存器,称为基址寄存器③rt为目的操作数寄存器,存放取自【(rs)+offset】的数据注意:offset(rt)表示存放数据的内存单元地址,即内存地址。例3.4编译有一个操作数在内存中的C语言赋值语句:g=h+A[8];设数组A[100]【解答】操作数A[8]在内存中,首先得把它转移到寄存器中。它的地址是数组A的基地址加上8*4的和。假设$s3存放数组A的基地址,g对应$s1寄存器,h对应$s2寄存器。lw$t0,32($s3)#临时寄存器$t0存放A[8]的值add$s1,$s2,$t0#g=h+A[8]数据传送指令中的常量称为偏移量(offset),用来计算地址的寄存器称为基地址寄存器(baseregister)。内存有效地址EA=offset(偏移量)+rs(基地址寄存器)2、存字指令(StoreWord)SW例3.5使用取指令和存储指令进行编译:C语句:A[12]=h+A[8];指令格式:swrt,offset(rs)#注释指令功能:将rt寄存器中的数据存入【(rs)+offset】内存单元注意事项:同lw指令【解答】首先应该使用lw指令将A[8]取到寄存器中,再做加法运算,最后利用sw指令将和存入A[12]。假设变量h在$s2寄存器中,数组A的基址在$s3中,则该C语句的MIPS汇编指令代码如下:lw$t0,32($s3)#临时寄存器$t0存放A[8]的值add$t0,$s2,$t0#临时寄存器$t0存放h+A[8]的值sw$t0,48($s3)#把h+A[8]的值存储到A[12]中例3.6使用可变数组下标进行编译假设A是100个元素的数组,基地址在寄存器$s3中,变量g,h,i分别和寄存器$s1,$s2,$s4相联系。写出下面的C语句的MIPS汇编代码:g=h+A[i]【解答】为了能从A[i]中取出数据,首先要得到A[i]的内存地址,且必须以offset(rs)的形式体现。通过计算A+4*i可得A[i]的内存地址,将其放入基址寄存器,这样只要令偏移量offset为0,即可以offset(rs)的形式实现取数指令:add$t1,$s4,$s4#临时寄存器$t1=2*iadd$t1,$t1,$t1#临时寄存器$t1=4*iadd$t1,$t1,$s3#临时寄存器$t1=A[i]的地址(4*i+$s3)然后把A[i]取到临时寄存器中:lw$t0,0($t1)#临时寄存器$t0=A[i]最后把A[i]和h加起来,放到变量g中:add$s1,$s2,$t0#g=h+A[i]四、软硬件接口:溢出(spilling)寄存器很多程序中变量的数量比寄存器的数量多。因此,编译器尽量把使用最频繁的变量保持在寄存器中,而把其余的放在内存中,并用取数和存储指令在寄存器和内存之间传送数据。将不常用或是以后才用到的变量存入内存的过程称为溢出(spilling)寄存器。五、小结P83图3—4,指令与操作数小结3.4指令的计算机内部表示在计算机内部,指令体现为二进制数,由连续的0,1串组成,计算机为了识别指令,会将这个32位的二进制数分成几个字段,用来表示不同的信息,如表示操作码、寄存器号等。机器指令格式以二进制表示:000000100011001001000000001000006位5位5位5位5位6位计算机如何识别和解释指令呢?首先要了解机器指令的表示。MIPS汇编指令如下所示:add$t0,$s1,$s2二进制表示为:00000010001100100100000000100000一、R型指令格式这些字段的意义是:op:指令的操作码,传统上称为opcode,此处为0。rs:表示第1个源操作数的寄存器。rt:表示第2个源操作数的寄存器。rd:表示目的操作数的寄存器,用来保存操作的结果。shamt:移位位数,移位指令用作移位次数控制。funct:功能域,用来选择op域的一个特定的操作。有时称为函数码(functioncode)R型(R-typeorR-format)指令,其中R代表寄存器(Register),意为操作数都在寄存器中。oprsrtrdshamtfunct6位5位5位5位5位6位31…….2625……….2120………..1615……..1110………65………….0以上的R型指令非常适合运算类的指令,但当用于存、取数指令时,如果偏移地址使用5位字段,则偏移的范围就表达的太小了,并不适用。因此,一方面要使所有指令长度都相同,另一方面又要让每条指令的格式都合适,产生了矛盾,因而提出了硬件设计的第三个原则:好的设计需要合适的折衷。Gooddesigndemandsgoodcompromises.由此进行折衷,设计出适合数据传送类指令的I型指令格式。例题:写出指令add$t0,$s1,$s2的机器代码017188032二、I型指令格式(Immadiate--Type)各字段含义如下:op字段:操作码字段,35表示取数指令lw,43表示存数指令swrs字段:基址

1 / 98
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功