Files
obsidian/计算机组成原理/学习笔记/07_指令系统_补充版.md

13 KiB
Raw 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次

地址码就像菜谱上的"材料"四地址指令把A1和A2的数相加结果存到A3下条指令在A4三地址指令把A1和A2的数相加结果存到A3二地址指令把A1和A2的数相加结果存到A1一地址指令把ACC和A1的数相加结果存到ACC零地址指令弹出栈顶两个数相加结果压入栈。

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

设计原则

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

扩展操作码就像邮政编码系统短操作码常用指令用短编码节省空间长操作码不常用指令用长编码种类多。4位操作码15条三地址指令1111保留8位操作码15条二地址指令12位操作码15条一地址指令16位操作码16条零地址指令。


7.2 操作数类型和操作类型

7.2.1 操作数类型

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

地址是无符号整数指向存储器位置用于寻址操作数值是定点数或浮点数用于算术运算字符是ASCII码用于文本处理逻辑数用于逻辑运算和位操作。

7.2.2 操作类型

数据传送LOAD从存储器取数据到寄存器、STORE从寄存器存数据到存储器

算术逻辑运算ADD加法、SUB减法、AND逻辑与、OR逻辑或

移位操作SHL逻辑左移、SHR逻辑右移、SAL算术左移、SAR算术右移

转移操作JMP无条件转移、JZ条件转移、CALL调用子程序、RET返回

输入输出IN从I/O端口读数据、OUT向I/O端口写数据

数据传送像从仓库取材料到工作台;算术逻辑运算像把两个数加起来或相减;移位操作像所有位向左移动;转移操作像跳转到指定位置;输入输出像从外部设备读数据。


7.3 寻址方式

7.3.1 指令寻址

顺序寻址PC = PC + 1按顺序执行指令 跳跃寻址PC = 跳转地址,跳转到指定地址执行

指令寻址像找下一条指令的方式:顺序寻址按顺序执行下一条指令,跳跃寻址跳转到指定地址执行。

7.3.2 数据寻址

立即寻址操作数在指令中比如MOV A, #5把5存到A。东西就在你手里速度快不需要访问内存只能用于常数。

直接寻址操作数地址在指令中比如MOV A, [1000]把地址1000的数存到A。东西在仓库的某个位置简单直接访问地址范围有限。

间接寻址操作数地址的地址在指令中比如MOV A, 1000。仓库里有一张纸条告诉你东西在哪里,灵活可以动态改变地址,但速度慢需要多次访问内存。

寄存器寻址操作数在寄存器中比如MOV A, R1把R1的数存到A。东西就在你手边的盒子里速度最快不需要访问内存寄存器数量有限。

寄存器间接寻址操作数地址在寄存器中比如MOV A, [R1]。盒子里有一张纸条告诉你东西在哪里,灵活可以动态改变地址,需要访问内存。

基址寻址:操作数地址 = 基址 + 偏移量比如MOV A, [BASE + 100]。东西在仓库的某个区域,用区域号+偏移量定位,适合程序重定位。

变址寻址:操作数地址 = 变址 + 偏移量比如MOV A, [INDEX + 100]。东西在仓库的某个位置,用变址+偏移量定位,适合数组访问。

相对寻址:操作数地址 = PC + 偏移量比如JMP +10跳转到PC+10的位置。东西在当前位置的某个偏移位置适合相对跳转。


7.4 指令格式

7.4.1 指令格式设计原则

设计原则

  1. 规整性:指令长度对齐,便于译码
  2. 高效性:常用指令短,不常用指令长
  3. 兼容性:保持向后兼容
  4. 扩展性:留有扩展空间

指令格式设计就像设计邮票:规整性指令长度对齐便于译码,高效性常用指令短不常用指令长,兼容性新处理器能运行旧程序,扩展性保留一些编码用于未来扩展。

7.4.2 指令格式举例

x86指令格式:变长指令,格式复杂,代码密度高兼容性好,译码复杂。 ARM指令格式:固定长度指令,格式简单,译码简单速度快,代码密度低。


7.5 RISC技术

7.5.1 RISC与CISC对比

特性 RISC CISC
指令数量
指令长度 固定 可变
寻址方式 简单 复杂
指令周期 单周期 多周期
流水线 支持 部分支持
编译器 复杂 简单

RISC精简指令集指令少简单速度快容易实现流水线但编译器复杂代码密度低CISC复杂指令集指令多复杂功能强编译器简单代码密度高但难以实现流水线速度慢。

ARM处理器手机、MIPS处理器嵌入式是RISCx86处理器个人电脑是CISC。

7.5.2 RISC特点

主要特点

  1. 指令数量少:通常只有几十条指令
  2. 指令长度固定:所有指令长度相同
  3. 寻址方式简单:只有几种简单的寻址方式
  4. 单周期执行:大多数指令在一个周期内完成
  5. 流水线支持:容易实现流水线
  6. 大量寄存器通常有32个以上寄存器
  7. 硬布线控制:用硬布线实现控制单元

指令数量少容易实现速度快但功能有限;指令长度固定译码简单容易实现流水线但代码密度低;寻址方式简单译码简单速度快但灵活性差;单周期执行速度快容易实现流水线但某些复杂指令需要多个周期;流水线支持提高吞吐率但需要处理流水线冲突;大量寄存器减少访存次数速度快但增加硬件成本;硬布线控制速度快但不灵活难以修改。


📝 本章小结

核心概念

  1. 指令格式:操作码 + 地址码
  2. 寻址方式:立即寻址、直接寻址、间接寻址等
  3. 指令类型:数据传送、算术逻辑、移位、转移、输入输出
  4. RISC技术:精简指令集,速度快

关键术语

术语 英文 含义
指令 Instruction 机器指令
操作码 Operation Code 指明操作类型
地址码 Address Code 指明操作数地址
寻址方式 Addressing Mode 找到操作数的方式
RISC Reduced Instruction Set Computer 精简指令集计算机
CISC Complex Instruction Set Computer 复杂指令集计算机

重点图示

[!summary] 必须掌握的图

  1. 指令格式图
  2. 各种寻址方式图
  3. 扩展操作码图
  4. RISC与CISC对比图

🧪 例题与解析

例题1指令格式设计

题目设计一个16位指令系统要求支持15条三地址指令、15条二地址指令、15条一地址指令、16条零地址指令。

答案

三地址指令4位操作码1111保留3个×4位=12位地址码指令数2⁴-1=15条。 二地址指令8位操作码1111xxxxxxxx≠11112个×4位=8位地址码指令数15条。 一地址指令12位操作码1111xxxxxxxxxxxxxxxx≠111111111个×4位=4位地址码指令数15条。 零地址指令16位操作码1111xxxxxxxxxxxx0位地址码指令数16条。

例题2寻址方式分析

题目:分析以下指令的寻址方式:

  1. MOV A, #5
  2. MOV A, [1000]
  3. MOV A, R1
  4. MOV A, [R1]
  5. MOV A, [BASE + 100]

答案

  1. MOV A, #5立即寻址操作数5在指令中速度快不需要访问内存。
  2. MOV A, [1000]直接寻址操作数在地址1000简单直接访问。
  3. MOV A, R1寄存器寻址操作数在寄存器R1速度最快不需要访问内存。
  4. MOV A, [R1]寄存器间接寻址R1指向的地址的数灵活可以动态改变地址。
  5. MOV A, [BASE + 100]基址寻址BASE+100的数适合程序重定位。

例题3RISC与CISC比较

题目比较RISC和CISC的特点。

答案

RISC指令数量少几十条、指令长度固定、寻址方式简单、单周期执行、支持流水线、编译器复杂、寄存器多、硬布线控制CISC指令数量多几百条、指令长度可变、寻址方式复杂、多周期执行、部分支持流水线、编译器简单、寄存器少、微程序控制。

RISC像精简工具工具少简单速度快容易使用效率高但功能有限CISC像复杂工具工具多复杂功能强功能强大使用方便但使用复杂效率低。

例题4扩展操作码设计

题目设计一个12位指令系统要求支持15条二地址指令、15条一地址指令、16条零地址指令。

答案

二地址指令4位操作码1111保留2个×4位=8位地址码指令数2⁴-1=15条。 一地址指令8位操作码1111xxxxxxxx≠11111个×4位=4位地址码指令数15条。 零地址指令12位操作码1111xxxxxxxx0位地址码指令数16条。

例题5寻址方式计算

题目某计算机有16位地址线8位数据线采用直接寻址方式求寻址范围。

答案

16位地址线可以表示2¹⁶=65536个地址即有65536个存储单元。8位数据线表示每个单元存8位数据1字节总容量65536×8位=64KB。

这就像一个仓库有65536个格子每个格子能放8个鸡蛋总容量就是64KB。


知识点速记卡

考前快速过一遍30秒回忆整章核心

指令 = 操作码 + 地址码。操作码指明做什么,地址码指明操作数在哪。

地址码个数四地址A1 OP A2 → A3下条在A4、三地址→A3、二地址→A1、一地址ACC OP A1 → ACC、零地址栈操作

扩展操作码:地址数越少,操作码越长,指令种类越多。常用指令用短操作码,不常用指令用长操作码。

七种寻址方式:立即(数在指令里,最快)、直接(地址在指令里)、间接(地址指向的位置存着真正地址)、寄存器(数在寄存器,最快之一)、寄存器间接(寄存器里存地址)、基址(基址+偏移,适合重定位)、变址(变址+偏移适合数组、相对PC+偏移,适合跳转)。

RISC vs CISCRISC指令少、固定长度、单周期、流水线友好、硬布线控制ARM/MIPSCISC指令多、可变长度、多周期、微程序控制x86

指令格式设计:规整性(长度对齐)、高效性(常用指令短)、兼容性(向后兼容)、扩展性(留余地)。


🔗 相关链接


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