跳转至

Ch11 指令集:寻址方式和指令模式

符号说明:

  • \(A\):指令中出现的地址/数据的内容
  • \(R\):指令中出现的寄存器存储的地址/数据的内容
  • \(EA\):被访问位置的实际有效地址
  • \((X)\):位置 \(X\) 的内容

立即寻址

  • 操作数 = \(A\)
  • 优点:不要求存储访问,速度快
  • 缺点:操作数范围受限

直接寻址

  • \(EA = A\),即实际访问位置的地址写在指令中。
  • 优点:只需要一次内存引用。
  • 缺点:地址范围受限。
  • 直接寻址

间接寻址

  • \(EA = (A)\),即指令中存储的地址指向一个内存位置,该位置存储着实际访问位置真正的地址。
  • 优点:地址范围更大。
  • 缺点:需要两次内存引用(第一次获取真正地址,第二次获取实际数据)。
  • 间接寻址

寄存器寻址(类似直接寻址)

  • \(EA = R\),即指令中存储的地址指向一个寄存器,实际访问内容存储在该寄存器中。
  • 优点:无需内存引用;指令中寄存器地址通常较短。
  • 缺点:寄存器地址空间有限。

寄存器间接寻址(类似间接寻址)

  • \(EA = (R)\),即指令中存储的地址指向一个寄存器,该寄存器存储着实际访问位置的真正地址。
  • 优点:地址范围更大;相比间接寻址只需一次内存访问;指令内地址更短。
  • 寄存器间接寻址

偏移寻址(寄存器间接寻址和直接寻址的结合)

  • \(EA = (R) + A\),实际地址由寄存器内容与指令内地址相加得到。
    • 相对寻址:
      • \(R = PC\)\(A\) 为补码,有效地址 = 指令地址 + 偏移量(可正可负)。
    • 基址寄存器寻址:
      • \((R)\) 为基址,\(A\) 为偏移量(相对寻址是其特例)。
    • 变址寻址:
      • \(A\) 为基址,\((R)\) 为偏移量,常用于迭代场景。
  • 偏移寻址

堆栈寻址

  • 操作数在栈顶,通过指令隐式对栈顶进行操作
  • 本质是通过存储在寄存器中的栈指针进行寄存器间接寻址,对栈顶元素进行操作。