指令格式
指令通常包括操作码和地址码两部分。
指令长度是一个指令的二进制位数。
指令分类:
组成 | 含义 | |
---|---|---|
零地址指令 | O P \mathrm{OP} OP | 无操作数或堆栈指令 |
一地址指令 | O P , A 1 \mathrm{OP,A_1} OP,A1 | 结果存入原地址或者 A C C \mathrm{ACC} ACC |
二地址指令 | O P , A 1 , A 2 \mathrm{OP,A_1,A_2} OP,A1,A2 | 执行运算,结果一般存入 A 1 \mathrm{A_1} A1 |
三地址指令 | O P , A 1 , A 2 , A 3 \mathrm{OP,A_1,A_2,A_3} OP,A1,A2,A3 | 执行运算,结果一般存入 A 3 \mathrm{A_3} A3 |
四地址指令 | O P , A 1 , A 2 , A 3 , A 4 \mathrm{OP,A_1,A_2,A_3,A_4} OP,A1,A2,A3,A4 | 执行运算,结果一般存入 A 3 \mathrm{A_3} A3, A 4 \mathrm{A_4} A4一般是下一条指令的地址 |
扩展操作码是指将地址码多的指令分配较短的操作码。
指令类型
- 数据传送;
- 算术逻辑运算;
- 移位;
- 转移;
- 输入输出。
指令寻址方式
指令寻址
顺序寻址
下个指令为程序计数器加1。
跳跃寻址
由当前指令给出下一个指令的地址。
数据寻址
隐含寻址
累加器等寄存器会隐含地被某些指令使用。
立即数寻址
操作数本身在指令中(或理解为地址为指令寄存器中的某个部分)。
直接寻址
指令中的地址就是内存中的地址。
间接寻址
不直接存储操作数的地址,而是存储操作数的地址的地址(理解为存储操作数的指针或者多级指针)。
寄存器寻址
指令中的代表寄存器的编号。
寄存器间接寻址
间接寻址,但是用寄存器存储地址。
基址寻址
间接寻址,但是使用基址寄存器存储操作数的地址,并把获得的地址加上偏移量作为最终的操作数的地址。
相对寻址
基址寻址,但用的是程序计数器。
变址寻址
基址寻址,但用的是变址寄存器,在使用中会改变变址寄存器的值。
堆栈寻址
间接寻址,但使用堆栈指针寄存器,读取和写入时会修改堆栈指针。
CSIC与RISC
CISC | RISC | |
---|---|---|
指令数量 | 庞大 | 只有使用频率最高的一些简单指令 |
指令长度 | 不固定 | 固定 |
指令格式 | 多 | 少 |
寻址方式 | 多 | 少 |
访存指令 | 多 | 只有存取指令可以访存 |
通用寄存器数量 | 少 | 多 |
采用技术 | 大多数采用微程序控制 | 采用流水线技术,大部分指令在一个时钟周期内完成 |
对编译优化支持 | 困难 | 支持编译优化 |