自学教程 学编程从这里开始

指令系统(指令集)

本课目标

理解指令与指令集的基本概念;掌握指令格式、寻址方式;区分RISC与CISC架构;看懂指令执行的基本流程,明白CPU如何解析并执行一条指令。

4.1 指令与指令集概述

指令 Instruction:CPU能够识别、执行的最小命令。一条指令用来完成一次简单操作,例如读取数据、加法运算、跳转。
指令集 Instruction Set:CPU支持的全部指令的集合,是硬件和软件之间的接口。程序员编写的高级语言代码,最终会编译/解释成CPU指令集中的指令。

一条指令通常包含两部分:

  1. 操作码 Opcode:规定要执行什么操作(加、减、读、写、跳转)
  2. 地址码 Address Code:指明参与运算的数据存放位置(寄存器、内存地址)

指令存储在存储器中,和数据一样以二进制编码保存,这也是冯·诺依曼“存储程序”思想的体现。

4.2 指令格式分类

按照地址码数量划分:

  1. 零地址指令 Zero-address:无地址码,操作数默认在栈中,多用于栈式计算机
  2. 一地址指令 One-address:一个地址,一个操作数,另一个隐含在累加器
  3. 二地址指令 Two-address:两个地址,源操作数、目的操作数,最常用
  4. 三地址指令 Three-address:源1、源2、目的,可读性强,但指令字长更长

指令字长:一条指令占用的二进制位数。

  • 定长指令:所有指令长度固定,CPU译码简单,RISC常用
  • 变长指令:指令长度不固定,CISC常用,编码紧凑,但硬件译码复杂

4.3 寻址方式 Addressing Mode

寻址:寻找操作数有效地址 EA 的方式,用来定位指令要处理的数据在哪里。

  • 立即寻址 Immediate Addressing:操作数直接写在指令内,无需访问内存,速度快
  • 直接寻址 Direct Addressing:地址码是内存单元地址,访问一次内存拿数据
  • 间接寻址 Indirect Addressing:地址码指向内存单元,单元内才是真实数据地址,需要多次访存
  • 寄存器寻址 Register Addressing:操作数放在CPU寄存器,无需访存,速度最快
  • 寄存器间接寻址 Register Indirect Addressing:寄存器存放内存地址,需要访问内存
  • 变址寻址 Indexed Addressing:基址+偏移量,适合数组遍历
  • 基址寻址 Base Addressing:基址寄存器+偏移,广泛用于程序重定位、虚拟内存

4.4 CISC 与 RISC

CISC Complex Instruction Set Computer 复杂指令集

代表架构:x86(Intel/AMD PC处理器)

  • 指令数量多,指令功能强弱差异大;
  • 指令长度可变;
  • 部分指令需要多个时钟周期完成;
  • 硬件译码电路复杂。

RISC Reduced Instruction Set Computer 精简指令集

代表架构:ARM、RISC-V

  • 指令数量少,指令功能简单规整;
  • 定长指令;
  • 大多指令单周期执行;
  • 硬件简单,易于流水线实现;复杂任务靠多条简单指令组合完成。

4.5 指令执行过程

CPU执行一条指令,循环执行取指、译码、执行、写回:

  1. 取指 Fetch:PC程序计数器给出指令地址,从内存读取指令送入指令寄存器IR;PC自动自增,指向下一条指令。
  2. 译码 Decode:控制器解析操作码与地址码,判断操作类型、找到操作数。
  3. 执行 Execute:ALU完成算术/逻辑运算,或完成内存读写、跳转。
  4. 写回 Write-back:运算结果写回寄存器或主存。

跳转指令会修改PC的值,打破顺序执行,实现分支、循环。

本课小结

指令是CPU底层执行的命令,由操作码+地址码组成。寻址方式用来定位操作数。CISC指令丰富变长,RISC指令精简定长,更适合流水线。CPU持续重复取指-译码-执行-写回的指令周期,驱动程序运行。

思考练习

  1. 一条指令由哪两部分组成,各自作用是什么?
  2. 寄存器寻址为什么速度快于直接寻址?
  3. 简述RISC与CISC的主要区别。
  4. 简述一条指令完整执行的4个阶段。
标签:

0 条笔记