02 指令 | 计算机组成原理
1. 指令系统
1. 指令系统概述
- 指令系统:是计算机硬件的语言系统,它是软件和硬件的主要界面,从系统结构的角度看,指令系统表征了计算机的基本功能,决定了机器所要求的能力
- 指令系统设计原则
- 完备性:提供的质量足够解决任何可解的问题
- 有效性:简洁加速常用操作,没有歧义
- 规整性:对称、匀齐、一致
- 兼容性:对于之前和之后的版本都能使用
- 完善的指令系统的组成部分
- 数据传送指令:
指令 - 输入输出指令:
指令 - 算术运算指令:
等指令 - 逻辑运算指令:
等指令 - 系统控制指令:中断等指令
- 程序控制指令:
等指令
- 数据传送指令:
2. 两种指令系统计算机 和
:复杂指令集计算机- 特点
- 指令系统复杂
- 指令周期长
- 各种指令都能访问存储器
- 用专用的寄存器
- 采用微程序控制
- 难以进行编译优化生成高效的目标代码
- 存在的问题
- 研制周期长
- 难以保证设计的准确性,难以调试和维护
- 机器的时钟周期长,降低了系统性能
- 效率低下
- 特点
:精简指令集计算机- 特点
- 简化的指令系统
- 以寄存器-寄存器的方式工作
- 指令周期短
- 采用大量通用寄存器,以减少访存次数
- 采用组合逻辑电路控制,不用或少用微程序控制
- 采用优化的编译系统,力求有效地支持高级语言程序
- 常用的
指令集
- 特点
2. 指令格式
1. 指令格式的组成
- 组成:指令 = 操作码 + 地址码;一条指令包括1个操作码和多个操作码
- 指令按组成分类
- 零地址指令
[OP]
- 一地址指令
[OP][Address1]
- 二地址指令(最常用)
[OP][Address1, Address2]
- 三地址指令(
风格)[OP][Address1, Address2, Address3]
- 多地址指令
- 零地址指令
2. 操作码的设计
- 操作码长度
- 定长操作码:指令操作码部分采用 固定长度 的编码
- 特点:译码简单,但是会有信息冗余
- 扩展操作码:指令的操作码部分采用 可变长度 的编码,将操作码的位数分为几种固定长度的格式,操作码的位数随地址数的减少而增加
- 优点:
- 缩短指令长度
- 减少程序总位数
- 增加指令字所能表示的信息
- 重要原则:使用频度高的指令对应更短的操作码;使用频度低的指令对应较长的操作码
- 优点:
- 定长操作码:指令操作码部分采用 固定长度 的编码
- 操作码相关计算
- 例:某指令系统指令字长16位,每个地址码为6位。若二地址指令15条,一地址指令34条,则剩下零地址指令最多有多少条?
解: 操作码按短到长进行扩展编码
二地址指令: (0000 ~ 1110)
一地址指令: 11110 (00000 ~ 11111);11111 (00000 ~ 00001)
零地址指令: 11111 (00010 – 11111); (000000 – 111111)
故零地址指令最多有: 种
- 例:某指令系统指令字长16位,每个地址码为6位。若二地址指令15条,一地址指令34条,则剩下零地址指令最多有多少条?
3. 寻址方式
1. 指令系统的寻址
- 指令 寻址和 操作数 寻址
2. 基本寻址方式分类
- 立即数寻址
- 方式:源操作数直接就在指令中
- 特点
- 指令执行时间短:直接从指令中取操作数
- 操作数大小受到地址字段的限制
- 广泛使用
- 存储器直接寻址
- 方式:操作数在 存储器 中,指令中的是操作数在存储器当中的 地址
- 特点
- 处理直接,简单
- 寻址空间受到指令的地址字段长度的限制
- 较少使用,只有少数的
位计算机和 位计算机使用
- 寄存器寻址
- 方式:操作数在 寄存器 中,指令中的是操作数存放的 寄存器编号
- 特点
- 只需要很短的地址字段:寄存器数量较少
- 无需访问内存储器,指令执行速度快
- 地址范围有限,可以为编程使用的寄存器不多
- 使用最多,是提高性能的常用手段
- 存储器间接寻址
- 方式:操作数和操作数的地址都在 存储器 中,指令中的是操作数地址在存储器当中的地址
- 特点
- 寻址空间大,灵活,易于编程
- 至少需要两次访存才能取到操作数,执行速度慢
- 寄存器间接寻址
- 方式:操作数在存储器中,操作数地址在 寄存器 中,指令中的是 寄存器编号
- 特点
- 寻址空间大,较为普遍
- 比存储器间接寻址少访问一次存储器
- 偏移寻址
- 相对寻址:
NextAddress = (PC) + A
:相对当前指令地址PC
,位移量为A
的单位 - 基址寻址:
NextAddress = (Base) + A
- 相对于基址
Base
处位移量为A
的单元 - 应用:程序 重定位
- 主要面向计算机系统
- 偏移位数较短
- 相对于基址
- 变址寻址:
NextAddress = (I) + A
- 相对于形式地址
A
位移量为(I)
的单元 - 应用:实现线性表元素的存取(如数组)
- 主要面向用户
- 偏移维数足以表示整个存储空间
- 相对于形式地址
- 相对寻址:
- 堆栈寻址
3. 寻址方式的确定
- 在操作码中给定寻址方式
- 专门的寻址方式位
4. 存储器编址单位
- 一般是字节编址(一个地址为一个字节)
4. 数据的表示
1. 数据的基本概念
- 数据变量的六要素:名称,类型,值,地址,作用域,生命周期
- 数据宽度
- 位
bit
:计算机处理存储传输信息的最小单位 - 字节
byte
:计算机中二进制信息的主要存放单位,现代计算机的主存是按字节编址,字节是最小的可寻址单位,1byte
= 8bit
s - 字
word
:表示被处理信息的单位,用来度量数据类型的宽度 - 字长
word length
:子长是指 数据通路的宽度,等于 内部总线的宽度或者运算器的位数或者通用寄存器的宽度等
字和字长的 区别
字是处理信息的单位,和字长的宽度可以一样也可以不一样,通常是字节
byte
的整数倍 - 位
2. 正数与负数
- 原码:用
0
表示正数,用1
表示负数val = +90
,二进制原码为0 1011010
val = -90
,二进制原码为1 1011010
- 反码:如果是负数,直接将二进制真值 逐位取反
- 补码:如果是负数,在反码的基础上 加一
- 移码:与补码的符号位相反:即 用
1
表示正数,用0
表示负数
3. 浮点数
-
符号位
S
:1表示负数,0表示正数 -
尾数
f
:尾数为原码,其中对小数进行 规格化,使得最高位总为1,然后隐含这一位的表示;因此单精度表示精度为bits
,双精度表示精度为bits
(尾数精度=尾数的位数 + 1) -
阶码
e
- 偏置常数
bias
:对于每一个阶数都要加上一个偏置常数,便于浮点数加减运算以及比较操作的时候进行 对阶操作 - 单精度的偏置常数为 127,双精度的偏置常数为 1023
为什么不是单精度的偏置常数不是
原本利用移码的操作应该加上
的固定值,但是 为了处理一些特殊情况:无穷 ,NaN
(Not a Number) 和 等,因此除去这些特殊的情况后设置的偏置常数为 - 偏置常数
-
转换公式(以单精度为例)
- 将二进制浮点转换为十进制
- 将十进制小数转换为二进制浮点型
- 对整数和小数进行二进制转换
- 规格化:整数部分只留下1
- 阶码加上 127
- 将二进制浮点转换为十进制
-
单精度范围:
-
双精度范围:
-
浮点数加法不符合结合律
4. 数值数据的十进制表示
码- 把十进制数看作字符串,0~9分别对应
,一位十进制数用八位二进制表示 - 正负数
- 方法一:直接加正号负号的
码:+
:2B Hex,-
:2D Hex - 方法二:符号位嵌入到最低位数字的ASCII码的高4位,省一个字节
- 正数:最低位数字的高四位不变
- 负数:最低位数字的高四位变为
0111
- 方法一:直接加正号负号的
- 把十进制数看作字符串,0~9分别对应
码- 思想:0~9每个十进制数位至少用4位二进制位来表示
- 有权码和无权码
-
有权码:表示每个十进制数位的4个二进制数位(称基2码)都有一个确定的权,如8421码
-
无权码:表示每个十进制数位的4个基2码没有确定的权,如余3码和格雷码
十进制数字 8421 余三码 格雷码 0 0000 0011 0000 1 0001 0100 0001 2 0010 0101 0011 3 0011 0110 0010 4 0100 0111 0110 5 0101 1000 1110 6 0110 1001 1010 7 0111 1010 1000 8 1000 1011 1100 9 1001 1100 0100
-
5. 字符数据的机器表示
- 7位
码 - 汉字以及国际字符编码:
6. 数据的度量和存储
-
数据的度量单位
度量单位 缩写 存储二进制换算关系 描述计算机通信带宽的换算关系 千字节 KB 兆字节 MB 千兆字节 GB 兆兆字节 TB -
数据的存储方式
- 大端方式:
最高有效位所在的地址是数的起始地址 - 小端方式:
最低有效位所在的地址是数的起始地址
- 大端方式:
-
数据对齐
- 按边界对齐(假定字的宽度为32位,存储器按字节编址)
- 字地址:4的倍数
- 半字地址:2的倍数
- 字节地址:任意等字节长度
- 不按边界对齐:存储更紧凑,但是会增加访存次数
- 按边界对齐(假定字的宽度为32位,存储器按字节编址)
7. 基本指令和指令类型
- 指令系统组成
- 数据传送指令:
、 、 、 等 - 算术运算指令:定点数,浮点数,十进制数字的运算
- 逻辑运算指令:
、 、 、 、 等 - 输入输出指令:
、 等 - 系统控制指令:启动IO设备,存取特殊寄存器指令等
- 程序控制指令:转移指令,循环控制指令,子程序调用以及返回,程序中断以及返回指令
- 数据传送指令:
- 使用子程序的优势
- 降低程序设计的复杂度
- 提高程序的可重用性
- 节省存储空间
- 是模块化程序设计的基础,子程序库
5. 程序的机器级表示
1. MIPS 指令系统介绍
- 指令长度:都是32位宽,按字地址对齐
- 三种指令格式
-
R-Type
:用于寄存器,两个操作数都是寄存器的运算指令字段 OP
rs
rt
rd
shamt
funct
含义 操作码 第一个源操作数寄存器 第二个操作数寄存器 结果寄存器 移位指令的位移量 功能码(op操作的特定变式) 位数 6 5 5 5 5 6 -
I-Type
:一个寄存器,一个立即数字段 OP
rs
rt
immediate
含义 操作码 源操作数寄存器 结果寄存器 立即数或者偏移地址数 位数 6 5 5 16 -
J-Type
:无条件跳转指令字段 OP
Address
含义 操作码 偏移地址 位数 6 26 - 无条件转移地址的低26位;将PC高4位拼上26位直接地址,最后添2个0, 就是32位目标地址
J-Type
为什么要添加两个0(左移2位)J-Type
跳转到传递的目标。但是,由于指令集限制为32位,并且6个用于操作码,因此仅26个可以用于跳转目标。这意味着J-Type
可以通过的距离受到限制;MIPS指令集可以这样定义:遇到J-Type
时,将PC的高4位添加到J-Type
的26位目标上,但是要注意的是,该指令是程序能跳的地址总是"字对齐的"。这意味着这些地址始终是4的倍数,因此地址的最后2位始终是0。这使我们可以不对跳转目标中的最后2位进行编码
-
- 指令类型
- 算术逻辑运算指令
- 数据传输指令
- 条件分支指令
- 无条件跳转指令
- 条件转移指令通常根据
Condition Codes
(条件码 / 状态位 / 标志位)进行转移- 标志位:
SF
:负数标志;OF
:溢出标志;CF
:进位指令;ZF
:零标志 - 设置
CF
和OF
- 设置
CF
标志时,运算结果被视为无符号数 - 设置
OF
标志时,运算结果被视为有符号数 - 区别
- 进/借位
CF
表示无符号数的运算结果是否超出范围,即使超出范围,如果保存进位或借位,运算结果仍然是正确的 - 溢出标志
OF
表示有符号数的运算结果是否超出范围,若超出范围,则运算结果不正确
- 进/借位
- 设置
- 标志位:
__EOF__

本文作者:RadiumGalaxy
本文链接:https://www.cnblogs.com/RadiumGalaxy/p/16795858.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/RadiumGalaxy/p/16795858.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
标签:
Courses
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话