【期末复习,408 考研计组全程笔记 】— 第4章 :指令系统

文章目录

  • 前言
    • (一):指令系统的基本概念
      • [1. 指令与指令系统](#1. 指令与指令系统)
      • [2. 指令集体系结构(ISA)](#2. 指令集体系结构(ISA))
        • [1. 核心概念辨析:ISA vs 微架构](#1. 核心概念辨析:ISA vs 微架构)
        • [2. 两种主流 ISA 设计风格对比](#2. 两种主流 ISA 设计风格对比)
        • [3. ISA 在整个计算机系统中的位置](#3. ISA 在整个计算机系统中的位置)
      • [2. 指令字长、机器字长与存储字长](#2. 指令字长、机器字长与存储字长)
    • (二):指令格式
      • [1. 指令的基本组成](#1. 指令的基本组成)
      • [2. 按操作数地址码数目分类的 5 种指令](#2. 按操作数地址码数目分类的 5 种指令)
      • [3. 按操作码长度是否固定分类](#3. 按操作码长度是否固定分类)
      • [4. 按操作类型分类](#4. 按操作类型分类)
    • (三):寻址方式
      • [1. 指令寻址](#1. 指令寻址)
      • [2. 数据寻址](#2. 数据寻址)
    • (四):核心知识对比总结
    • 总结

前言

本文旨在帮助计算机专业学生及考研备考者系统梳理"指令系统"的核心知识体系。从指令的基本概念、指令集架构(ISA),到最容易被混淆的 10 种数据寻址方式,都力求做到条理清晰、考点突出。无论你是初次学习计算机组成原理,还是正在备战 408 统考,都能通过本文建立起完整的知识框架,轻松应对指令格式、基址与变址辨析、访存次数计算等高频考点。


(一):指令系统的基本概念

1. 指令与指令系统

  • 指令:计算机运行的最小功能单位。
  • 指令系统:一台计算机所有指令的集合,它处于硬件和软件的交界面上,决定了计算机的基本功能。
  • 一、一句话刻在脑子里

2. 指令集体系结构(ISA)

指令系统只是ISA的一部分。 ISA是软件与硬件之间一份完整的"合同",它定义了程序员(或编译器)编写机器级程序时可见的所有硬件特性,但不规定硬件如何实现

  • 对软件(编译器、操作系统)来说:你只负责按这份合同写代码,不用管下面是什么 CPU。
  • 对硬件(CPU 设计师)来说:你只要保证这份合同被完美执行,内部用什么技术,你说了算。

二、ISA 到底包含什么?(七大要素,逐条精讲)

序号 包含内容 通俗解释 408 考试关联
1 指令集 这台计算机的"单词本"。能执行的所有指令的集合。 ADD、MOV、JMP、CALL 等
2 寄存器模型 程序员能用的"临时存放处"有哪些。 多少个通用寄存器?PC 是什么?PSW 存什么?
3 寻址方式 数据能从哪里取?立即给?寄存器里拿?内存里找? 立即、直接、间接、寄存器、基址、变址、相对寻址
4 数据表示 数据在机器里怎么存放?整数用补码?浮点数用 IEEE 754? 有符号整数、浮点数、字符编码
5 存储器模型 内存怎么编址?按字节还是按字?地址是 32 位还是 64 位? 按字节编址、寻址空间大小、大小端模式
6 中断与异常机制 发生中断时,硬件自动做什么?怎么找到服务程序? 中断隐指令(关中断、保存断点、取中断向量)
7 I/O 模型 CPU 怎么和外设沟通?用专用 IN/OUT 指令,还是直接用访存指令? 独立编址 vs 统一编址
1. 核心概念辨析:ISA vs 微架构

ISA(指令集体系结构)

  • 本质:一份规范 / 合同
  • 比喻:篮球规则手册
  • 谁定义:架构师(制定统一标准)
  • 是否可变:同一系列的 CPU 必须完全相同
  • 对软件:可见,编译器必须严格遵守

微架构(硬件具体实现)

  • 本质:一个工程设计方案
  • 比喻:某个具体的球馆(地板材质、灯光、座椅)
  • 谁定义:芯片工程师(自由发挥)
  • 是否可变:同一系列的每代产品可以完全不同
  • 对软件:不可见,软件不用知道

经典实例

  • ISA 相同:Intel Core i5、i7、i9 都是 x86 系列。
  • 微架构不同:每一代产品(Skylake、Ice Lake、Raptor Lake)内部的流水线、缓存、执行单元设计全都不同。
  • 结果 :你十年前的 Windows 软件,在今天最新款 Intel CPU 上照样能跑,因为 ISA 没变
2. 两种主流 ISA 设计风格对比
维度 RISC(精简指令集) CISC(复杂指令集)
指令集 指令少且简单,功能单一 指令多且复杂,功能强大
指令长度 定长(如全是 32 位) 变长(1~15 字节)
寻址方式 极少,以寄存器为主 极多,支持复杂内存操作
访存限制 Load/Store 架构(只有取数/存数指令能访存) 允许运算指令直接访问内存
控制器实现 硬布线控制器(快) 微程序控制器(灵活)
I/O 模型 统一编址(用 LOAD/STORE 做 I/O) 独立编址(专用 IN/OUT 指令)
典型代表 ARM、MIPS、RISC-V x86
3. ISA 在整个计算机系统中的位置
text 复制代码
┌─────────────────────────────────────────────┐
│          应用软件(微信,游戏,浏览器)        │
└─────────────────────┬───────────────────────┘
                      │
┌─────────────────────▼───────────────────────┐
│         操作系统(Windows,Linux)            │
└─────────────────────┬───────────────────────┘
                      │
┌─────────────────────▼───────────────────────┐
│       编译器(将高级语言翻译成机器码)          │
└─────────────────────┬───────────────────────┘
                      │
          ╔═══════════▼═════════════╗
          ║  ISA(软件/硬件分界线)   ║
          ║  • 指令集                ║
          ║  • 寄存器模型            ║
          ║  • 寻址方式              ║
          ║  • 数据类型              ║
          ║  • 存储器模型            ║
          ║  • 中断/异常机制         ║
          ║  • I/O 模型              ║
          ╚═══════════▼═════════════╝
                      │
┌─────────────────────▼───────────────────────┐
│       微架构(硬件具体实现,对软件透明)        │
│  • 流水线深度?• 几发射?• 多少执行单元?      │
│  • 缓存多大?• 分支预测算法?• 用什么工艺?    │
└─────────────────────┬───────────────────────┘
                      │
┌─────────────────────▼───────────────────────┐
│       数字逻辑电路(晶体管,与或非门)           │
└─────────────────────────────────────────────┘

六、终极记忆口诀

ISA 是合同,微架构是施工方案;

CISC 指令复杂用微程序,RISC 指令精简用硬布线;

统一编址用 LOAD/STORE,独立编址用 IN/OUT;

合同不变软件恒通,施工万变硬件各异。

2. 指令字长、机器字长与存储字长

在理解指令格式前,需要厘清几个极易混淆的"字长"概念:

  • 机器字长:计算机进行一次整数运算所能处理的二进制数据的位数(通常等于 CPU 内部寄存器宽度)。
  • 指令字长 :指一条指令所占用的存储空间大小,通常为字节的整数倍。
    • 半字长指令:指令长度 = 机器字长 / 2
    • 单字长指令:指令长度 = 机器字长
    • 双字长指令:指令长度 = 机器字长 × 2
  • 数据字:某一个字表示的是一个数据。
  • 指令字:某一个字表示的是一条指令。

(二):指令格式

1. 指令的基本组成

一条完整的指令,在逻辑上分为两部分:

[操作码 (Opcode)] + [地址码 (Address Code)]

  • 操作码:指出该指令应执行什么性质的操作和具有何种功能。位置可以在主存,也可以在寄存器。
  • 地址码 :指出被操作信息的地址(或数据本身)。作用:
    ① 指出操作数所在地址
    ② 指出操作后结果存放的地址
    ③ 指出下一条指令的地址
  • 地址码可以表示的内容:可以是操作数本身(立即数)、操作数的地址、操作数地址的计算方法。

2. 按操作数地址码数目分类的 5 种指令

根据指令中地址码的个数,可将指令分为以下 5 类。考点提示:需要特别关注它们在指令执行阶段的"访存次数"。

零地址指令(| OP |)

  • 格式:只有操作码,无地址码字段。
  • 适用:不需要操作数的指令(如空操作、停机、关中断);或者操作数隐含在堆栈中的堆栈类指令(参与运算的两个数隐含从栈顶、次栈顶弹出,结果压入栈顶)。

一地址指令(| OP | A1 |)

  • 适用情况 1:只有目的操作数的单操作数指令。OP(A1) -> A1,如加 1、减 1、求反、求补。
  • 适用情况 2:隐含约定目的地址的双操作数指令。另一个操作数由累加器 ACC 提供:(ACC) OP (A1) -> ACC

二地址指令(| OP | A1 | A2 |)

  • 常用逻辑:(A1) OP (A2) -> A2。A1 为源操作数地址,A2 为目的操作数地址。
  • 适用:各类算术运算(加、减、乘、除)。
  • 访存情况:操作数不一定都在内存,可以是一个/两个在寄存器。

三地址指令(| OP | A1 | A2 | A3(结果) |)

  • 常用逻辑:(A1) OP (A2) -> A3。A1、A2 为源操作数地址,A3 为结果存放地址。
  • 访存情况:若均为内存地址,需要 4 次访存(取指 1 次 + 取操作数 A1 1 次 + 取操作数 A2 1 次 + 存放结果 A3 1 次)。

四地址指令(| OP | A1 | A2 | A3(结果) | A4(下址) |)

  • 常用逻辑:(A1) OP (A2) -> A3,A4 为下一条指令地址。
  • 访存情况:若均为内存地址,同样需要 4 次访存。

知识笔记

3. 按操作码长度是否固定分类

  • 定长操作码指令:指令最高位部分分配固定的若干位(定长)表示操作码。n 位操作码对应 2^n 条指令。硬件设计简单,但信息冗余。
  • 扩展操作码指令 :操作码长度随地址码数量的变化而变化(地址码减少,操作码增加)。
    设计原则:不允许较短的操作码成为较长操作码的前缀。
    优化分配:频率高的指令分配较短的操作码(缩短指令长度);频率低的指令分配较长的操作码。
    扩展计算:设地址码长度为 n,上一层留出 m 种状态,下一层就可以扩展出 m × 2^n 种状态。

4. 按操作类型分类

  • 数据传送类:主要进行主存与 CPU 之间的数据传送。
  • 运算类:算术运算和逻辑运算。
  • 程序控制类:这类指令不处理数据本身,而是专门用来改变程序指令的执行顺序。它通过修改程序计数器(PC)的值来实现跳转、循环或调用。改变程序执行顺序(如跳转指令)。
  • 输入输出类 :进行 CPU 与 I/O 设备之间的数据传送。

(三):寻址方式

寻址方式是指确定本条指令的操作数地址或下一条指令地址的方法。

  • 指令寻址:确定下一条要执行指令的地址。
  • 数据寻址:确定当前指令操作数的地址。

1. 指令寻址

顺序寻址:程序按顺序执行。下一条指令的地址 = (PC) + n(n 为当前指令字长)。注意,这里 n 与指令字长和按字节/字编址方式有关。

  • 举例:若字长 16 位,按字编址,一条指令占 1 个字,则 PC+1;若按字节编址,则 PC+2。
  • 定长指令可一次性预估下条指令位置。

跳跃寻址 :定义:通过执行跳转类指令,强行改变PC的值,使程序不再顺序执行,而是跳到指定的新地址

2. 数据寻址

数据在计算机中可能存在于内存寄存器 **、堆栈**、I/O 端口指令本身(立即数)中。数据寻址的核心是明确如何根据指令中的地址码(形式地址 A),计算出操作数的真实存放位置(有效地址 EA)。

以下为 408 考试的 10 种数据寻址方式 极致拆解:

① 立即寻址(Immediate Addressing)

  • 操作:指令中直接给出了操作数(称为立即数),通常用 # 号标识。如 MOV AX, #10
  • 公式:有效地址 EA 无,操作数 = A。
  • 优点:取指后即可获得操作数,只需访存一次(取指令),执行阶段不再访问内存,速度极快。
  • 缺点:A 的位数限制了立即数表示范围。例如 A 为 8 位时范围仅为 -128~127。
  • 用途:通常用于对某寄存器或内存单元赋初值。

② 直接寻址(Direct Addressing)

  • 操作:指令中的形式地址 A 就是操作数的真实地址。EA = A。
  • 公式:EA = A。
  • 访存次数:2 次(取指 1 次 + 取操作数 1 次)。
  • 优点:简单直观,不需要经过变换。
  • 缺点:操作数有效地址仅由 A 决定,A 的位数受限于指令长度,导致寻址范围较小。

③ 隐含寻址(Implied Addressing)

  • 操作:不显式地给出操作数地址,地址隐含在操作码或某个专用寄存器中。
  • 典型例子:如某操作码为 ADD,必须要两个操作数。但指令只给出了一个操作数地址,另一个操作数默认隐含在累加器 ACC 中。
  • 优点:有利于缩短指令字长(减少了一个地址码)。

④ 间接寻址(Indirect Addressing)

⑤ 寄存器寻址(Register Addressing)

  • 操作:指令的地址码字段直接给出寄存器编号。

  • 公式:EA = Ri,操作数就在寄存器 Ri 中。

  • 优点:执行阶段无需访存,速度快;地址码位数少,缩短指令字长(即使计算机有 1024 个寄存器,只需 10 位即可表示)。

  • 缺点:寄存器价格昂贵,个数有限。

⑥ 寄存器间接寻址(Register Indirect Addressing)

  • 操作:寄存器 Ri 的内容不是操作数,而是操作数所在的主存单元地址号。
  • 公式:EA = (Ri)。
  • 访存次数:1 次(取指 1 次 + 取操作数 1 次,寄存器本身不需要访存)。
  • 优点:便于编制循环程序。
  • 缺点:需要访存一次去取操作数。

⑦ 基址寻址(Base Addressing)

  • 操作:将 CPU 中的基址寄存器(BR)内容与指令中的形式地址 A 相加,形成有效地址。

  • 公式:EA = A + (BR)。

  • 分类:

    • 隐式:计算机内设专用基址寄存器 BR,指令特征位反映。
    • 显式:一组通用寄存器,由用户明确哪个寄存器用作基址。
  • 特点(考研极容易考):

    • 基址寄存器中存放当前程序的首地址。
    • 在程序运行过程中,基址寄存器内容不变,而形式地址 A 作为偏移量可变。
    • 基址内容由操作系统确定,程序过程中不能由用户随意改变。
  • 优点:① 扩大操作数的寻址范围;② 解决多道程序问题(便于程序浮动/重定位,操作系统只需修改基址寄存器的内容,就能实现整段程序在内存中的浮动)。

⑧ 变址寻址(Index Addressing)

  • 操作:有效地址 EA 是 指令中形式地址 A 与 变址寄存器 IX 的内容之和。
  • 公式:EA = A + (IX)。
  • 特点(与基址寻址形成极度重要的对比):
    • 基址寻址:程序员操作偏移地址 A,基址寄存器内容由 OS 控制,BR 不变,A 变。
    • 变址寻址:程序员操作变址寄存器 IX,偏移地址固定不变,IX 变,A 不变。
  • 变址寄存器面向用户,用户程序可以修改其内容。
  • 优点:① 扩大操作数寻址范围;② 适合处理数组问题和循环程序------把指令字中的形式地址 A 设置为数组的首地址,在循环中不断改变变址寄存器 IX 的内容。
  • 易错考点:变址常与其他寻址混用,如:先变址再变址 EA=(A)+(IX) 或 先变址再间址 EA=(A+(IX))

⑨ 相对寻址(Relative Addressing)

  • 操作:有效地址是指令中形式地址 A 与程序计数器 PC 内容之和。
  • 公式:EA = A + (PC)。
  • 理论基础:基于程序的局部性原理。
  • 特点:偏移量 A 可正可负(通常用补码表示)。
  • 优点:① 专门用于转移类指令,便于编制浮动程序(程序正确运行不受程序所在的物理地址限制)。

💡 基址、变址、相对对比总结

这三种都可以看作是"偏移寻址",它们的访存次数均为 1 次。基址和变址的区别在于谁动谁不动;相对寻址依托 PC,用于跳转。

⑩ 堆栈寻址(Stack Addressing)

  • 操作:操作数地址由堆栈指针 SP 指出,采用先进后出(FILO)原则。
  • 分类:
    • 硬堆栈:使用多个寄存器实现。
    • 软堆栈:指定一段存储空间作为堆栈,由堆栈指针 SP 指出栈顶地址。
  • 进栈与出栈(SP 指针修改规则,必考难点):
    • SP 指针的修改与编址方式密切相关:
      • 按字编址:进栈 (SP)-1 -> SP;出栈 (SP)+1 -> SP。
      • 按字节编址(以存储字长 16 位为例,1 个字 = 2 个字节):进栈 (SP)-2 -> SP;出栈 (SP)+2 -> SP。

(四):核心知识对比总结

数据寻址解决的是:当前指令的操作数从哪里取? 下面是最重要的 10 种数据寻址方式终极对比表:

序号 寻址方式 形式地址 A 的含义 有效地址 EA 公式 操作数位置 执行阶段访存次数 典型用途
立即寻址 就是操作数本身 无(操作数 = A) 指令字中 0 次 给寄存器/内存赋初值
直接寻址 操作数的内存地址 EA = A 内存 1 次 访问固定内存单元
隐含寻址 指令中不显式给出 隐含在 ACC 或操作码中 寄存器 0 次 缩短指令字长
间接寻址 存放 EA 的内存地址 EA = (A) 内存 2 次(一次间址) 扩大寻址范围,子程序返回
寄存器寻址 寄存器编号 EA = Ri 寄存器 0 次 速度快,缩短指令字长
寄存器间接寻址 寄存器编号 EA = (Ri) 内存 1 次 循环程序中取数组元素
基址寻址 偏移量 EA = A + (BR) 内存 1 次 程序重定位(OS 管理 BR)
变址寻址 数组首地址 EA = A + (IX) 内存 1 次 数组遍历(用户修改 IX)
相对寻址 相对于 PC 的偏移量 EA = A + (PC) 内存 1 次 转移指令,位置无关代码
堆栈寻址 无地址码 EA = (SP) 栈顶 0~1 次 函数调用、中断现场保存

基址 vs 变址 vs 相对寻址

对比维度 基址寻址 变址寻址 相对寻址
公式 EA = A + (BR) EA = A + (IX) EA = A + (PC)
谁提供基地址 基址寄存器 BR 指令中的形式地址 A 程序计数器 PC
谁提供偏移量 指令中的形式地址 A 变址寄存器 IX 指令中的形式地址 A
谁可变 A 可变,BR 不变 IX 可变,A 不变 A 可变,PC 自动变
谁控制 操作系统 用户程序 硬件自动
核心用途 程序重定位 数组遍历、循环 转移指令、浮动程序

重定位是指程序在运行时,可以被加载到内存的任意位置并正确执行,而无需修改程序本身的代码。

总结

本文从计算机组成原理的核心考点"指令系统"出发,沿着基本概念 → 指令格式 → 寻址方式 → 核心对比的主线逐层展开。关键复习要点包括:

  1. 操作码与地址码:操作码定义"干什么",地址码指出"操作数在哪以及结果放哪"。
  2. 五类指令:零地址到四地址,对应的访存次数是高频考点,必须熟记。
  3. 扩展操作码:利用"短操作码不能是长操作码的前缀"原则合理分配编码空间。
  4. 10 种寻址方式:立即、直接、间接、寄存器、寄存器间接、基址、变址、相对、堆栈------每种方式的 EA 公式和执行阶段访存次数是重中之重。
  5. 偏移寻址三大金刚------基址寻址(OS 控制 BR,用于程序重定位)、变址寻址(用户控制 IX,用于数组遍历)、相对寻址(PC 自动给出基地址,用于转移指令)。

建议读者反复练习寻址方式的访存次数计算,并借助文末的对比表格强化记忆。掌握这些内容,指令系统将不再是"玄学",而是你高分答卷上最稳定的得分点。

相关推荐
早茶cc1 小时前
sqli1-5 9报错注入 笔记
笔记
摇滚侠1 小时前
Java 全栈开发实战教程 课程笔记 34-36
java·笔记
今儿敲了吗2 小时前
Python——函数基础
开发语言·笔记·python
不爱记笔记2 小时前
音视频转笔记工具横评2026,通义听悟、Ai好记、NotebookLM 实测对比
人工智能·笔记·ai·音视频·飞书·obsidian
kels88993 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
mifengxing4 小时前
计算机组成原理概述
笔记·考研·计算机组成原理·复习笔记
最后的最后、7965 小时前
SQLi-Labs 六关 SQL 注入过关笔记
数据库·笔记·sql
筱谙5 小时前
BES BLE CTKD 完整学习笔记
笔记·学习
会编程的土豆5 小时前
数据库mysql八股
数据库·笔记·八股