计组学习笔记之指令系统

1 指令格式

1.1 指令的定义
  • 指令是指示计算机执行某种操作的命令,是计算机运行的最小功能单位
  • 一台计算机的所有指令的集合构成该机的指令系统,也称为指令集
  • 一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令
1.2 指令的格式
  • 一条指令 = 操作码字段 + 地址码字段
    • 操作码:指出指令的功能
    • 地址码:给出被操作信息的地址

指令结构

1.3 四地址指令

假设指令字长 32 位,操作码占 8 位,则四个地址码各占 6 位

四地址指令格式

  • 指令含义:(A1)OP(A2)A3, A4= 下条指令的地址

  • 指令在内存中的分布

    四地址指令内存分布

  • 完成一条指令的访存次数(4 次)

    • 取指令:访存 1 次
    • 取两个操作数:访存 2 次
    • 存回结果:访存 1 次
  • 指令操作数直接寻址范围:26=64

1.4 三地址指令

假设指令字长和存储字长均为 32 位,操作码占 8 位,则三个地址码各占 8 位

三地址指令

  • 指令含义:(A1)OP(A2)A3

  • 指令在内存中的分布

    • 执行完当前指令后,程序计数器(PC)自动加一,执行下一条指令

    三地址指令内存分布

  • 完成一条指令的访存次数(4 次)

    • 取指令:访存 1 次
    • 取两个操作数:访存 2 次
    • 存回结果:访存 1 次
  • 指令操作数直接寻址范围:28=256

1.5 二地址指令

假设指令字长和存储字长均为 32 位,操作码占 8 位,则两个地址码各占 12 位

二地址指令

  • 指令含义:(A1)OP(A2)A1
  • 完成一条指令的访存次数(4 次)
    • 取指令:访存 1 次
    • 取两个操作数:访存 2 次
    • 存回结果:访存 1 次
  • 指令操作数直接寻址范围:212=4K
1.6 一地址指令

假设指令字长和存储字长均为 32 位,操作码占 8 位,则一个地址码占 24 位

一地址指令

  • 指令含义
    • OP(A1)A1 ,如加一、减一、取反、求补等(访存 3 次)
    • (ACC)OP(A1)ACC ,隐含约定的目的地址为 ACC (访存 2 次)
  • 完成一条指令的访存次数(3 次)
    • 取指令:访存 1 次
    • 取操作数:访存 1 次
    • 存回结果:访存 1 次
  • 指令操作数直接寻址范围:224=16M
1.7 零地址指令

零地址指令

  • 指令含义
    • 不需要操作数,若空操作、停机、关机、中断等
    • 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果押回栈顶
1.8 操作码
  • 分类
    • 定长操作码
      • 在指令字的最高位部分分配固定的若干位(定长)表示操作码
      • n 位 2n 条指令
      • 优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利
      • 缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限
    • 扩展操作码
      • 全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上
      • 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而増加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长
      • 优:在指令字长有限的前提下仍保持比较丰富的指令种类
      • 缺:増加了指令译码和分析的难度,使控制器的设计复杂化
      • 设地址长度为 n,上一层留出 m 种状态,则下一层可扩展出 m2n 种状态
1.9 操作类型
  • 数据传送
    • LOAD:把存储器中的数据放到寄存器中
    • STORE:把寄存器中的数据放到存储器中
  • 算术逻辑操作
    • 算术:加、减、乘、除、増1、减1、求补、浮点运算、十进制运算
    • 逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
  • 移位操作
    • 算术移位、逻辑移位、循环移位(带进位和不带进位)
  • 转移操作
    • 无条件转移 JMP
    • 条件转移
      • JZ:结果为0
      • JO:结果溢出
      • JC:结果有进位
    • 调用和返回 CALL 和 RETURN
    • 陷阱 (Trap) 与陷阱指令
  • 输入输出操作
    • CPU 寄存器与 IO 端口之间的数据传送

2 指令寻址

2.1 定义
  • 指令寻址:下一条欲执行的指令的指令地址
  • 机器字长:CPU 一次能处理的二进制数据的位数
  • 指令字长:一个指令字中包含二进制代码的位数
  • 存储字长:一个存储单元存储二进制代码的长度
  • 编址方式
    • 按字节编址
    • 按字编址
2.2 寻址方式
  • 顺序寻址:执行完当前指令,程序计数器自动加一,指向下一条指令的地址
  • 跳跃寻址:由转移指令指出下条指令的地址

寻址例子

3 数据寻址

3.1 操作数类型
  • 地址:无符号数表示
  • 数字:定点数、浮点数
  • 字符:ASCII 码
  • 逻辑数:逻辑运算
3.2 指令地址分类
  • 一地址指令:操作码 + 寻址特征 + 形式地址

    一地址指令

  • 二地址指令:操作码 + 寻址特征 + 形式地址1 + 寻址特征 + 形式地址2

    二地址指令

3.3 寻址方式

以下均假设指令字长 = 机器字长 = 存储字长,操作数为 3

1 立即寻址
  • 定义:形式地址 A 就是操作数本身,又称为立即数,一般采用补码形式(# 表示立即寻址)

立即寻址

  • 访存次数(共访存 1 次,暂不考虑存结果)
    • 取指令: 1 次
    • 执行指令: 0 次
  • 优点:指令执行阶段不访问主存,指令执行时间最短
  • 缺点:A 的位数限定了立即数的范围(设 A 为 n 位,范围仅为 [2n1,2n11]
2 直接寻址
  • 定义:指令字中的形式地址 A ,就是操作数的真是地址 EA,即 EA=A

    直接寻址

    直接寻址执行指令

  • 访存次数(共访存 2 次,暂不考虑存结果)

    • 取指令: 1 次
    • 执行指令:1 次
  • 优点:简单,指令执行阶段仅仅访问一次主存,不需要专门计算操作数的地址

  • 缺点:A 的位数决定了该指令操作数的寻址范围,操作数的地址不易修改

3 间接寻址
  • 定义:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也即操作数地址的地址,即 EA=(A)

    间接寻址

    间接寻址执行指令

  • 访存次数(n 次间址,共访存 2 + n 次,暂不考虑存结果)

    • 取指令:1次
    • 执行指令:n 次间址,访存 n + 1 次
  • 优点

    • 可扩大寻址范围(有效地址 EA 的位数大于形式地址 A 的位数)
    • 便于编制程序(用间接寻址可以方便地完成子程序返回)
  • 缺点:指令在执行阶段要多次访存

4 寄存器寻址
  • 定义:在指令字中直接给出操作数所在的寄存器的编号 Ri ,其操作数在由 Ri 所指的寄存器内,即 EA=Ri

    寄存器寻址

    image-20220119170605286

  • 访存次数(共访存 1 次,暂不考虑存结果)

    • 取指令: 1 次

    • 执行指令: 0 次

  • 优点

    • 指令在执行阶段不访问主存,只访问寄存器
    • 指令字短且执行速度快
    • 支持向量/矩阵运算
  • 缺点:寄存器价格昂贵,计算机中寄存器个数有限

5 寄存器间接寻址
  • 定义:寄存器 Ri 给出的不是一个操作数,而是操作数在主存中所在单元的地址,即 EA=(Ri)

    寄存器间接寻址

    寄存器间接寻址执行指令

  • 访存次数(共访存 2 次,暂不考虑存结果)

    • 取指令: 1 次
    • 执行指令:1 次
  • 特点:与一般的间接寻址相比速度更快,但指令的执行阶段需要访问主存

6 隐含寻址
  • 定义:不是明显的给出操作数的地址,而是在指令中隐含操作数的地址

    隐含寻址

  • 优点:有利于缩短指令字长

  • 缺点:需要增加存储操作数或隐含地址的硬件

7 基址寻址
  • 定义:将 CPU 对应基址寄存器(BR)的内容加上指令格式中的形式地址 A ,形成操作数的有效地址,即 EA=(BR)+A

    基址寻址

  • 类型:偏移寻址

    • 可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)
    • 用户不必考虑自已的程序存于主存的哪空间区域,故有利于多道程序设计,以及可用于编制浮动程序
  • 特点

    • 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定
    • 在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)
    • 当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定
8 变址寻址
  • 定义:有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 中的内容相加之和,即 EA=(IX)+A ,其中 IX 为变址寄存器(专用),也可用通用寄存器作为变址寄存器

    变址寻址

  • 特点

    • 变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址 A 不变(作为基地址)
  • 在数组处理过程中,可设定 A 为数组的首地址,不断改变变址寄存器 Ⅸ 的内容,便可很容易形成数组中任数据的地址,特别适合编制循环程序

9 相对寻址
  • 定义:把程序计数器 PC 的内容加上指令格式中的形式地址 A 而形成操作数的有效地址,即 EA=(PC)+A ,其中 A 是相对于当前指令地址的位移量,可正可负,补码表示

    相对寻址

  • 优点

    • 操作数的地址不是固定的,它随着 PC 值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动
    • 相对寻址广泛应用于转移指令
10 堆栈寻址
  • 定义:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址

    • 堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)

      堆栈寻址

3.4 寻址方式总结
寻址方式 有效地址 访存次数(指令执行期间)
隐含寻址 程序指定 0
立即寻址 A 即是操作数 0
直接寻址 EA=A 1
一次间接寻址 EA=(A) 2
寄存器寻址 EA=Ri 0
寄存器间接一次寻址 EA=(Ri) 1
相对寻址 EA=(PC)+A 1
基址寻址 EA=(BR)+A 1
变址寻址 EA=(IX)+A 1

4 CISC 和 RISC

4.1 设计思路
  • CISC
    • Complex Instruction Set Computer
    • 设计思路:一条指令完成一个复杂的基本功能
    • 代表:x86、用于笔记本、台式机
  • RISC
    • Reduced Instruction Set Computer
    • 设计思路:一条指令完成一个基本“动作”,多条指令组合完成一个复杂基本操作
    • 代表:ARM 架构,用于手机、平板
4.2 两者对比
类别 / 项目 CISC RISC
指令系统 复杂,庞大 简单,精简
指令数目 般大于200条 般小于100条
指令字长 不固定 定长
可访存指令 不加限制 只有 Load / Store 指令
各种指令执行时间 相差较大 绝大多数在一个周期内完成
各种指令使用频度 相差很大 都比较常用
通用寄存器数量 较少 较多
目标代码 难以用优化编译生成高效的目标代码程序 采用优化的编译程序,生成代码较为高效
控制方式 绝大多数为微程序控制 绝大多数为组合逻辑控制
指令流水线 可以通过一定方式实现 必须实现

5 本章总结

posted @   悟道九霄  阅读(1075)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示