* * * # 计算机指令系统(考研复试终极整理版) ## 一、指令系统概述 **指令系统**(ISA)是计算机硬件与软件的接口,定义了CPU能执行的所有指令集合,是考研高频核心考点。 **核心特性**: 1. **完备性**:支持所有必要操作(如算术、逻辑、控制) 2. **有效性**:常用指令执行速度快(如RISC固定长度指令) 3. **兼容性**:系列机保持指令集向下兼容(如x86系列) 4. **规整性**:指令格式对称统一(如操作数类型一致性) * * * ## 二、指令格式 ### 1\. 基本结构 `操作码OP + 地址码A1/A2/A3/A4` - **操作码**:指令功能类型(如ADD、MOV) - **地址码**:操作数地址或下条指令地址 ### 2\. 地址码类型(按操作数数量) | 类型 | 格式 | 访存次数 | 典型应用场景 | | --- | --- | --- | --- | | **四地址** | OP A1 A2 A3 A4 | 4次 | 早期计算机(已淘汰) | | **三地址** | OP A1 A2 A3 | 4次 | 科学计算(如矩阵运算) | | **二地址** | OP A1 A2(A1为结果) | 4次 | 通用运算(如x86架构) | | **一地址** | OP A1(隐含ACC) | 2次 | 累加器架构(早期CPU) | | **零地址** | OP(隐含栈顶操作) | 0次 | 堆栈计算机(如JVM) | **注**:现代计算机以**二地址指令**为主,通过寄存器减少访存次数 * * * ## 三、操作码设计 ### 1\. 编码方式 | 类型 | 特点 | 适用场景 | | --- | --- | --- | | **定长操作码** | 所有指令操作码位数相同 | RISC架构(如ARM) | | **变长操作码** | 高频指令短编码,低频长编码 | CISC架构(如x86) | ### 2\. 操作码扩展技术(高频计算题) **例题**:设计指令系统包含零地址指令16条、一地址15条、二地址15条、三地址15条,地址码4位。 **扩展编码解法**: 1. 三地址指令:4位OP(0000-1110)→15条,剩余1111扩展 2. 二地址指令:8位OP(1111 0000-1111 1110)→15条,剩余1111 1111扩展 3. 一地址指令:12位OP(1111 1111 0000-1111 1111 1110)→15条 4. 零地址指令:16位OP(1111 1111 1111 0000-1111 1111 1111)→16条 * * * ## 四、寻址方式(重点对比) ### 1\. 操作数寻址方式 | 寻址方式 | 有效地址计算 | 特点与应用场景 | | --- | --- | --- | | **立即寻址** | 操作数=指令中的立即数 | 快速赋值(如MOV AX, 5) | | **直接寻址** | EA=A | 寻址范围小(如静态变量访问) | | **寄存器寻址** | 操作数在寄存器R中 | 高速访问(如ADD R1, R2) | | **间接寻址** | EA=(A) | 支持指针操作(如链表遍历) | | **基址寻址** | EA=基址寄存器 + 偏移量 | 动态重定位(如进程内存管理) | | **变址寻址** | EA=变址寄存器 + 偏移量 | 数组遍历(如A\[i\]访问) | | **相对寻址** | EA=PC + 偏移量 | 程序跳转(如JMP指令) | **注**: - **相对寻址与基址寻址区别**:基址寄存器内容由OS设定,变址寄存器由用户设定 - **隐含寻址**:操作数隐含在指令中(如PUSH/POP使用栈顶指针SP) * * * ## 五、CISC与RISC对比 | 对比维度 | CISC(x86) | RISC(ARM/RISC-V) | | --- | --- | --- | | **指令长度** | 变长(1-15字节) | 定长(4字节) | | **寻址方式** | 复杂(10+种) | 简单(≤5种) | | **寄存器数量** | 较少(8-16个) | 较多(32个) | | **流水线效率** | 低(指令复杂度高) | 高(指令规整) | | **典型应用** | 桌面/服务器(兼容性要求高) | 嵌入式/移动设备(低功耗) | * * * ## 六、典型真题解析 **题目1**:某指令系统采用变长操作码,地址码4位,若三地址指令15条、二地址指令12条、一地址指令32条,求零地址指令最大数量。 **解析**: 1. 三地址指令:4位OP(0000-1110)→15条,剩余1111扩展 2. 二地址指令:8位OP(1111 0000-1111 1011)→12条,剩余1111 1100-1111 1111 3. 一地址指令:12位OP(剩余4位扩展,共4×16=64条,取32条) 4. 零地址指令:剩余编码空间=64-32=32条 → 最大32条 **题目2**:说明基址寻址与变址寻址的区别。 **答**: - **基址寻址**:基址寄存器内容由OS设定,用于程序重定位(如进程内存空间划分) - **变址寻址**:变址寄存器由用户设定,用于数组遍历(如循环访问A\[i\]) * * * ## 七、易错点总结 1. **指令字长≠机器字长**:指令长度可灵活设计(如x86指令1-15字节) 2. **间接寻址访存次数**:一次间接寻址需2次访存(取地址+取数据) 3. **相对寻址偏移量计算**:偏移量为补码,需符号扩展(如8位偏移扩展为32位) 4. **操作码扩展陷阱**:扩展标志位需预留(如1111作为扩展窗口) * * * **复习建议**: 1. 重点掌握操作码扩展设计与寻址方式计算题 2. 对比CISC/RISC特性,结合ARM/x86实例理解 3. 结合真题练习指令格式分析(如给定二进制指令解析操作码和地址码) 4. 理解寻址方式在高级语言中的映射(如数组→变址寻址、指针→间接寻址)