计组-指令系统(4)

4.1 指令系统

指令的基本格式

按地址码数目

零地址指令 \(OP\)

  1. 不需要操作数,入空操作、停机、关中断等指令
  2. 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

一地址指令 \(OP\) \(A_1\)

  1. 只需要单操作数,如加 \(1\) 、减 \(1\) 、取反、求补等

    指令含义:\(OP(A_1)\rightarrow A_1\) ,完成一条指令需要 3 次访存,取值 \(\rightarrow\) 读 \(A_1\)\(\rightarrow\) 写 \(A_1\)

  2. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在 \(ACC\))

    指令含义:\((ACC)OP(A_1)\rightarrow ACC\) ,完成一条需要 2 次访存:取值 \(\rightarrow\) 读 \(A_1\)

注:\(A_1\) 指某个主存地址,\((A_1)\) 表示 \(A_1\) 所指向的地址中的内容

二地址指令 \(OP\) \(A_1\) \(A_2\)

常用于需要两个操作数的算术运算、逻辑运算相关指令

指令含义:\({(A_1)OP(A_2)\rightarrow A_1}\)

完成一条指令需要访存 4 次,取指 \(\rightarrow\) 读 \(A_1\) \(\rightarrow\) 读 \(A_2\) \(\rightarrow\) 写 \(A_1\)

三地址指令 \(OP\) \(A_1\) \(A_2\) \(A_3\) (结果)

常用于需要两个操作数的算术运算、逻辑运算相关指令

指令含义:\({(A_1)OP(A_2)\rightarrow A_3}\)

完成一条指令需要访存 4 次,取指\(\rightarrow\)读\(A_1\) \(\rightarrow\)读\(A_2\) \(\rightarrow\)写\(A_3\)

四地址指令 \(\text{OP}\) \(A_1\) \(A_2\) \(A_3\)(结果) \(A_4\)(下址)

指令含义:\(\displaystyle (A_1)\,\text{OP}\,(A_2) \rightarrow A_3\),\(A_4=\)下一条将要执行指令的地址

完成一条指令需要访存 4 次,取指\(\rightarrow\)读\(A_1\) \(\rightarrow\)读\(A_2\) \(\rightarrow\)写\(A_3\)

正常情况下:取指令之后 \(\text{PC}+1\),指向下一条指令

四地址指令:执行指令后,将 \(\text{PC}\) 的值修改为 \(A_4\) 所指地址

按指令长度分类

image-20260907144913190

按操作码长度分类

定长操作码:指令系统中所有指令的操作码长度都相同 \(n\)位 \(\rightarrow 2^n\)条指令

控制器的译码电路设计简单,有利于指令译码和识别速度,但灵活性较低

可变长操作码:指令系统中各指令的操作码长度可变

控制器的译码电路设计复杂,但灵活性较高,能有比较丰富的指令种类

按操作类型分类

image-20260907145340401

扩展操作码

定长指令字结构+可变长操作码——扩展操作码指令格式

image-20260907150817435

4.2 寻址

指令寻址

指令寻址 下一条欲执行指令的地址(始终由程序计数器PC给出)

顺序寻址 \((PC)+1\rightarrow PC\)

跳跃寻址 由转移指令指出

数据寻址

  • 直接寻址:形式地址 \(A\) 是操作数的真实地址 \(EA\) ,即 \(EA=A\)

  • 间接寻址:形式地址 \(A\) 是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即 \(EA=(A)\)

  • 寄存器寻址:指令给出操作数所在寄存器编号\({R_i}\),\(EA=R_i\),其操作数存放在寄存器\({R_i}\)内

  • 寄存器间接寻址:寄存器 \(R_i\) 中给出的不是一个操作数,而是操作数所在主存单元的地址,即 \(EA=(R_i)\)

  • 隐含寻址:不是明显地给出操作数地址,而是在指令中隐含操作码地址。

  • 立即寻址:形式地址 \(A\) 就是操作数本身(又称立即数),一般采用补码形式。‘#’ 表示立即寻址特征。

  • 基址寻址:将 CPU 中基址寄存器 \(BR\) 的内容加上指令格式中的形式地址 A,而形成操作数的有效地址,即 \(EA=(BR)+A\)

  • 变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器 \(IX\) 的内容相加之和,即\(EA=(IX)+A\),其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器。

  • 相对寻址: 把程序计数器 \(PC\) 的内容加上指令格式中的形式地址 \(A\) 而形成操作数的有效地址,即\(EA=(PC)+A\),其中 \(A\) 是相对于 \(PC\) 所指地址的位移量,可正可负,补码表示。

  • 堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。

image-20260912213910829

4.3 程序的机器级代码表示

不需要会写,要求能看懂

AT&T 格式相较 Intel格式,目的操作数在右,源操作数在左。

函数

call和ret指令

call:

  • 将 IP 旧值压栈保存(保存在函数的栈帧顶部)
  • 设置 IP 新值,无条件转移至被调用函数的第一条指令

访问栈帧

image-20260913215522323

切换栈帧

image-20260913220755811

image-20260913221313972

未使用区域与若干调用参数区域之间可能会存有部分寄存器值

4.4 CISC 和 RISC 的基本概念

image-20260913224024398