文章目录
注:本文部分内容选自网易云课堂的北京邮电大学网课,推荐
数据类型
- e.g. 文件 表 图 树 队列。。。。
- 数据表示和数据结构是数据类型的子集
数据表示:哪些数据类型可以全部用硬件表示
-
指:计算机硬件能够直接识别,可以被指令系统直接调用的数据类型,硬件实现也比较容易的数据类型。
e.g. 定点数、逻辑数、浮点数、字符、字符串、堆栈、向量、十进制数 -
每一条指令都有相应的指令与之对应,并有硬件加以支持
确定哪些数据类型用数据表示的原则:
- 时间性能
- 空间性能
- CPU利用率
e.g. 用顶点数据表示浮点运算,指令多cpu与主存的通信量增大,时间加长;浮点数运算虽然硬件复杂度增加,但是浮点数据利用率高时间快
对于很复杂的数据类型,用数据表示硬件的代价很大,so软硬件相结合的方法最好
浮点数
自定义数据表示
因为高级语言中,编译器要根据数据的不同类型生成不同的指令,为简化指令系统,提出在机器语言一级有数据自己定义属性。
标志符:
描述一个数据
指用于标识数据类型,例如负数、几机制、浮点型等;
由编译器建立,对用户透明,对系统程序员不透明
-
采用标识符的优点:
简化指令系统,由硬件自动实现一致性检查和数据类型转换 -
问题:
数据和指令长度可能不一致----解决方法:1. 将数据和指令分别存储在两个存储器上 2.指令长向数字长靠拢 关于指令和数据的分开存储和混合存储参考博文:指令和数据混合存储与分开存储的比较
指令的执行速度时间降低 ----- 因为执行时要对每个标识符进行解释硬件复杂度增加
增加了数据区域的存储空间
下图反映的是代标识符和不带标识符所占空间的比较
一般紫色>橘色,紫色:指令集字缩短,减少的存储空间; 橘色:存储字长加长,增加的存储空间
因为指令条数>>字加长位数,紫<橘
描述符:
对于复杂数据结构连续存放的数据,没有必要让每个数据都带标识符
e.g. 例如矩阵、向量
描述一组数据,CF:标识符只表示一个数据
数据描述符中包含数据的各种标志位、长度、数据地址。能够使整个向量、矩阵、多维数组运算
优缺点和标志符相同
存储空间
数据结构:哪些数据类型用软件实现
e.g. 串,队,列,栈,阵列,链表,树,图
指令
组成;操作码&地址码
指令总是有一个操作码+0-n个操作数组成
指令按操作数存放方法进行分类:
- 堆栈型机器——CPU中存储操作数的单元是堆栈的机器。
- 累加型机器——CPU中存储操作数的单元是累加器的机器。
- 通用寄存器型机器——CPU中存储操作数的单元是通用寄存器的机器。
不同类型对应的机器型号不同
其中通用寄存器有:
所以指令可以有多种表示:
操作码:
- 指令的操作种类
- 所用操作数的数据类型:if采用自定义数据表示法,不用指出类型,只要知道种类就行
操作数:
- 操作数地址
- 地址附加信息:偏移量,块长度,跳距
- 寻址方式
寻址(待更新。。。。)
大多数指令都有操作数,从哪里得到这些操作数,就需要寻址
- 立即寻址
- 直接寻址
- 寄存器寻址
- 变址寻址
- 基址变址寻址
寻址技术之----编址方式
在寻址之前就要编址
解释:编址就是对各种存储设备进行编码
设备:
ATT: 堆栈是一种存储设备但是他不用编址
编址单位
-
字编址
实现最容易:每个编制单位与设备的访问单位一致
每读完一条指令,程序计数器+1,每读完一个数据,地址计数器+1
缺点:没有对非数值计算提供支持,非数值要求按字节编址 -
字节编址
应用最普遍
优点:编址单位和信息的基本单位一致,有利于符号处理(ASCII码按字节)
缺点:访问字长为一个字节太窄了,通常主存储器的字长是4个字节以上,地址信息浪费,存储器空间浪费 -
位编址
优缺点同字节编址一致
应用:STAR-100
优缺点同字节编址,BUT地址信息浪费更大(e.g. 处理机字长64位,则一个地址末6位全为0,一个字节末3位为0,则访问一个字要占64个地址编码,一个字节要8个地址编码)
数据存储方法
优点:不浪费存储器资源
缺点:存储器读写复杂;存储器工作速度降低(因为除了访问一个字节之外,访问双字、单字、半字时要话费2个存储空间)
ATT : 最重要的是存储器访问时间
优点:存储器读写复简单;存储器工作速度块(因为除了访问一个字节之外,访问双字、单字、半字时要是1个存储空间)
缺点:浪费存储器资源
折中方案:使用最普遍
优点:保证无论双字单字都能在1个周期内完成
缺点:有浪费存储器资源,但优于第二种;读写仍然比较复杂
编址地址的起始地址要求:
大端数据与小端数据问题
究竟是左端最大还是右端最大
在按字节编址的存储器中,从右边开始编址:软件人员的习惯;从左边编址:硬件人员的习惯。
x86采用的是按右边编址
编址空间组织方式
- 三个零地址空间: 每种设备都是从0开始编址的
RISC;只有访问操作在3类存储设备中都能进行,而运算位移测试操作只能在通用寄存器中进行
CISC:all操作都能在3类设备上进行
-
2个零地址空间
地址高端部分— 输入输出设备,低端地址— 主存储器
缺点:指令执行过程复杂---- 所有访问主存储器的指令都要进行是否访问输入输出设备的判断
优点:简化指令系统RISC:只有LOAD,STORE指令能访问主存储器,all运算操作都要在寄存器中进行。而访问输入输出通常操作简单,寻址方式单一因此RISC不适合2个零地址空间
CISC:访问输入输出设备单一,不需要联合在一起(主存+输入输出) -
一个零地址空间
all 设备统一编址,地址低端是通用寄存器,高端是输入输出设备 -
隐含编址
堆栈,cache,特殊的寄存器,data是先进先出的方式不用编址
指令的优化(待更新。。。。)
目标:1. 节省程序的存储空间 2. 指令格式要尽量规整 3. 不能降低指令的执行速度
优化方式
- 定长编码
- 优点:公平规整,译码简单
- 缺点:浪费信息,操作码总长度增加
- 不定长编码(哈夫曼编码)
- 优先性
- 优点:平均码长最短,信息冗余最小
- 计算题:与扩展编码对比
扩展编码a-b:先扩展a位,再扩展
- 扩展编码法:2者耦合:对于优先性大的,码长尽量小,且相对均匀
扩展编码方法
ATT:平均最短码长有负号(这里少写了)
如果直接就用HUffman编码方法,有以下问题:
所以需要扩展编码的方式,由固定长操作码和Huffman编码相结合
扩展编码的思想:
- 哈夫曼又称为前缀编码 ,因为短码不能是长码的前缀
- 高频率的用短码,低频率的用长码
- 哈夫曼编码不唯一
等长编码:
4-8-12扩展法:有采用15/15/15扩展;8/64/512扩展
ATT:
15-15-15:就是每次变低位的,高位为1111
8-64-512:扩展每4个里面的后3位
同理:3-6-9
2-4扩展法:
不等长编码:
4-6-10;8-31-16
习题: