第6章:指系统.ppt
计算机的自动计算过程归跟到底是执行一条条指令的过程。而一条指令就是给计算机下达的一道命令,它告诉计算机每一步应做什么操作,参与操作的数来自何处,操作结果又将送到什么地方。这就是说,一条指令必须包含有指出操作类型的操作码,以及指出操作数在什么地方的地址码。通常一台计算机能够完成多种类型的操作,而且可用多种方法形成操作数的地址码,因此一台计算机可有多种多样的指令,这些指令的集合就称指令系统。本章我们将要学习计算机指令系统的有关问题:指令的格式,指令的分类,指令寻址方式。第第6 6章章 指令系统指令系统 1 1 指令的分类指令的分类 通过前面的学习,我们已经知道构成一条指令有两大要素:操作码和地址码。其中操作码表明该指令要进行的操作。按操作码的不同,指令可分为四大类:1、数据处理类 2、数据传送类 3、程序控制类 4、CPU状态管理类一、数据处理类指令这一类指令实现堆数据加工(算术运算,逻辑运算,移位操作,比较大小),执行这类指令后将会产生新的结果数据。1、算术运算:加法、减法、增1和减12、逻辑运算:与,或,非,异或3、移位指令:逻辑移位,算术移位,循环移位4、比较指令:作减法,根据差值设置标志寄存器5、十进制指令:十进制数加、减法。二、数据传送类:这一类指令可实现数据在计算机上各部件之间的传送。寄存器 寄存器,存储器 寄存器,寄存器 I/O端口,存储器 I/O端口执行这类指令后将不改变原数据,只是将源地址内的数据复制到目标地址中。1、存储器传送指令:取数,存数,(存储单元 寄存器)2、寄存器传送指令:实现寄存器 寄存器(内部传送指令)3、I/O指令:输入(in),输出(OUT),CPU I/O4、堆栈指令:压栈(push),出栈(pop)三、程序控制类指令:这一类指令是用来改变程序的执行顺序1、转移指令:条件转移,无条件转移。2、调用指令;call3、返回指令:RET4、陷阱指令(中断指令)四、CPU状态管理类指令:这一类指令用来设置CPU的状态1、中断状态指令:允许中断,屏幕中断2、复位指令3、空操作指令 以上我们只是介绍了一些主要指令,很显然,指令的种类越多,指令系统的功能就越强,但控制器的结构也就越复杂。2 2 指令的格式指令的格式 一、操作码的组织与编排 表示指令要完成的操作,长度取决于指令系统中指令的条数。一般说来,一个包含n位的操作码,做多能表示2n条指令。操作码分为:主操作码(基本操作)和辅助操作码(各种附加操作,移位,进位等)操作码有三种组织方式:(1)定长的操作码:每一条指令的操作码长度均相同。优点:简化硬件设计,提高指令译码和识别速度 缺点:当指令长度较短时,操作数地址的尾数就会严重不足。适用:字长较长的大、中、小型机的指令系统。(2)变长的操作码:指令的操作码的长度不尽相同。使用频率高而地址码要求多的指令用较少位表示操作码;对地址码要求少的指令用较多位表示操作码;对无操作数的指令整个指令字均用作操作码。优点:在比较短的指令字中,既能表示出比较多的指令条数,又能尽量满足操作数地址的要求。缺点:硬件设计复杂,指令译码和识别速度较慢 适用:字长较短的计算机系统 以上两种方案,操作码一般在指令字的最高位部分。(3)操作码和操作数地址有所交叉不同的指令操作码长度不同,而且与表示操作数地址码的字段有所交叉。优点:操作码不再集中在指令字的最高位,而是与表示操作数地址码的字段有所交叉。缺点:硬件设计复杂,指令译码和识别速度较慢 适用:这种方案不常用。二、地址码的设计安排地址码指出参与操作的数据或存储位置。1、操作数的来源、去处(1)CPU内部的通用寄存器 最快,与运算器速度匹配,MOV R2,R1(2)内存的一个单元 次之,与运算器速度不匹配,尽量少访问 MOV R2,R1(3)外设接口中的寄存器 最慢,较少使用,如 input(port)三、指令格式:指一条指令中操作码和地址码的安排方式。按一条指令中所包含的地址码的个数,指令分为:1、四地址指令 (如下图)功能:从源地址(source Address)A1和A2中取出两个操作数,进行OP操作,并将结果送入目标地址(object address)A3中。可以记作:A3 (A1)OP(A2),由A4给出下一条指令地址说明:(1)源地址和目标地址可以是某个存储单元也可以是运算器中的寄存器(2)(A1)和(A2)分别表示地址为A1和A2单元中的内容(3)不带括号A3则表示地址。特点:(1)直观明了(2)地址码太长,指令字太长,信息利用率低。(3)访问内存次数太多,执行速度慢。(4)下一条指令地址在指令中指出,程序转移不方便,现已淘汰。2、三地址指令 (如下图)功能:从A1和A2中取出两个操作数,进行OP操作,并将结果送入A3中。可以记作:A3 (A1)OP(A2),由PC给出下一条指令地址特点:指令字仍较长,访内存次数较多,一般大型机中用。3、二地址指令 (如下图)功能:从A1和A2中取出两个操作数,进行OP操作,并将结果送入A2中。可以记作:A2 (A1)OP(A2),A2既是源地址又是目标地址。由PC给出下一条指令地址 特点:指令字仍较短,访内存次数较少,经常使用。4、单地址指令格式 功能:由PC给出下一条指令地址。ACC OP A1 ACC(累加器),ACC中既放操作数,又放操作结果。如 加1,减1等指令 特点:指令字长短,访内存次数少,执行速度快,在微机中广泛使用。5、零地址指令格式是一种特殊的没有地址码的指令。常见的有:(1)空操作指令(2)停机指令(3)堆栈操作指令。前两种无需操作数,而堆栈指令有操作数的地址,只是它是由专用寄存器SP给出,因此指令中不需要操作数地址。堆栈:指用作数据暂存的一组寄存器或一片存储区域。它像一只口袋,其口袋底称为“堆栈”它的地址是预先约定好的。这种特征很显然带来数据只能一端(袋口)进或去,从而形成先进去的后出来,后进去反而先进来。这种方式称为“先进先出”。堆栈按组成分为:硬堆栈(寄存器堆栈)和软堆栈(内存中的指定区域)。很显然,硬堆栈比软堆栈速度快。堆栈按方向分为:自底向上和自顶向下两种。堆栈有两端:一端叫栈底,另一端叫栈顶,且由SP指针指示。堆栈有两种操作:(1)压栈:先修改SP,后存数据。(2)出栈:先取出数据,后修改SP。6、寄存器型地址格式指令 (如下图)操作数均放在寄存器中。也有单地址、二地址和三地址之分。特点:(1)执行指令不用访问内存,速度快。(2)受寄存器个数的限制。【总结】1、上述六种指令格式,并非所有的计算机都有。2、零地址、单地址和二地址指令,具有指令短,执行速度快,硬件实现简单的特点,多为结构简单,字长较短的小型机、微机所采用。3、二地址指令、三地址和四地址指令,具有功能强、编程方便等特点,多为字长较长的大、中型机所采用。4、但不能一概而论,因还与指令本身的功能有关。如:停机指令,不管什么类型的计算机都有。四、指令字长指令字长:是一条指令中所包含的二进制位数。等于操作码长度与地址码长度之和。1、指令字长与机器字长有何关系?无固定关系。指令字长大于,等于,小于机器字长。一般来讲:微、小型机中,指令字长机器字长;大、中型机中,指令字长=机器字长。2、确定指令字长的原则 指令字长尽可能短:节省内存空间,提高执行速度,提高代码的利用率。指令字长等于字节的整数倍:许多机器采用变长指令,但字长取为字节的整数倍,以避免存储空间的浪费。3 3 寻址方式寻址方式 寻址方式就是寻找地址的方式。那么寻找谁的地址呢?在计算机中有两种地址需要寻找。(1)是指令的地址(称为指令寻址):如何找到指令,这是由PC寄存器来实现的。(2)是操作数的地址(称为操作数寻址):如何找到操作数或找到操作数的地址。操作数的地址分为:(1)形式地址(D):指令中给出的地址。(2)有效地址(EA):操作数的真正地址(物理地址)。形式地址有时可以是有效地址。寻址方式与计算机硬件结构密切相关,对指令格式、功能也有很大影响。从程序员角度看,寻址方式与汇编程序设计,高级语言的编译程序设计的关系都极为密切。一、立即寻址:指令的地址码就是操作数。(如下图)特点:(1)执行指令时不访问内存,速度快。(2)立即数的位数受字长的限制。(3)使用不灵活,操作数的改变需重新设计指令。二、直接寻址:指令中的形式地址就是操作数的有效地址。特点:(1)直观,比立即寻址灵活,但需两次访内存。(2)寻址空间受字长限制。三、间接寻址:指令中的形式地址是操作数有效地址的地址。间接寻址可以分为:一次寻址和多次寻址。一次间址:形式地址是操作数地址的地址。多次间址:指令中设间址特征位,此位为1,继续间址,直至此位为0.(如下图)特点:(1)执行速度比直接寻址慢。访内存三次以上。(2)可扩大寻址空间(3)便于编程:改变操作数,不用改指令,只改存储单元内容即可。四、隐含寻址:一个操作数隐含在累加器(ACC)中。(如下图)ACC OP()ACC五、変址寻址(Index Addressing)(如下图)有效地址EA=(IX)+D六、基址寻址(Base Addressing)有效地址EA=(BX)+D 【基址寻址和变址寻址的比较】(如下图)相同:有效地址的形成方式相同,都能扩大寻址空间。不同:(1)基址寻址中,基址寄存器BX提供基准量,形式地址提供偏移量,这个偏移量位数较少。而变址寻址中,变址寄存器IX提供偏移量,形式地址提供基准量,这个基准量位数较多,足以表示整个存储空间。(2)基址寄存器的内容不由用户确定,而由操作系统确定,一般是在把用户程序的逻辑地址转变为存储器的物理地址时用;而変址寄存器的值由用户确定,且可随意改变。七、复合寻址:变址与间址的复合。(1)先变址后间址:有效地址EA=(IX)+D)(2)先间址后変址:有效地址EA=(D)+(IX)例如:(如下图)八、相对寻址:形式地址给出的是相对于PC的偏移量。主要用于转移指令。(如下图)有效地址EA=(PC)+D相对寻址与变址寻址的区别:变址寄存器可以是多个寄存器中的一个,可以由用户定。而相对寻址的寄存器已确定为PC,故无须在程序中指定。九、页面寻址(扩充寻址)(如下图)扩充地址寄存器内容作高位页面地址,形式地址作低位页内地址,二者联合形成有效地址。十、寄存器寻址(如下图)主机中设置了许多寄存器,以存放操作数、中间运算结果和最终结果。目的是为了提高运算速度,因对寄存器的操作比对内存的操作快得多。寄存器寻址可分为两种:(1)寄存器直接寻址和寄存器间接寻址(如下图)其中寄存器间接寻址又可以分成两种:(如下图)(1)自增型寄存器间址EA=(Ri),Ri=(Ri)+1(或2)先操作,后修改(2)自减型寄存器间址Ri=(Ri)-1(或2),EA=(Ri)先修改,后操作十一、堆栈寻址:通过堆栈指针SP来指示操作数地址。【总结】(1)一台机器,可能只用其中几种寻址方式。(2)机器不同,即使寻址方式相同,其表达方式和含义也可不同。如页面寻址的页面地址可以是扩充地址寄存器的内容;也可以是PC的高位。4 4 指令的执行方式指令的执行方式 一、指令的执行过程每一条指令的执行大致可分为三步:取指令 分析指令 执行指令二、指令的执行方式1、顺序方式:指一条指令接着一条指令的执行方式。这种方式的特点:控制简单,执行速度慢2、重叠方式:指多条指令的某些操作同时进行。从而提高了整个程序的执行的速度。这种方式的特征:对于每一个指令仍是按取指令分析指令和执行指令三步顺序执行的。要实现这种方式,很显然,控制技术复杂而且还需要解决三个方面的问题。(1)分析指令和取指令重叠中的访主存冲突问题 主存在同一时刻只能有一个存储单元被访问,而分析指令和取指令都必须访问主存,要想让这两个操作同时执行,理论上是不可能实现的,除非有如下可能。A:主存允许同时被多操作访问。(多体交叉存储器)B:设置两个存储器,独立编址,一个放数据一个放指令。C:设置一个指令缓冲寄存器。在分析一条指令还没有要求取操作数时,把下一条指令取出来放到指令缓冲寄存器中。(2)执行与分析重叠中的转移指令所带来的问题 当第i条指令为转移指令,转到第j条,这样与第i条执行重叠进行的分析第i+1条指令白做了。(3)数相关问题 第i条的结果刚好是第i+1条的操作数,此时,容易发生错误,第i+1条取数时,而第i条还没有送过来。3、流水线方式 把指令的执行过程分为若干个子过程,每一个子过程由不同的硬件去执行的方式。优点:程序执行速度快 缺点:硬件结构复杂取指令时间12345123451234512345分析指令取数执行指令三、指令周期与机器周期,时钟周期。1、指令周期:指从取指令到该指令执行完成所需的全部时间。一个指令周期是由若干个机器周期组成。2、机器周期:指CPU访问一次主存或I/O端口所需要的时间。一个机器周期是由若干个时钟周期组成的。3、时钟周期:(主频,CPU的工作频率)是CPU处理操作的最小时间单位。又称T状态。示例:假定一个指令周期由2个机器周期,每个机器周期都由4个时钟周期组成,若计算机的主频为800MHZ,请问这样的实计算机一秒钟可执行多少条指令。解:T=42 10-6=10-8=0.01s则n=1s/0.01s=108条=100万条=10MIPS取指令分析指令执行指令TTTTTTTTT5 5 应用举例应用举例 例1:设机器字长16位,内存容量64K,指令为单字长指令,由50种操作,采用页面、间接和直接三种寻址方式。试问:(1)指令格式如何安排?(2)存储器能划分为多少页面?每页多少单元?(3)能否再增加其他寻址方式?如能,能增加几种?解:(1)因为有50种操作、寻址方式由3种,说明操作码至少要6位、寻址方式至少要2位。故地址码最多占16-6-2=8位。因此指令格式可以如下安排:(2)因为形式地址为8位,最多可寻址28=256个单元,说明每一页的单元数位256个单元,故可划分的页面=64K/256=256页。(3)因为寻址方式占2位,最多可以有4种方式,现只用了3种,故能增加,但只能增加一种。:例2、某机器采用三地址格式指令,试问完成一条加法指令共需访问几次内存?若该机器指令系统共能完成60种不同的操作,且MAR为10位,试问该机器的指令格式。解:(1)三地址指令的一般格式为:取指令一次,去操作数D1一次,去操作数D2一次,存结果D3一次,故共需访问内存四次。(2)要完成60种操作,故操作码的位数最少为6位;又MAR为10位,说明D1,D2,D3均为10位,地址码一共需30位。由此可以确定该机器的指令格式应为:整个指令字长位36位。:例3:某指令系统的指令字长为12位,每个地址码长3位,试提出一种分配方案,使该指令系统有4条三地址指令,8条二地址指令,180条单地址指令。若二地址指令仅有7条,单地址指令最多可有多少条?解:(1)由于在该指令系统中有三大类指令:三地址指令,二地址指令和单地址指令,这就说明在设计指令格式时,首先要想办法将这三种指令区分开来,只有拿一些位出来作为特征位,且至少要两位。然而,对于三地址指令而言,地址码就需要33=9位,又要能表示4条,说明操作码最少需要2位,而指令字长只有12位,剩余的位数=12-9-2=1位,这就表明用两位作特征位是不可能的。那就只好先用1位特征位将三地址指令同二地址指令和单地址指令区分开来(设特征位为0,表示三地址指令,特征位为1,表示是二地址指令或单地址指令)。故三地址指令的格式如下:再看二地址指令有8条,即操作码最少需要3位,地址码共需23=6位,故剩余12-3-6-1=2位,这两位可以用来区分二地址指令和单地址指令(假设11表示二地址指令,那么00,01,10这三种情况可以用来表示单地址指令),故二地址指令的格式可设计如下:同时单地址指令的格式可设计如下:下面来考察如果单地址指令采用上述格式,能表示的单地址指令的条数=326=364=192条,完全能够满足要表示180条指令的要求。(2)若二地址指令仅有7条,则多出11 111 000111共8条,所以,单地址指令最多可有192+8=200条。1非1XXX