Files

10 KiB
Raw Permalink Blame History

第7章 指令系统

📖 本章介绍机器指令系统的分类、寻址方式和指令格式设计。 🎯 重点理解寻址方式和指令格式设计


📋 本章目录


7.1 机器指令

7.1.1 指令的一般格式

[!info] 定义 机器指令是计算机能识别和执行的基本命令,由操作码和地址码组成。

graph LR
    subgraph "指令格式"
        OP[操作码] --> ADDR[地址码]
    end

操作码

功能:指明指令要完成的操作

长度

  • 固定长度:便于硬件设计,译码快
  • 可变长度:节省空间,译码复杂

地址码

功能:指出操作数地址、结果地址、下条指令地址

格式分类

graph TB
    A[指令格式] --> B[四地址指令]
    A --> C[三地址指令]
    A --> D[二地址指令]
    A --> E[一地址指令]
    A --> F[零地址指令]
格式 地址字段 操作 访存次数
四地址 A1, A2, A3, A4 (A1)OP(A2)→A3 4次
三地址 A1, A2, A3 (A1)OP(A2)→A3 4次
二地址 A1, A2 (A1)OP(A2)→A1 4次
一地址 A1 ACCOP(A1)→ACC 2次
零地址 栈操作 0-2次

[!example] 示例 四地址指令OP A1 A2 A3 A4

  • (A1) OP (A2) → A3
  • 下条指令地址 = A4

7.1.2 扩展操作码技术

[!info] 目的 在指令字长固定的情况下,增加指令种类。

原理:操作码长度随地址数减少而增加

graph TB
    subgraph "扩展操作码示例16位指令"
        A["4位操作码<br/>15条三地址指令"] --> B["8位操作码<br/>15条二地址指令"]
        B --> C["12位操作码<br/>15条一地址指令"]
        C --> D["16位操作码<br/>16条零地址指令"]
    end

设计原则

  • 使用频度高的指令用短操作码
  • 使用频度低的指令用长操作码
  • 为扩展留有余地

7.2 操作数类型和操作类型

7.2.1 操作数类型

类型 说明 示例
地址 无符号整数 指向存储器位置
数值 定点数、浮点数 算术运算
字符 ASCII码 文本处理
逻辑数 位串 逻辑运算

7.2.2 操作类型

数据传送类

指令 功能 示例
MOV 数据传送 MOV AX, BX
LOAD 从存储器取数 LOAD R1, [addr]
STORE 存数到存储器 STORE [addr], R1
PUSH/POP 栈操作 PUSH AX

算术逻辑类

指令 功能 示例
ADD/SUB 加/减 ADD AX, BX
MUL/DIV 乘/除 MUL BX
AND/OR/NOT 逻辑运算 AND AX, BX
CMP 比较 CMP AX, BX
SHL/SHR 移位 SHL AX, 1

控制转移类

指令 功能 示例
JMP 无条件跳转 JMP addr
JZ/JNZ 条件跳转 JZ addr
CALL 调用子程序 CALL addr
RET 返回 RET
INT 中断 INT 21H

7.3 寻址方式

[!info] 定义 寻址方式是指令中如何给出操作数地址或操作数的方式。

7.3.1 指令寻址

顺序寻址

graph LR
    PC[PC] --> |"PC+1"| NEXT[下一条指令]

跳跃寻址

graph LR
    PC[PC] --> |"JMP addr"| TARGET[目标指令]

7.3.2 数据寻址

指令格式

graph LR
    subgraph "数据寻址格式"
        OP[操作码] --> MOD[寻址特征] --> ADDR[形式地址]
    end

有效地址EA = f(寻址方式, 形式地址)

常见寻址方式

1. 立即寻址

[!info] 特点 操作数直接在指令中

格式OP #立即数

有效地址$EA = 指令地址 + 1$(操作数在指令中)

优点:速度快,不需要访存 缺点:操作数范围受地址字段限制

2. 直接寻址

[!info] 特点 地址字段直接给出操作数地址

格式OP A

有效地址EA = A

优点:简单,只需一次访存 缺点:寻址范围受地址字段限制

3. 间接寻址

[!info] 特点 地址字段给出的是操作数地址的地址

格式OP (A)

有效地址EA = (A)

优点:寻址范围大 缺点:多次访存,速度慢

graph LR
    A[形式地址A] --> |"第一次访存"| B[地址B]
    B --> |"第二次访存"| C[操作数]
4. 寄存器寻址

[!info] 特点 操作数在寄存器中

格式OP R

有效地址EA = R

优点:速度快,不需要访存 缺点:寄存器数量有限

5. 寄存器间接寻址

[!info] 特点 寄存器中存放的是操作数的地址

格式OP (R)

有效地址EA = (R)

优点:寻址范围大,只需一次访存 缺点:需要一次访存

6. 偏移寻址
基址寻址

格式OP A基址寄存器BR

有效地址EA = (BR) + A

特点

  • 便于程序重定位
  • 基址寄存器内容不变
  • 形式地址可变
变址寻址

格式OP A变址寄存器IX

有效地址EA = (IX) + A

特点

  • 便于数组操作
  • 变址寄存器内容可变
  • 形式地址不变

[!example] 数组访问示例 访问数组元素:EA = (IX) + A

  • A数组首地址
  • IX元素下标
  • 每次IX+1访问下一个元素
相对寻址

格式OP A

有效地址EA = (PC) + A

特点

  • 程序浮动
  • A是相对于PC的偏移量
7. 堆栈寻址

格式PUSH/POP 操作数

有效地址

  • PUSH先SP-1再存数
  • POP先取数再SP+1

特点后进先出LIFO

寻址方式对比

寻址方式 有效地址 访存次数 优点 缺点
立即寻址 操作数在指令中 0 速度快 范围小
直接寻址 EA=A 1 简单 范围小
间接寻址 EA=(A) 2+ 范围大 速度慢
寄存器寻址 EA=R 0 速度最快 数量有限
寄存器间接 EA=(R) 1 范围大 需要访存
基址寻址 EA=(BR)+A 1 便于重定位 需要基址寄存器
变址寻址 EA=(IX)+A 1 便于数组操作 需要变址寄存器
相对寻址 EA=(PC)+A 1 程序浮动 范围有限
堆栈寻址 栈顶 0-1 自动管理 只能栈操作

7.4 指令格式

7.4.1 指令格式设计考虑因素

因素 考虑内容
指令字长 固定/可变,长度选择
操作码 固定/可变,长度分配
地址码 地址个数,寻址方式
数据类型 支持的数据类型
寻址方式 提供哪些寻址方式

7.4.2 指令字长

固定字长

  • 优点:取指时间固定,硬件简单
  • 缺点:浪费空间

可变字长

  • 优点:节省空间
  • 缺点:取指时间不固定

7.4.3 指令格式举例

IBM 370指令格式

graph LR
    subgraph "IBM 370 指令格式"
        OP[操作码8位] --> R1[寄存器1] --> R2[寄存器2] --> B2[基址寄存器] --> D2[位移量]
    end

特点

  • 固定操作码长度8位
  • 基址+位移寻址
  • 16个通用寄存器

Intel 8086指令格式

graph LR
    subgraph "Intel 8086 指令格式"
        OP[操作码] --> MOD[寻址方式] --> R/M[寄存器/存储器] --> DISP[位移量]
    end

特点

  • 可变操作码长度
  • 多种寻址方式
  • 8个通用寄存器

7.4.4 指令系统设计原则

  1. 完备性:指令功能完整
  2. 规整性:指令格式统一
  3. 对称性:操作对称
  4. 可扩充性:便于扩展
  5. 兼容性:向上兼容

7.5 RISC技术

7.5.1 RISC与CISC

特性 CISC RISC
指令数量 多(几百条) 少(几十条)
指令长度 可变 固定
寻址方式 多种 少数几种
执行时间 不固定 固定(一个周期)
访存方式 多种指令可访存 只有LOAD/STORE
控制方式 微程序 硬布线
优化目标 缩短程序长度 提高执行速度

7.5.2 RISC特点

主要特点

  1. 指令数量少:只包含常用指令
  2. 指令长度固定:简化取指和译码
  3. 寻址方式少:简化寻址逻辑
  4. 只有LOAD/STORE访存:简化数据通路
  5. 大量寄存器:减少访存次数
  6. 硬布线控制:提高执行速度
  7. 流水线技术:提高并行度
  8. 优化编译:充分利用硬件

7.5.3 RISC优势

优势 说明
速度快 指令执行时间固定,便于流水线
硬件简单 控制逻辑简单,成本低
设计周期短 指令少,验证容易
功耗低 逻辑简单,功耗小

7.5.4 RISC vs CISC对比

graph TB
    subgraph "CISC"
        A1[复杂指令] --> B1[微程序执行]
        B1 --> C1[多周期]
    end

    subgraph "RISC"
        A2[简单指令] --> B2[硬布线执行]
        B2 --> C2[单周期]
        C2 --> D2[流水线]
    end

📝 本章小结

核心概念

  1. 指令格式:操作码 + 地址码
  2. 寻址方式:立即、直接、间接、寄存器、基址、变址、相对、堆栈
  3. 指令系统设计:完备性、规整性、可扩充性
  4. RISC技术:简化指令,提高速度

关键公式

  • 有效地址EA = f(寻址方式, 形式地址)
  • 基址寻址EA = (BR) + A
  • 变址寻址EA = (IX) + A
  • 相对寻址EA = (PC) + A

重点图示

[!summary] 必须掌握的内容

  1. 指令格式分类(四地址到零地址)
  2. 扩展操作码技术
  3. 各种寻址方式的计算方法
  4. RISC与CISC的区别

🧪 自测练习

概念题

  1. 比较各种指令格式的特点。
  2. 说明扩展操作码技术的原理。
  3. 解释RISC技术的主要特点。

计算题

  1. 给定指令字长和操作数地址,设计扩展操作码。
  2. 计算各种寻址方式下的有效地址。

分析题

  1. 设计一个简单的指令系统。
  2. 分析RISC和CISC的优缺点。

🔗 相关链接


本章难度: 中等偏难 重要程度: 重点