0%

计算机组成原理——第5章

5.1 指令系统概述

指令是用户使用计算机与计算机本身运行的基本功能单位。指令是计算机能够直接识别、执行的操作命令,是冯诺依曼结构计算机程序控制原理实现的载体。

指令系统是一台计算机中所有机器指令的集合。

5.2 指令格式

5.2.1 指令字长度

  • 指令字长:指令中包含的二进制位数
  • 计算机根据指令字长是否固定可以分为定长和变长指令系统
    • 定长指令系统的指令长度固定,结构简单,有利于CPU取指令、译码和指令顺序寻址,但平均指令长度较长,冗余状态较多,不容易扩展。
    • 变长指令系统的指令长度可变,结构灵活,冗余状态较少,平均指令长度较短,但取指令和译码有很多不便。

5.2.2 指令地址码

根据指令中地址码字段的个数可将指令分为:

  • 三地址指令——A3←(A1)OP(A2)
  • 双地址指令——A1←(A1)OP(A2)
  • 单地址指令——A1←OP(A1),AC←(AC)OP(A1)
  • 零地址指令

按照指令中操作数的物理位置分类可以分为:

  • 存储器-存储器型
  • 寄存器-寄存器型
  • 寄存器-存储器型

根据指令的功能可以分为:

  • 传送指令
  • 定点算数运算指令
  • 位运算指令
  • 控制转移指令

指令格式:操作码字段+寻址方式+地址码字段
操作码字段的位数与支持的最大指令数有关,对于定长操作码而言,最大指令数m与操作码字段长n满足n≥log2m。对于变长操作码,可以向不用的地址码字段进行扩展。寻址方式字段的位数与支持的寻址方式种类有关。地址码字段的作用及影响与位数和寻址方式有关。

5.3 寻址方式

指令的寻址方式只有顺序寻址和跳跃寻址两种。

5.3.1 指令寻址方式

顺序寻址方式

程序的指令序列在主存顺序存放,执行时从第一条指令开始逐条取出并执行,这种程序的顺序执行过程被称为顺序寻址方式。
CPU通过设置程序计数器对指令顺序号进行计数。每一次执行一条指令PC加1并指出下一条指令的地址,直到程序结束。

跳跃寻址方式

程序出现分支或转移时会改变程序的执行顺序,此时下条指令的地址不一定通过PC+1获得。

5.3.2 操作数寻址方式

  • 立即数寻址:地址码字段就是操作数本身。如MOV RAX, 200H中的200H。取指操作将数据和指令一并读入CPU内部的寄存器,指令执行速度快,便于程序设计,但数据大小受到字段的位数限制。
  • 寄存器寻址:操作数在CPU内部寄存器中。如MOV RAX, RBX。操作数在寄存器中,指令执行速度快,但能访问的数据大小一般与计算机字长有关,地址字段的位数与计算机通用寄存器数量相关。
  • 直接寻址:操作数在主存储器中,地址码字段给出操作数在内存中的地址。如MOV RAX, [4000H]。提供了访问主存的操作,获得数据需要访问主存,因此指令的执行速度较慢,地址字段的位数决定了访存的空间大小。
  • 间接寻址:地址码字段给出操作数主存地址的地址。即需要进行两次寻址,相当于二重指针。解决了直接寻址方式下字段的位数限制访存范围大小的问题,但需要访问主存两次,指令执行速度慢。
  • 寄存器间接寻址:地址码字段给出寄存器编号。如MOV RAX, [RBX],需要首先访问寄存器获取寄存器的值,然后根据该值到主存中访存。其解决了直接寻址方式下地址字段的位数限制访存范围大小的问题,且获得数据只需要访问一次主存。
  • 相对寻址:将程序计数器PC中的内容加上指令中的形式地址,形成操作数的有效地址。如JMP指令。该寻址方式可节省指令中的地址位数,便于程序在内存中成块移动,注意PC的改变对计算有效地址的影响,有效地址值应该为当前指令的地址+偏移量+当前指令的长度
  • 基址寻址:指定基址寄存器,与本指令地址无关。如MOV RAX, [RBP+10H]。使用基址寄存器可以访问更大的主存空间,对某一程序而言,基址值设定后不变,故要访问不同数据需要修改偏移量的值。
  • 变址寻址:指定一个变址寄存器,与本指令地址无关。因此首先需要根据寄存器编号找到寄存器,再将寄存器值与偏移相加获得有效地址,之后访存。如MOV RAX, [RSI+10H]。

5.5 指令格式设计

  • 根据指令数量的要求及是否支持操作码扩展,确定操作码字段的位数
  • 根据对操作数的要求确定地址码字段的个数
  • 根据寻址方式的要求,为每个地址码字段确定寻址方式字段位数
  • 确定采用定长指令还是变长指令