计组学习笔记之指令系统
1 指令格式
1.1 指令的定义
- 指令是指示计算机执行某种操作的命令,是计算机运行的最小功能单位
- 一台计算机的所有指令的集合构成该机的指令系统,也称为指令集
- 一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令
1.2 指令的格式
- 一条指令 = 操作码字段 + 地址码字段
- 操作码:指出指令的功能
- 地址码:给出被操作信息的地址
1.3 四地址指令
假设指令字长 32 位,操作码占 8 位,则四个地址码各占 6 位
-
指令含义: 下条指令的地址
-
指令在内存中的分布
-
完成一条指令的访存次数(4 次)
- 取指令:访存 1 次
- 取两个操作数:访存 2 次
- 存回结果:访存 1 次
-
指令操作数直接寻址范围:
1.4 三地址指令
假设指令字长和存储字长均为 32 位,操作码占 8 位,则三个地址码各占 8 位
-
指令含义:
-
指令在内存中的分布
- 执行完当前指令后,程序计数器(PC)自动加一,执行下一条指令
-
完成一条指令的访存次数(4 次)
- 取指令:访存 1 次
- 取两个操作数:访存 2 次
- 存回结果:访存 1 次
-
指令操作数直接寻址范围:
1.5 二地址指令
假设指令字长和存储字长均为 32 位,操作码占 8 位,则两个地址码各占 12 位
- 指令含义:
- 完成一条指令的访存次数(4 次)
- 取指令:访存 1 次
- 取两个操作数:访存 2 次
- 存回结果:访存 1 次
- 指令操作数直接寻址范围:
1.6 一地址指令
假设指令字长和存储字长均为 32 位,操作码占 8 位,则一个地址码占 24 位
- 指令含义
- ,如加一、减一、取反、求补等(访存 3 次)
- ,隐含约定的目的地址为 ACC (访存 2 次)
- 完成一条指令的访存次数(3 次)
- 取指令:访存 1 次
- 取操作数:访存 1 次
- 存回结果:访存 1 次
- 指令操作数直接寻址范围:
1.7 零地址指令
- 指令含义
- 不需要操作数,若空操作、停机、关机、中断等
- 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果押回栈顶
1.8 操作码
- 分类
- 定长操作码
- 在指令字的最高位部分分配固定的若干位(定长)表示操作码
- n 位 条指令
- 优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利
- 缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限
- 扩展操作码
- 全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上
- 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而増加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长
- 优:在指令字长有限的前提下仍保持比较丰富的指令种类
- 缺:増加了指令译码和分析的难度,使控制器的设计复杂化
- 设地址长度为 n,上一层留出 m 种状态,则下一层可扩展出 种状态
- 定长操作码
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 位,范围仅为 )
2 直接寻址
-
定义:指令字中的形式地址 A ,就是操作数的真是地址 EA,即
-
访存次数(共访存 2 次,暂不考虑存结果)
- 取指令: 1 次
- 执行指令:1 次
-
优点:简单,指令执行阶段仅仅访问一次主存,不需要专门计算操作数的地址
-
缺点:A 的位数决定了该指令操作数的寻址范围,操作数的地址不易修改
3 间接寻址
-
定义:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也即操作数地址的地址,即
-
访存次数(n 次间址,共访存 2 + n 次,暂不考虑存结果)
- 取指令:1次
- 执行指令:n 次间址,访存 n + 1 次
-
优点
- 可扩大寻址范围(有效地址 EA 的位数大于形式地址 A 的位数)
- 便于编制程序(用间接寻址可以方便地完成子程序返回)
-
缺点:指令在执行阶段要多次访存
4 寄存器寻址
-
定义:在指令字中直接给出操作数所在的寄存器的编号 ,其操作数在由 所指的寄存器内,即
-
访存次数(共访存 1 次,暂不考虑存结果)
-
取指令: 1 次
-
执行指令: 0 次
-
-
优点
- 指令在执行阶段不访问主存,只访问寄存器
- 指令字短且执行速度快
- 支持向量/矩阵运算
-
缺点:寄存器价格昂贵,计算机中寄存器个数有限
5 寄存器间接寻址
-
定义:寄存器 给出的不是一个操作数,而是操作数在主存中所在单元的地址,即
-
访存次数(共访存 2 次,暂不考虑存结果)
- 取指令: 1 次
- 执行指令:1 次
-
特点:与一般的间接寻址相比速度更快,但指令的执行阶段需要访问主存
6 隐含寻址
-
定义:不是明显的给出操作数的地址,而是在指令中隐含操作数的地址
-
优点:有利于缩短指令字长
-
缺点:需要增加存储操作数或隐含地址的硬件
7 基址寻址
-
定义:将 CPU 对应基址寄存器(BR)的内容加上指令格式中的形式地址 A ,形成操作数的有效地址,即
-
类型:偏移寻址
- 可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)
- 用户不必考虑自已的程序存于主存的哪空间区域,故有利于多道程序设计,以及可用于编制浮动程序
-
特点
- 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定
- 在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)
- 当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定
8 变址寻址
-
定义:有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 中的内容相加之和,即 ,其中 IX 为变址寄存器(专用),也可用通用寄存器作为变址寄存器
-
特点
- 变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址 A 不变(作为基地址)
-
在数组处理过程中,可设定 A 为数组的首地址,不断改变变址寄存器 Ⅸ 的内容,便可很容易形成数组中任数据的地址,特别适合编制循环程序
9 相对寻址
-
定义:把程序计数器 PC 的内容加上指令格式中的形式地址 A 而形成操作数的有效地址,即 ,其中 A 是相对于当前指令地址的位移量,可正可负,补码表示
-
优点
- 操作数的地址不是固定的,它随着 PC 值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动
- 相对寻址广泛应用于转移指令
10 堆栈寻址
-
定义:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址
-
堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)
-
3.4 寻址方式总结
寻址方式 | 有效地址 | 访存次数(指令执行期间) |
---|---|---|
隐含寻址 | 程序指定 | 0 |
立即寻址 | 即是操作数 | 0 |
直接寻址 | 1 | |
一次间接寻址 | 2 | |
寄存器寻址 | 0 | |
寄存器间接一次寻址 | 1 | |
相对寻址 | 1 | |
基址寻址 | 1 | |
变址寻址 | 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 本章总结
-
思维导图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!