指令格式
基本概念
- 指令:计算机执行某种操作的命令。
- 指令系统 / 指令集:一台计算机所有指令的集合。
- ISA(指令集体系结构):软件和硬件之间的接口,规定指令格式、寻址方式、寄存器、数据类型等。
指令基本格式
指令 = 操作码 OP + 地址码 A
- 操作码 OP:指明做什么操作,如加、减、传送、转移。
- 地址码 A:指明操作数或操作数地址。
操作码分类
定长操作码
定长操作码
- 操作码长度固定。
- 位操作码最多表示 条指令。
- 优点:译码简单。
- 缺点:扩展性差。
变长操作码(扩展操作码)
变长操作码(扩展操作码)
- 操作码长度可变。
- 高频指令用短码,低频指令用长码。
- 设计原则:
- 短码不能是长码的前缀。
- 每级必须留出扩展标志。
- 地址码位数越多,操作码可用位数越少。
- 常考:给出各级指令条数,求操作码位数或最多可扩展条数。
扩展操作码的本质是“二进制前缀不能被占用”。计算时先从短码逐级统计已用编码,再乘以每级剩余的扩展标志数。
地址码数量分类
指令字长
- 单字长指令:指令字长 = 机器字长。
- 半字长指令:指令字长 = 半个机器字长。
- 双字长指令:指令字长 = 两个机器字长。
- 指令字长通常取字节整数倍。
指令操作类型
- 数据传送:MOV、LOAD、STORE。
- 算术逻辑:ADD、SUB、AND、OR、NOT。
- 移位:算术移位、逻辑移位、循环移位。
- 转移:无条件转移、条件转移、调用、返回。
- 输入输出:IN、OUT。
- 其他:停机、空操作、中断等。
指令的寻址方式
指令寻址
- 顺序寻址:PC 自动加一条指令长度。
- 跳跃寻址:由转移指令修改 PC。
数据寻址
访存次数指“取操作数”阶段,不含取指令。
各寻址方式详解
隐含寻址
隐含寻址
- 操作数不在指令中显式给出,而是隐含在累加器 AC 或默认位置。
- 访存次数:0。
- 特点:指令短,但灵活性差。
立即寻址
立即寻址
- 指令中直接给出操作数本身。
- 操作数 = A。
- 访存次数:0。
- 特点:速度快,但操作数范围受指令字长限制。
直接寻址
直接寻址
- 指令中给出操作数的内存地址。
- EA = A。
- 访存次数:1。
- 特点:简单,但寻址范围受地址码位数限制。
间接寻址
间接寻址
- 指令中给出的地址指向一个内存单元,该单元中存放的是操作数的有效地址。
- EA = (A)。
- 访存次数:2。
- 第一次访存:取出有效地址 EA。
- 第二次访存:取出操作数。
- 特点:寻址范围大,但速度慢。
- 可多次间接寻址,但访存次数更多。
寄存器寻址
寄存器寻址
- 操作数在寄存器中。
- 操作数 = R。
- 访存次数:0。
- 特点:速度快,但寄存器数量有限。
寄存器间接寻址
寄存器间接寻址
- 寄存器中存放的是操作数的内存地址。
- EA = (R)。
- 访存次数:1。
- 特点:操作数在内存,需访存一次。
基址寻址
基址寻址
- EA = (BR) + A,BR 为基址寄存器。
- 访存次数:1。
- 特点:
- 基址寄存器内容通常不变。
- 形式地址 A 可变。
- 面向系统,用于程序重定位。
变址寻址
变址寻址
- EA = (IX) + A,IX 为变址寄存器。
- 访存次数:1。
- 特点:
- 变址寄存器内容可变。
- 形式地址 A 通常不变。
- 面向用户,适合数组、循环访问。
相对寻址
相对寻址
- EA = (PC) + A。
- A 通常为补码偏移量,可正可负。
- PC 一般已指向下一条指令。
- 访存次数:1。
- 特点:用于转移指令,便于程序浮动。
易错对比
基址寻址 vs 变址寻址
基址寻址 vs 变址寻址
寄存器寻址 vs 寄存器间接寻址
寄存器寻址 vs 寄存器间接寻址
- 寄存器寻址:操作数在寄存器中,访存次数 0。
- 寄存器间接寻址:寄存器中存放操作数地址,操作数在内存,访存次数 1。
间接寻址
间接寻址
- 一次间接寻址:访存 2 次。
- 第一次取有效地址,第二次取操作数。
CISC 与 RISC
RISC 核心特征
RISC 核心特征
- 指令少且精简。
- 指令长度固定。
- 寻址方式少。
- Load / Store 架构:只有取数和存数指令访问内存。
- 通用寄存器多。
- 硬布线控制为主。
- 适合流水线。
- 一个周期执行一条指令,CPI 接近 1。
- 编译优化容易。
CISC 核心特征
CISC 核心特征
- 指令多且复杂。
- 指令长度可变。
- 寻址方式多。
- 微程序控制为主。
- 通用寄存器较少。
- 多数指令可直接访存。
- 指令执行周期差异大。
- 编译优化较难。
注意:现代 CISC 和 RISC 界限逐渐模糊,CISC 处理器内部也常采用 RISC 思想。
本章高频考点与易错点
高频考点
- 扩展操作码编码计算。
- 各种寻址方式的有效地址计算。
- 各种寻址方式的访存次数。
- 基址、变址、相对寻址的区别。
- 一地址、零地址指令的隐含操作数。
- 指令字长、机器字长、存储字长的关系。
- CISC 与 RISC 的对比判断。
易错点
- 间接寻址访存次数:一次间接寻址取操作数需访存 2 次。
- 相对寻址 PC 值:通常 PC 已指向下一条指令。
- 基址与变址:基址面向系统,变址面向用户。
- 寄存器寻址与寄存器间接寻址:前者操作数在寄存器,后者操作数在内存。
- 指令字长与机器字长:二者无必然相等关系。
- 扩展操作码:短码不能是长码前缀,每级要留扩展标志。
- CISC / RISC:RISC 只有 load / store 访存,指令定长,适合流水线。