计算机组成原理---指令系统

指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。指令系统是计算机的主要属性,位于硬件和软件的交互面上。

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。一条指令通常包括操作码字段和地址码字段两部分。其中,操作码指出指令中该指令应该执行什么性质操作和具体何种功能;地址码用于给出被操作的信息地址。

指令的长度是指一条指令中所包含的二进制代码的位数。指令的字长取决于操作码的长度,操作数地址码的长度和操作数地址的个数。

在一个指令系统中,若所有指令的长度都是相等的,称为定长指令字结构;若指令的长度随功能而异,称为变长指令字结构;因为主存一般按字节编址,所以指令长多为字节的整数倍。

根据指令中的操作数地址码的数目不同,可将指令分为:零地址指令,一地址指令,二地址指令,三地址指令,四地址指令。

定长操作码指令格式:定长操作码指令是在指令的最高位部分分配固定的若干位(定长)表示操作码。定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利。

扩展操作码指令格式:为了在指令字长有限的前提下仍保持比较丰富的指令种类,可采取可变长度操作码,即全部指令的操作码字段位数不固定,且分散在指令的不同位置上。显然,这将增加指令译码和分析的难度,使控制器设计复杂化。在设计扩展码需要注意:

  • 不允许短码是长码的前缀;
  • 各指令的操作码一定不能重复。

寻址方式是指寻找指令或操作数有效地址的方式,也就是确定本条指令的数据地址,以及下一条将要执行的指令地址的方法。寻址方式分为指令寻址和数据寻址两大类。指令中的地址码字段并不代表操作数真实地址,称形式地址(A)。

指令寻址有两种:顺序寻址:通过程序计数器PC加1,自动形成下一条指令的地址;跳跃寻址:下一条指令的地址码不是由程序计数器给出,而是由本条指令给出下条指令地址的计算方式,跳跃的结果是当前指令修改PC值,所以下一条指令仍然是通过程序计数器PC给出。

数据寻址:操作码+寻址特征+形式地址

  • 隐含寻址:不是明显给出操作数地址,而是在指令中隐含着操作数地址;
  • 立即寻址:指令的地址字段指出的不是操作数地址,而是操作数本身,
  • 直接寻址:指令中形式地址就是操作数的真实地址;
  • 间接寻址:指令的地址字段给出的是操作数地址的地址;
  • 寄存器寻址:指令字中直接给出操作数所在的寄存器的编号;
  • 寄存器间接寻址:寄存器给出操作数所在主存单元地址;
  • 相对寻址:把程序计数器PC内容加上形式地址而形成操作数有效地址;
  • 基址寻址:将CPU中的基址寄存器(BR)的内容加上指令格式中的形式地址得到有效地址,基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定;
  • 变址寻址:有效地址等于指令中形式地址与变址寄存器(IX)的内容之和,变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址不变(作为基地址);
  • 堆栈寻址:堆栈是存储器或专用寄存器组中一块特定的按“后进先出”原则管理的存储区,该存储区中被读/写单元的地址使用一个特定的寄存器给出,该寄存器称为堆栈指针(SP),寄存器堆栈又称为硬堆栈,主存区域堆栈又称为软堆栈。

指令系统的发展朝向两种截然不同的方向发展,一是增强原有指令功能,设置更为复杂的新指令实现软件功能的硬化,这类机器称为复杂指令计算机(CISC);另一种是减少指令种类和简化指令功能,提高指令执行速度,这类机器称为精简指令计算机(RISC)。

CISC的主要特点有:指令系统复杂庞大,指令数目一般为200条以上;指令长度不固定,指令格式多,寻址方式多;可以访存的指令不受限制;各种指令使用频度相差很大;各种指令执行时间相差很大,大多数指令需要多个时钟周期才能完成;控制器大多数采用微程序控制,难以用优化编译生成高效的目标代码程序。

RISC的中心思想是要求指令系统简化,尽量使用寄存器-寄存器操作指令,指令格式力求一致,主要特点有:选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现;指令长度固定,指令格式种类少,寻址方式种类少;只有Load/Store指令访存,其余指令的操作都是在寄存器之间进行;CPU中通用寄存器数量相当多;RISC一定采用指令流水线技术,大部分指令在一个时钟周期内完成;绝大多数为组合逻辑控制,不用或少用微程序控制;特别重视编译优化工作,以减少程序执行时间。

猜你喜欢

转载自blog.csdn.net/object__/article/details/84262555