指令系统

7/12/2022 可恶的408

指令格式

基本格式

一条指令通常包括操作码和地址码。操作码指出指令执行什么性质的操作(就是是啥指令),地址码给出被操作的数据;

有零地址、一地址、二地址、三地址(第三个为结果存放的地址)、四地址指令(都四个为下址);

定长操作码

操作码是固定长度,简化硬件设计、提高指令译码和识别速度。

扩展指令码

变长操作码,操作码的长度随地址码的减少而增多。

不允许短码是长码的前缀,不然识别很麻烦,根据前缀就能识别是什么地址的码

类型

  1. 数据传送
  2. 算术和逻辑运算
  3. 移位操作
  4. 转移操作
  5. 输入输出操作

指令寻址方式

指令寻址

  1. 顺序寻址,PC+“1”,自动形成下一条指令地址
  2. 跳跃寻址,本条指令给出下条地址,通过修改PC值实现

数据寻址

如何在指令中表达操作数的地址,

寻址方式

  1. 隐含寻址,默认使用某个寄存器
  2. 立即(数)寻址,给出的地址字段不是操作数的地址,而是操作数本身
  3. 直接寻址,给出的地址是操作数的地址
  4. 间接寻址,给出的地址是存放操作数地址的地址
  5. 寄存器寻址,给出寄存器编号,操作数在寄存器内
  6. 寄存器间接寻址,给出寄存器编号,寄存器中存这操作数的地址
  7. 相对寻址,PC的内容加上给出的地址得到存放操作数的地址(相对于PC,下一条指令)
  8. 基址寻址,BR的内容加上给出的地址得到存放操作数的地址,BR面向操作系统,内容由操作系统和管理程序确定,用于解决程序逻辑空间和存储器物理空间的无关性
  9. 变址寻址,IX的内容加上给出的地址得到存放操作数的地址,IX面向用户,在程序执行过程中,变址寄存器可以由用户改变,作为偏移量,比如循环访问数组。
  10. 堆栈寻址,取出堆栈指针SP的值。

这块感觉学了好多次,汇编、系统结构、组成原理都讲了,还有什么相对基址变址寻址,比例因子什么的。

汇编

注意AT&T格式和Intel格式的区别。

CISC和RISC

对比项目 CISC RISC
指令系统
指令数目 大于200 小于100
指令字长 不固定 定长
可访存指令 不加限制 只有Load/Store
各指令执行时间 相差较大 绝大多数在一个周期内完成
各指令使用频度 相差很大 都比较常用
通用寄存器数量 较少
目标代码 难以用优化编译生成高效的目标代码 采用优化的编译程序,生成代码较为高效
控制方式 绝大多数为微程序控制(控制存储器占CPU50%面加 绝大多数为组合逻辑控制(硬布线,布线逻辑面积小)
指令流水线 可以通过一定方式实现 必须实现