← 返回学习笔记

Lecture 11:知识 - 指令系统的基本概念

408 学习笔记:Lecture 11:知识 - 指令系统的基本概念。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。

本页目录

描述:指令集体系结构(ISA)是软硬件的交界面:程序员/编译器看到的是寄存器、指令、地址空间和异常等规则,CPU 内部如何用流水线、微码或电路实现则是微结构问题。

4.1 指令、指令集与 ISA

定义:#指令

指令是计算机执行某种操作的命令,是机器可识别并执行的最小功能单位。程序本质上是按既定顺序组织的一串指令及其数据。

定义:#指令集

一台计算机全部机器指令的集合称为其指令系统/指令集。机器只能直接执行本 ISA 规定的指令,不能直接执行其他 ISA 的机器码;例如 x86 与 ARM 的二进制指令通常不可互换,需要重新编译、翻译或模拟。

定义:#ISA

指令集体系结构是软件与硬件之间的可见约定。它说明“机器对外能做什么、如何编码和访问”,而不规定某型号 CPU 内部一定如何实现。ISA 是计算机体系结构的重要内容;同一个 ISA 可由不同主频、流水线深度、Cache 组织的处理器实现。

4.2 ISA 规定的内容

范畴 ISA 要规定的内容
数据 支持的数据类型、长度与编码格式
指令 指令种类、语义、操作码与指令格式
地址与寻址 寻址方式、可访问地址空间大小
寄存器 程序可见寄存器的个数、位数、编号,以及控制寄存器定义
I/O I/O 空间编址方式、I/O 结构与数据传送方式
异常与状态 中断结构、机器工作状态及其切换
保护 存储保护方式与访问权限规则
  • 对应用程序,ISA 决定一段机器级代码是否能运行;对编译器,ISA 决定可选指令、寄存器分配和调用约定的基础;对 OS,ISA 决定特权状态、中断、地址转换等机制。
  • 微程序、控制器设计、流水线划分等属于 ISA 下的具体实现;它们可能改变性能,却不必改变已有程序的二进制兼容性。

4.3 指令的组成与长度

4.3.1 基本格式

一条指令通常由操作码和地址码组成:

字段 作用
操作码(opcode) 说明执行何种操作,是识别指令功能、理解操作数使用方式的关键信息
地址码(address field) 给出操作数位置、转移目标或其他相关地址信息;具体含义由寻址方式决定
  • 地址码不一定永远是“内存绝对地址”:它可能编码寄存器号、位移量、立即数、间接地址或寻址方式字段。
  • 指令字长是一条指令含有的二进制位数;机器字长是 CPU 整数通路/寄存器等的宽度,二者没有必然相等关系。

4.3.2 指令长度组织

分类 判据 特点
单字长/多字长/半字长指令 指令字长相对机器字长的倍数关系 只描述编码长度与机器字长的关系;取指所需访存次数还取决于存储字长、总线与 Cache 等组织
定长指令字 指令系统中各指令长度相同 译码和取指边界简单,适合规则流水
变长指令字 不同指令可使用不同长度 常用操作可短编码,表达力高,但取指和译码更复杂
  • 单字长不等于“只能有一个操作数”,半字长也不等于“半条指令”;它们是指令编码长度和机器字长度的关系。
  • 判断定长/变长只看同一 ISA 内指令长度是否一致,不看不同机器之间的字长差异。

4.4 本章知识地图与学习接口

本章后续内容可按以下链路理解:

ISA 定义可见资源 -> 指令格式编码 -> 寻址获得操作数 -> 对齐/端序决定内存字节解释 -> CISC/RISC 影响实现取舍 -> 高级语言经编译、汇编、链接落到机器指令

  • 指令格式决定操作码和字段如何装入指令字;寻址方式决定地址码如何得到有效地址;数据对齐与端序决定多字节数据怎样落在内存。
  • 高级语言的选择、循环、函数调用最终都要转换为比较、分支、跳转、栈和寄存器操作,后续讲会从机器级角度展开。

4.4.1 从源代码到 ISA 指令

工具 输入 输出/职责
编译器 高级语言源代码 生成汇编代码或目标代码,并依据 ISA 选择指令、分配寄存器、安排控制流
汇编器 汇编语言 把助记符和符号地址翻译为可重定位机器目标代码
链接器 多个目标文件与库 解析外部符号、合并段并完成地址重定位,生成可执行文件
  • 编译器、汇编器、链接器都服务于“把人类可读代码变成符合目标 ISA 的机器码”,但分工不同。编译器不能绕开 ISA,汇编器也不能让 ARM 汇编直接变成 x86 机器码。
  • 操作系统加载程序后,CPU 取到的最终是机器指令;源文件、汇编源文件和可重定位目标文件都不是 CPU 直接按原样执行的最终形式。

4.4.2 指令设计的基本权衡

  • 操作码位数越多,可编码的指令种类越多;但在定长指令中会压缩地址码或立即数字段的可用位数。
  • 地址码字段越多,一条指令可直接描述更多操作数;但指令长度、取指带宽与译码复杂度也会增加,因此很多 ISA 使用寄存器操作数、隐含操作数或不同长度指令折中。
  • ISA 一经广泛采用,兼容性很重要。新处理器可在内部彻底改变实现,只要保持程序可见行为和指令语义不变,旧二进制程序仍可运行。

题型:#ISA 与微结构辨析

第一部分:判断方法

  • 问“程序可见的寄存器、指令、地址空间、异常入口”通常属于 ISA。
  • 问“几级 Cache、几级流水、是否超标量、具体控制器电路”通常属于微结构或实现;除非题目明确把这些暴露为 ISA 特性。
  • 问“能否直接执行”看指令编码是否属于同一 ISA;操作系统相同、主频相同都不能替代 ISA 兼容。

第二部分:易错点

  • 不要把“指令集”说成“某程序包含的指令”;它是机器支持的全部指令集合。
  • 不要因数据和指令都是二进制,就认为不同架构二进制程序通用;操作码、寄存器、寻址和异常规则均可能不同。

相关知识

4.5 本节复盘

  • 指令是机器执行操作的最小命令;一台机器的全部指令构成指令集,直接执行能力由 ISA 决定。
  • ISA 规定数据、指令、寻址、寄存器、I/O、中断/状态和保护等软件可见规则,是软硬件交界面。
  • 一条指令的核心字段是操作码和地址码;地址码可以表示多种操作数/目标信息,指令字长与机器字长没有固定关系。
  • 定长指令按统一长度组织,变长指令允许不同长度;后续所有寻址、格式与机器级代码题都建立在这套 ISA 规则上。