指令格式
基本格式
一条指令通常包括操作码和地址码。操作码指出指令执行什么性质的操作(就是是啥指令),地址码给出被操作的数据;
有零地址、一地址、二地址、三地址(第三个为结果存放的地址)、四地址指令(都四个为下址);
定长操作码
操作码是固定长度,简化硬件设计、提高指令译码和识别速度。
扩展指令码
变长操作码,操作码的长度随地址码的减少而增多。
不允许短码是长码的前缀,不然识别很麻烦,根据前缀就能识别是什么地址的码
类型
- 数据传送
- 算术和逻辑运算
- 移位操作
- 转移操作
- 输入输出操作
指令寻址方式
指令寻址
- 顺序寻址,PC+“1”,自动形成下一条指令地址
- 跳跃寻址,本条指令给出下条地址,通过修改PC值实现
数据寻址
如何在指令中表达操作数的地址,
寻址方式
- 隐含寻址,默认使用某个寄存器
- 立即(数)寻址,给出的地址字段不是操作数的地址,而是操作数本身
- 直接寻址,给出的地址是操作数的地址
- 间接寻址,给出的地址是存放操作数地址的地址
- 寄存器寻址,给出寄存器编号,操作数在寄存器内
- 寄存器间接寻址,给出寄存器编号,寄存器中存这操作数的地址
- 相对寻址,PC的内容加上给出的地址得到存放操作数的地址(相对于PC,下一条指令)
- 基址寻址,BR的内容加上给出的地址得到存放操作数的地址,BR面向操作系统,内容由操作系统和管理程序确定,用于解决程序逻辑空间和存储器物理空间的无关性
- 变址寻址,IX的内容加上给出的地址得到存放操作数的地址,IX面向用户,在程序执行过程中,变址寄存器可以由用户改变,作为偏移量,比如循环访问数组。
- 堆栈寻址,取出堆栈指针SP的值。
这块感觉学了好多次,汇编、系统结构、组成原理都讲了,还有什么相对基址变址寻址,比例因子什么的。
汇编
注意AT&T格式和Intel格式的区别。
CISC和RISC
对比项目 | CISC | RISC |
---|---|---|
指令系统 | 大 | 小 |
指令数目 | 大于200 | 小于100 |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有Load/Store |
各指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
各指令使用频度 | 相差很大 | 都比较常用 |
通用寄存器数量 | 较少 | 多 |
目标代码 | 难以用优化编译生成高效的目标代码 | 采用优化的编译程序,生成代码较为高效 |
控制方式 | 绝大多数为微程序控制(控制存储器占CPU50%面加 | 绝大多数为组合逻辑控制(硬布线,布线逻辑面积小) |
指令流水线 | 可以通过一定方式实现 | 必须实现 |