组成原理---指令系统

指令系统概述

  • 一台计算机的所有指令的集合称为该计算机的指令系统。
  • CPU主要的工作是执行指令。
  • 指令系统是计算机硬件的语言系统,在设计计算机时,首先应确定其硬件能直接执行那些操作,这些操作表现为一组指令的集合,同时他也为程序员呈现了计算机的主要属性。即指令系统既为硬件设计者提供最基本的硬件电路功能设计的依据,也为软件设计者提供最底层的程序设计语言

指令与指令系统

  • 指令:计算机执行某种操作的命令。在计算机内部以二进制代码的形式表示,能够被计算机直接识别和理解。

  • 指令字:代表指令的一组二进制信息。
    指令字长:一条指令中所包含的二进制码的位数。不同计算机的指令字长不同。
    机器字长:计算机字长,计算机能直接处理的二进制位数,决定了计算机运算的精度。

  • 指令和数据都放在存储器中,通常,机器字长是字节长度的整数倍,而机器字长与指令字长不存在固定的关系。

  • 早期的计算机指令字长,机器字长和存储字长均相等,因此,访问某个存储单元便可取出一条完整的指令或一个完整的数据。这种计算机的指令字长是固定的,控制方式比较简单。

    计算机的指令系统可以采用变字长的措施。一般有半字长,单字长,双字长和三字长指令。短字长指令占存储空间小,长字长指令可以表示更多的操作信息。通常将最常用的指令设计成短字长指令,以提高指令的执行速度

  • 指令系统:一台计算机中所有机器指令的集合,即一台就算计所能执行的全部操作,表征一台计算机性能的主要因素。反映了计算机具有的功能,是软件和硬件的主要接口,其格式和功能不仅影响到计算机的硬件结构,也直接影响到系统软件及计算机的适用范围。

    灵活丰富的指令系统可以使计算机具有良好的性能,但需要复杂的硬件来支持。

指令系统的要求

  • 完备性:丰富,功能齐全,使用方便
  • 有效性:主要表现在程序占据的存储空间小,执行速度快。
  • 规整性:要求操作,数据类型和寻址方式中的任何两个元素彼此独立无关。
    对称性:所有的寄存器和存储器单元均可同等对待,所有的指令都可以使用各种寻址方式。可以提高软件的效率和使用的方便性。
    匀齐性:可以支持各种数据类型。过分追求匀齐性,会造成指令系统过于庞杂。
    指令格式和数据格式的一致性:以便于处理和存取。
  • 兼容性:向上兼容。低档机上运行的软件可以在高档机上运行。

指令格式

指令一般由操作码和地址码两部分组成

指令操作码与地址码

  • 操作码:用来指明该指令要完成的操作。操作码的位数反映了机器的操作种类,即机器允许的指令条数。

    固定长度操作码:将操作码固定放在指令字的一个字段内,便于硬件设计,译码时间短,广泛用于字长较长的大中型计算机和超级小型计算机以及RISC中。

    长度不固定的指令:操作码分散在指令字的不同字段。有效的压缩操作码的平均长度,在字长较短的微机中被广泛采用。操作码的长度不固定会增加指令译码和分析的难度,使控制器的设计复杂,通常采用扩展操作码技术。

  • 地址码
    用来寻找执行指令所需要的操作数。操作数分为源操作数和目的操作数。

    在地址码中,既可以直接给出操作数,也可以指出源、目的操作数的地址和下一条指令的地址。这里的地址可以是主存地址,寄存器地址或设备地址。

  • 根据地指数的不同
    三地址指令
    在这里插入图片描述
    A1A2地址所指的两个操作数执行操作码OP所规定的操作,并将结果存入A3中。A1A2为源操作数地址,A3为目的操作数地址。

    二地址指令
    在这里插入图片描述
    A1A2地址所指的两个操作数执行操作码OP所规定的操作,并将结果存入A1中。A1既是源操作数地址,又是目的操作数地址。

    一地址指令
    在这里插入图片描述
    指令中的地址码既是源操作数地址,又是存放结果的目的操作数地址。

    在某些计算机中,指令的地址码提供一个操作数,而另一个操作数是由计算机隐含提供的。按事先约定的寄存器默认提供。

    零地址指令
    只有操作码,没有地址码。由隐含的操作数机构提供操作数(累加器,堆栈指针)。

    零地址,一地址指令可以在不改变指令字长的前提下,扩大指令直接寻址的范围,缩短指令字长,减少访存次数,执行速度快,多为小型,微型计算机采用。

    多地址指令功能强,便于编程,但控制复杂,多为指令较长的大中型计算机使用。

  • 用一些硬件资源承担指令字中需指明的地址码,可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围,还可以缩短指令字长,减少访存次数。

  • 操作数类型
    地址
    主要指存储器地址,由访问存储器的指令计算得出。

    数字
    整数(定点数),浮点数,十进制数。

    字符
    ASCII码。每个字符的ASCII码用七位二进制数表示,在计算机存储时或通信时常使用一个字节来表示,其最高位可以设置为0,或者做奇偶校验用。

    EBCDIC码
    使用八位二进制数。

    逻辑数据:逻辑运算。

数据在存储器中的存放方式

  • 一般,为了便于硬件实现,要求多字节的数据在存储器的存放方式能满足边界对准的要求。
  • 在边界不对准的计算机中,数据可能在两个存储单元中,需要访问两次存储器并且对高字节的位置进行调整后才能得到一个字。

指令的操作码扩展

  • 操作码的长度决定了指令的条数。
  • 设计操作码长度可变指令时,通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,即不同地址数的指令可以具有不同长度的操作码,从而缩短指令字长。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 在设计操作码不固定的指令系统时,应安排使用频率高的指令占用较短的操作码使用频率低的占用较长的操作码。这样可以缩短指令的译码时间

寻址方式

  • 寻址方式是确定本条指令的操作数地址以及下一条要执行的指令的地址的方法。
  • 寻址方式也是将指令中直接给出的形式地址转换成有效地址的一种方式,一般由硬件自动完成。
  • 优点
    丰富程序设计手段,方便程序的设计,提高程序执行效率。
    压缩程序占用的存储空间,使指令的地址码尽可能的缩短,访问的存储空间尽可能的大。

指令寻址

  • 顺序寻址方式
    使用程序计数器PC来计数指令在主存中的地址。
  • 跳跃寻址方式
    当程序执行一条转移指令时,由本条指令的地址码字段给出跳跃地址,或者由指令的地址码字段经过相对寻址方式计算出跳跃后的新的指令地址。用转移后的地址去修改PC的内容。

数据寻址

  • 在指令中必须设置一个字段来指明其属于哪一种寻址方式。

  • 指令的地址码字段通常都不代表操作数的真实地址,把它称为形式地址,记为A。操作数的真实地址称为有效地址,记为EA,它是由寻址方式和形式地址共同确定的
    在这里插入图片描述

  • 立即寻址
    在这里插入图片描述
    在指令的地址码处直接给出操作数。

    执行速度快,操作数是指令的一部分,不便于修改,只适用于提供常数或设定初始值。

  • 直接寻址
    在这里插入图片描述
    指令的地址码字段直接作为操作数在存储器单元的地址,即有效地址EA=A,按有效地址访问一次主存变得操作数。

    方式简单,不需要做任何修改,但不便于修改,只适用于访问固定的主存单元或输入输出接口中的寄存器。由于有效地址在指令中,限制了一条指令所能访问的最大主存空间。

  • 间接寻址
    在这里插入图片描述
    将主存地址A单元的内容作为数据地址的指针,用来指示操作数的存放位置。只要修改A单元的内容就可以改变操作数的地址。
    A中的内容可以是较长的地址码来访问较大的主存范围。
    多次访问主存,执行速度变慢。

  • 寄存器寻址
    在这里插入图片描述
    指令中地址码给出寄存器号,操作数在该编号的寄存器中,即EA=Ri。不用访问存储器,指令的执行速度较快。

  • 寄存器间接寻址
    在这里插入图片描述
    指令中地址码给出寄存器号,该寄存器中存放的是操作数在主存中的有效地址,即EA=(Ri)。既可以压缩指令长度,又可以扩大寻址范围,并可以将寄存器作为数据地址指针。

  • 变址寻址
    在这里插入图片描述
    在指令中制定一个寄存器作为变址寄存器,或者计算机默认某个寄存器作为默认寄存器,并且指令的地址码字段给出一个数值A,称为变址偏移量,EA=(Ri)+A.

    使用广泛。
    其目的不是扩大寻址空间,而是实现程序块的规律变化,通常A作为基准地址,而变址寄存器的内容作为修改量。在遇到需要频繁修改地址的情况时,只需要修改寄存器中的值
    面向用户编程,适合于字符串处理,数组运算等成组数据处理。

  • 基址寻址
    在这里插入图片描述
    EA=(Rb)+A,其基址寄存器名由指令指出。适合于多用户计算机系统,当OS为多道程序分配主存空间,将用户程序装入主存时,需要进行逻辑地址到物理地址的转换。OS给每一个用户一个基地址并将其放入相应的基址寄存器,在程序执行时,以基地址为基准自动进行逻辑地址到物理地址的转换。

    根据程序的局部性原理,设置一个基址寄存器存放这一区域的首地址,指令中的地址码给出以首地址为基准的位移量,基址寄存器和该位移量相加作为操作数在主存中的有效地址。基址寄存器的字长应足以指向整个主存空间,而位移量只要能寻址本区域即可。既能缩短指令长度,又能扩大寻址范围。面向系统,可以解决程序在主存中重定位和扩大寻址空间等问题。

  • 基址变址寻址
    在这里插入图片描述
    在指令中指定一个基址寄存器和变址寄存器,地址码给出位移量,有效地址为基址寄存器中的值,变址寄存器中的值和位移量三者相加

  • 相对寻址
    将程序计数器PC的内容加上指令码字段的内容作为操作数的有效地址或转移地址,指令中地址码字段的内容即为相对于当前指令地址的偏移量。

    主要用于转移指令。偏移量可正可负,通常用补码来表示。若偏移量为n位,则相对寻址的寻址范围为(PC)-2n-1~(PC)+2n-1-1。以下一条地址为基准,即偏移量=转移目的地址-(PC)。

  • 堆栈寻址
    在这里插入图片描述
    用一个寄存器来表示栈顶的位置,指明栈顶的地址,该寄存器称为堆栈指针(SP)。

    堆栈寻址是指通过SP访问堆栈获得操作数,或者把操作结果存入堆栈中。

    用于访问堆栈的指令只有压入和弹出两种。一般计算机中,堆栈从高地址向地地址扩展,即栈底的地址大于或等于栈顶的地址。

    压入(PUSH):将寄存器的内容压入堆栈。
    (SP)-1->SP;
    (Ri)->(SP)。
    弹出(POP):从堆栈中弹出一个数据,送入Ri寄存器。
    ((SP))-1->(Ri);
    (SP)+1->SP。

指令类型

  • 数据传送指令
    寄存器与寄存器
    寄存器与存储单元
    存储单元与存储单元

    对存储器而言,数据传送包括对数据的读或写操作。数据传送时,数据从原地址单元传送到目标地址单元,源地址中的数据保持不变。可以传送一个或一批数据。

    交换指令:源操作数与目的操作数的互换,实现双向数据传送。

  • 算数逻辑运算指令
    算术运算:加,减,乘,除。
    逻辑运算:与,或,非,异或。
    位操作:位测试,位清零,位求返。

  • 移位指令
    算术移位:带符号数,右移时最高位保持不变。可以实现简单的乘除运算,且所需时间比乘除操作时间短。
    逻辑移位:右移时,操作数的最高位补零。
    循环移位:大循环,小循环。

  • 程序控制类指令
    用于控制程序的流向,使程序具有测试、分析与判断的能力。

    无条件转移类指令
    直接把程序转移到指令所规定的目的地址。

    条件转移指令
    根据当前指令执行的结果决定是否需要转移。条件码:零标志位(ZF),溢出标志位(V),进位标志位(C)。条件码的生成与转移的判断可以在一条指令的执行过程中完成(先在指令中完成比较运算,然后根据结果判断转移条件是否成立),也可以在两条指令的执行过程中完成(由前一条指令通常是算术运算指令生成条件码,再有第二条指令根据条件码判断是否发生转移)。

    调用(CALL)与返回(RET)指令
    将具有特定功能的程序段设定为独立的子程序。通常包括过程调用,系统调用和子程序调用。可以实现一个程序到另一个程序的转移操作。CALL用于从当前程序位置转至子程序的入口。RET用于在子程序执行完成后,重新返回到源程序的断点。CALL指令和RET指令必须成对出现。子程序可以在多处被调用,允许子程序嵌套。子程序的返回地址可以记录在寄存器内,子程序的入口地址内或栈顶内。

    陷阱指令
    陷阱:意外触发的中断。
    计算机发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的处理。一般不提供给用户直接使用,而是作为隐指令,由CPU自动产生并执行。

    堆栈操作指令
    主要用于中断和子程序调用时现场数据和返回地址的保存。

    输入输出指令
    计算机与外围设备通信的一类指令。对于外设寄存器和主存单元统一编制的计算机,无需设置专门的输入输出指令,可用数据传送类指令实现输入输出。对于外设单独编址的计算机通常设有输入输出指令。

    处理器控制类指令
    等待指令
    停机指令:当用户程序执行完时安排的一条指令,使计算机不再继续执行,对于多用户的情况下是不允许的。
    空操作指令:只对程序计数器计数。
    开中断指令和关中断指令:允许位进行置位或清除操作。
    设置条件码指令

    特权指令
    用于系统资源的分配和管理。
    只能供OS或其他系统软件使用,不能供用户使用,防止破坏系统或其他用户信息。

    向量指令:对整个矩阵或向量进行求和,求积运算。

    多处理机指令

指令系统的发展

CISC

  • 指令系统:指令系统复杂,指令条数多,寻址方式多,指令格式多

  • 处理器:CPU采用微程序控制实现指令的执行,有较多的专用寄存器通用寄存器少,指令执行需要经常访问存储器,故平均指令周期长,大多数指令需要多个时钟周期完成。

  • 性能:缩短了汇编指令的条数,指令字增长,格式增多,延长了译码时间,降低了指令的执行速度,编译程序难以用优化措施生成高效的目标代码程序,系统执行效率低

RISC

  • 指令系统:指令长度固定,操作码位置固定,指令格式种类少,寻址方式减少且简化,汇编程序长度可能增加。

  • 处理器:通用寄存器数量相当多,可以减少访存次数,只有存数/取数指令访问存储器,其余指令的操作都在寄存器之间进行,大部分指令在一个机器周期内完成,采用流水线技术。第三代RISC机采用超级标量及超级流水线技术,增加了指令执行的并行度,使得一条指令的平均执行时间小于一个机器周期。以硬布线控制逻辑为主,不用或少用微程序控制。

  • 性能:可以充分利用VLSI芯片的面积,有效的适用于流水线,超流水线和超标量技术的使用,实现指令级并行操作,提高处理器的性能。易于实现优化编译来更有效的支持高级语言程序。

MIPS指令格式

  • 指令格式
    在这里插入图片描述
    一个字节8bit,一个字32bit。
    MIPS32的每条指令长度规定为32bit。

  • R型指令:源操作数和目的操作数都是寄存器操作数。算数指令都是R型指令。

    I型指令:立即数型指令。一个源操作数是立即数,另两个操作数是寄存器操作数。指令执行时,16位立即数需要进行符号扩展或零扩展,编变成32位操作数。数据传输,分支,立即数指令采用此类指令结构。

    J型指令:无条件转移指令。

  • 寻址方式
    寄存器寻址
    在这里插入图片描述
    相对寄存器寻址
    在这里插入图片描述
    立即数寻址
    在这里插入图片描述
    相对转移寻址
    在这里插入图片描述
    页面寻址
    在这里插入图片描述

  • R型指令只有寄存器寻址一种寻址方式

  • I型指令有寄存器寻址,立即数寻址,相对转移寻址,相对寄存器寻址4种寻址方式。
    若I型指令是双目运算指令,则rs寄存器和立即数分别作为源操作数,rt寄存器是目的操作数。

    若I型指令是访存指令load/store,则存储器地址由rs寄存器加上符号扩展成32位的偏移地址offset得到,load指令将存储器内容读到rt寄存器,store指令将rt寄存器的内容写入到存储器中。

    若I型指令是条件转移指令,则对rs和rt寄存器的内容进行指定运算,根据结果决定是否跳转。转移目标地址等于当前PC值加上符号扩展后的偏移量offset。

  • J型指令只有页面寻址一种寻址方式。

发布了30 篇原创文章 · 获赞 1 · 访问量 401

猜你喜欢

转载自blog.csdn.net/weixin_46265246/article/details/105139386