C2 数据表示、寻址方式与指令系统
1 数据表示
-
数据表示
-
定义:机器硬件能直接识别和引用的数据类型
-
条件:相应的运算指令和运算硬件(处理部件)
-
分类:基本数据表示、高级数据表示、自定义数据表示
-
目标:缩小高级语言和机器语言间的语义差别;提高性能/价格;节省处理时间和存储空间
-
实现:最小的存储空间、最简单的存取算法
tips:数据表示是数据类型的子集
数据表示的确定实质上是软、硬件的取舍问题
-
-
数据结构
- 目标:最大限度满足应用要求、最简化的方法实现
- 实现:通过数据表示和软件映象相结合方法实现
-
数据表示&数据结构
数据表示 数据结构 实现 由硬件实现的数据类型 由软件实现的数据类型 是软硬件的界面 是软硬件的界面 -
高级数据表示
-
自定义数据表示
-
带标识符的数据表示(对高级程序员透明)
优点 缺点 简化指令系统和程序设计 使程序所占用的主存空间增加 简化编译程序 降低指令的执行速度 便于一致性校验 必须用专门的指令完成标识符的初始化 能由硬件自动完成数据类型的变换 支持数据库系统的实现与数据类型无关的要求 为软件调试和应用软件开发提供支持 -
数据描述符(描述复杂和多维的结构类型)
-
带标识符与数据描述符的区别
- 标识符是和每一个数据相连的,合存在一个存储单元中,描述单个数据的类型特征
- 描述符是个数据分开放的
-
-
向量数组数据表示
-
堆栈数据表示
- 有利于编译和子程序调用
- 有丰富的堆栈操作类指令且功能很强
- 有力的支持高级语言程序的编译、逆波兰表达式
- 有力的支持子程序的嵌套和递归调用
-
-
引入数据表示的原则
- 看系统的效率是否提高、是否减少了 实现时间和所需的存储空间
- 看引入数据表示后,其通用性和利用率是否高
-
浮点数尾数下溢处理方法
- 截断法
- 舍入法
- 恒置“1”法
- 查表舍入法
2 寻址方式
- 寻址方式:指令按什么方式寻找(访问)到所需的操作数或信息的
- 寻找操作数及其地址的技术成为寻址技术
- 编址方式
- 定义:对各种存储设备进行编码的方法
- 编址单位:字编址、字节编址、位编址 、块编址
- 字节编址
- 优点:有利于符号处理
- 缺点:地址信息浪费、存储器空间浪费、读写逻辑复杂、大端与小端问题
- 寻址方式分析
- 面向主存
- 面向通用寄存器
- 面向堆栈
- 寻址方式种类
- 寄存器寻址
- 立即寻址
- 直接寻址
- 间接寻址
- 相对寻址
- 变址寻址
- 寄存器间接寻址
- 自增自减寻址
- 比例寻址
- 逻辑地址与主存物理地址
- 逻辑地址是程序员编写程序时使用的地址
- 物理地址是程序在主存中的实际地址
- 映射实际上是压缩
- 定位方式(重定位)
- 程序需要定位的主要原因
- 程序的独立性
- 程序的模块化设计
- 数据结构在程序运行过程中,其大小往往是变化的
- 有些程序本身很大,大于分配给它的主存物理空间
- 主要的定位方式
- 直接定位方式(程序装入主存之前,指令和数据的主存已经确定)
- 静态定位(程序装入主存的过程中进行地址变换,确定 指令和数据的地址)
- 动态定位(在程序执行过程中,当访问到相应的指令或数据时才进行地址变换)
- 程序需要定位的主要原因
3 指令系统的设计和优化
-
指令系统是从程序设计者看到的机器的主要属性,是软硬件分界面的一个主要标志
-
指令系统的设计主要包括指令功能和指令格式的设计
-
指令类型:
- 非特权型:供应用程序员用,也可供系统程序员使用,包括算术逻辑运算、浮点运算…
- 特权型:供系统程序员,用户无权使用,包括启动I/O、停机等待、存储管理保护…
-
指令系统设计的基本原则—>如何支持编译系统能高效、简易地将源程序翻译成目标代码
- 规整性
- 对称性
- 独立性和全能性
- 正交性
- 可组合性
- 可扩充性
-
指令的组成----->操作码+地址码
- 操作码
- 操作种类:加、减、乘、除、数据传送、移位、转移、输入输出
- 操作数描述
- 地址码
- 地址:直接地址、间接地址、立即数、寄存器编号、变址寄存器编号
- 地址的附加信息:偏移量、块长度、跳距
- 寻址方式:直接寻址、间接寻址、立即数寻址、变址寻址、相对寻址、寄存器寻址
- 操作码
-
指令操作码的优化
-
操作码的三种编码方法👇
-
固定长度
-
Huffman编码(又叫最小概率合并法)
-
扩展编码
三种编码方法对比 固定长度 Huffman编码 扩展编码 规整性 好 不好 折衷 解码 简单 复杂 折衷 占用空间 大 小 折衷
-
-
操作码的优化表示
-
信息源熵:
H = − ∑ p i l o g 2 p i H=-\sum p_ilog_2p_i H=−∑pilog2pi -
信息冗余量:
操 作 码 的 实 际 平 均 长 度 − H 操 作 码 的 实 际 平 均 长 度 \frac {操作码的实际平均长度-H}{操作码的实际平均长度} 操作码的实际平均长度操作码的实际平均长度−H
-
-
Huffman编码
例1👇
假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中岀现的概率如下表,计算采用 Huffman编码法的操作码平均长度,并计算固定长操作码和 Huffman操作码的信息冗余量。
指令 I1 I2 I3 I4 I5 I6 I7 概率 0.45 0.30 0.15 0.05 0.03 0.01 0.01 解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OC4WsDeS-1625152669956)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210626150051230.png)]
操 作 码 平 均 长 度 = 0.45 ∗ 1 + 0.3 ∗ 2 + 0.15 ∗ 3 + 0.05 ∗ 4 + 0.03 ∗ 5 + 0.01 ∗ 6 + 0.01 ∗ 6 = 1.97 操作码平均长度=0.45*1+0.3*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=1.97 操作码平均长度=0.45∗1+0.3∗2+0.15∗3+0.05∗4+0.03∗5+0.01∗6+0.01∗6=1.97熵 H = − ( 0.45 ∗ l o g 2 0.45 + 0.30 ∗ l o g 2 0.30 + ⋯ + 0.01 ∗ l o g 2 0.01 ) = 1.95 熵H=-(0.45*log_20.45+0.30*log_20.30+\cdots+0.01*log_20.01)=1.95 熵H=−(0.45∗log20.45+0.30∗log20.30+⋯+0.01∗log20.01)=1.95
信 息 冗 余 量 = 操 作 码 平 均 长 度 − H 操 作 码 平 均 长 度 = 0.02 1.97 = 1.015 % 信息冗余量=\frac {操作码平均长度-H}{操作码平均长度}=\frac {0.02}{1.97}=1.015\% 信息冗余量=操作码平均长度操作码平均长度−H=1.970.02=1.015%
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lOvwPfxv-1625152669958)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210626152028661.png)]
-
-
指令字格式的优化
-
基础:初步设计的指令集
-
目标:减少指令长度,提高指令性能
-
优化原则:
- 采用高概率优先思想,对高频率指令,缩短指令长度,提高效率
- 地址码长度富裕时,采用不同的寻址方式或不同的地址制,增加功能
- 地址码长度紧张时,采用特定的寻址方式或增加指令字长,满足功能
-
地址码个数选择:零地址、一地址、二地址、三地址、二地址寄存器型
地址数目 程序的长度 程序存储量 程序执行速度 适用场合 三地址 最短 最大 一般 向量,矩阵运算为主 二地址 较短 很大 很低 一般不采用 一地址 较长 较大 较快 连续运算(累加),硬件结构简单 零地址 最长 最小 最低 嵌套,递归,变量较多 二地址寄存器型 一般 最小 最快 一般商用处理机使用 -
缩短地址码长度的方法
- 用一个短地址码表示一个大地址空间
- 用间址寻址方式缩短地址码长度方法
- 用变址寻址方式缩短地址码长度
- 用寄存器间接寻址方式缩短地址码长度
-
4 指令系统的发展和改进
-
优化指令系统设计的3个阶段:
- CISC--------复杂指令系统计算机
- RISC--------精简指令系统计算机
- VLIW-------超长指令字
关键在软硬件的功能分配,系统的综合性能时间与空间;执行、编译、编写时间
-
按CISC方向发展与改进指令系统
- 面向目标程序的优化实现改进
- 面向高级语言的优化实现改进
- 面向操作系统的优化实现改进
-
CISC的主要特点
- 指令系统庞大,指令功能复杂,指令格式、寻址方式多
- 绝大多数指令需要多个机器周期完成
- 各种指令都可访问存储器
- 采用微程序控制
- 有专用寄存器
- 难以用优化编译技术生成高效的目标代码程序
-
CISC存在的问题
- 指令系统庞大,指令功能复杂,指令格式、寻址方式多
- 执行速度慢
- 难以优化编译,编译程序复杂
- 80%的指令在20%的运行时间使用(二八法则)
- 无法并行
- 无法兼容
-
为什么CISC指令系统复杂?
- 减少语义差距
- 减少存储空间,提高速度
- 为了向上兼容
-
按RISC方向发展与改进指令系统
-
RISC的主要特点/设计原则
- 减少了CPI,RISC的速度要比CISC块3倍左右,关键是RISC的CPI减少了
- 采用硬布线控制逻辑
- 减少指令和寻址方式的种类,使用频度很高的指令
- 使用固定的指令格式
- 所有指令在一个机器周期完成
- 扩大通用寄存器个数
- 采用LOAD/STORE结构
- 指令执行过程中设置多级流水线等
- 十分强调优化编译技术的作用
- RISC设计思想也可以用于CISC中
-
RISC结构采用的基本技术
- 采用硬联实现和微程序固件实现相结合的技术
- 在CPU中设置数量较大的寄存器组,并采用重叠寄存器窗口的技术
- 指令的执行采用流水和延迟转移技术
- 采用认真设计和优化编译系统设计的技术
-
RISC技术优点
- 简化指令系统设计
- 提高机器的执行速度和效率
- 降低 设计成本,提高系统可靠性
- 提供直接支持高级语言的能力,简化编译程序的设计
-
RISC技术的不足
- 指令少,加重汇编程序员的负担
- 浮点运算和虚拟存储器支持不足
- 编译程序难写
-
CISC与RISC的对比
功能 CISC RISC 指令系统 复杂、庞大 简单、精确 指令条数 >200 <100 指令格式 >4 <4 寻址方式 >4 <4 指令字长 不固定 32bit 可访存指令 不加限制 只有LOAD/STORE 各种指令使用频率 相差太大 相差不大 各种指令执行时间 相差太大 绝大多数一周期完成 优化编译系统 很难 较容易 程序源代码长度 短 长 控制逻辑实现方式 绝大多数微程序控制 绝大多数位硬连线控制 |
| 可访存指令 | 不加限制 | 只有LOAD/STORE |
| 各种指令使用频率 | 相差太大 | 相差不大 |
| 各种指令执行时间 | 相差太大 | 绝大多数一周期完成 |
| 优化编译系统 | 很难 | 较容易 |
| 程序源代码长度 | 短 | 长 |
| 控制逻辑实现方式 | 绝大多数微程序控制 | 绝大多数位硬连线控制 |