计组-指令系统(4)

计组-指令系统(4)
4FGR4.1 指令系统
指令的基本格式
按地址码数目
零地址指令 \(OP\)
- 不需要操作数,入空操作、停机、关中断等指令
- 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
一地址指令 \(OP\) \(A_1\)
只需要单操作数,如加 \(1\) 、减 \(1\) 、取反、求补等
指令含义:\(OP(A_1)\rightarrow A_1\) ,完成一条指令需要 3 次访存,取值 \(\rightarrow\) 读 \(A_1\)\(\rightarrow\) 写 \(A_1\)
需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在 \(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\) 所指地址
按指令长度分类

按操作码长度分类
定长操作码:指令系统中所有指令的操作码长度都相同 \(n\)位 \(\rightarrow 2^n\)条指令
控制器的译码电路设计简单,有利于指令译码和识别速度,但灵活性较低
可变长操作码:指令系统中各指令的操作码长度可变
控制器的译码电路设计复杂,但灵活性较高,能有比较丰富的指令种类
按操作类型分类

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

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)作为操作数地址。

4.3 程序的机器级代码表示
不需要会写,要求能看懂
AT&T 格式相较 Intel格式,目的操作数在右,源操作数在左。
函数
call和ret指令
call:
- 将 IP 旧值压栈保存(保存在函数的栈帧顶部)
- 设置 IP 新值,无条件转移至被调用函数的第一条指令
访问栈帧

切换栈帧


未使用区域与若干调用参数区域之间可能会存有部分寄存器值
4.4 CISC 和 RISC 的基本概念






