指令系统
指令格式
- 一条指令由操作码、地址码组成,其中地址码可能有0-4个
- 按地址码数目分类:零/一/二/三/四地址指令
- 按指令长度分类
- 指令字长:指一条指令所包含的二进制代码的位数,其取决于操作码的长度、地址码的长度和地址码的个数。
- 定长指令字结构:所有指令长度相等
- 变长指令字结构:各种指令的长度随指令功能而异
- 按操作码长度分类
- 定长操作码:指令系统中所有指令的操作码长度都相同
- 可变长操作码:指令系统中各指令的操作码长度可变
- 按操作类型分类
- 数据传送类:CPU、主存之间的数据传送
- 运算类:算术逻辑操作、移位操作
- 程序控制类:改变程序执行流
- 输入输出类:CPU、IO设备之间的数据传送
扩展操作码
- 最常见的变长操作码方法是拓展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作数,从而在满足需要的前提下,有效地缩短指令长度
- 在设计扩展操作码指令格式时,需要注意
- 👩💻 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同
- 各指令的操作码一定不能重复
- 优点:在指令字长有限的前提下仍保持比较丰富的指令种类
- 缺点:增加了指令译码和分析的难度,使控制器的设计复杂化
指令的寻址方式
指令寻址
- 指令寻址:确定下一条要执行的指令的存放地址,由程序计数器PC指明
- 顺序寻址
- 👩💻 (PC)+”1”→PC
- 此处的”1”理解为1个指令字长
- 每次取指令结束后,一定会PC+”1”
- 跳跃寻址:执行转移类指令导致的PC值改变
每一条指令的执行都分为“取指令”、“执行指令”两个阶段
数据寻址
寻址方式 | 有效地址 | 访存次数(指令执行期间) | |
---|---|---|---|
隐含寻址 | 程序指定 | 0 | |
立即寻址 | A即是操作数 | 0 | |
直接寻址 | EA=A | 1 | |
一次间接寻址 | EA=(A) | 2 | |
寄存器寻址 | EA=Ri | 0 | |
寄存器间接一次寻址 | EA=(Ri) | 1 | |
偏移寻址 转移指令 | 相对寻址 | EA = (PC) + A | 1 |
偏移寻址 多道程序 | 基址寻址 | EA = (BR) + A | 1 |
偏移寻址 循环程序&数组问题 | 变址寻址 | EA = (IX) + A | 1 |
堆栈寻址 | 入栈/出栈时EA的确定方式不同 | 硬堆栈不访存,软堆栈访存一次 |
取出当前指令后,PC会指向下一条指令,相对寻址是相当于下一条指令的偏移