第二章 指令系统
2.1 数据表示
2.1.1 数据表式与数据类型
- 数据表示:是指计算机硬件能够直接识别,可以被指令系统直接调用的
那些数据类型 - 数据结构:串、队、栈、向量、阵列、链表、树、图等软件要处理的各
种数据结构,反映了应用中要用到的各种数据元素或信息单元之间的结
构关系 - 数据结构和数据表示实际上是软硬件的交界面,需要在系统结构设计时
予以确定 - 数据结构要通过软件映像,变换成机器所具有的数据表示来实现
2.1.2 高级数据表示
1 自定义数据表示
标识符数据表示
-
一般的计算机中,数据存储单元(寄存器、主存储器、外存储器等)
只存放纯数据,数据的属性通过指令中的操作码来解释
-
同一种操作(如加法)通常有很多条指令
-
高级语言使用类型说明语句指明数据类型,运算符不反映数据类型
-
高级语言与机器语言之间的语义差距要靠编译器等填补
-
为缩短高级语言与机器语言之间的语义差距,可以让机器中的每个
数据都加上类型标志位
- 标志符由编译器或其它系统软件建立,对程序员透明
- 程序(包括指令和数据)的存储量分析:数据存储量增加,指令存
储量减少
数据描述符
- 数据描述符与标志符的区别:标志符只作用于一个数据,而数据描
述符要作用于一组数据 - 进一步减少标识符所占用的空间
2 向量、数组 数据表示
- 为向量、数组数据结构的实现和快速运算提供个更好的硬件支持的方法是增设数组数据表示,组成向量机
3 堆栈数据表示
2.1.4 浮点数的表示方法
1 浮点数的表示方法
浮点数的表示:
N
=
M
∗
R
E
N=M*R^E
N=M∗RE
- M称为 浮点数的尾数
- R称为阶码的基数
- E称为阶的阶码
规格化:尾数的最高有效位是1
-
1)可表示数的范围:随着rm 的增大,可表示最小值减小,可表示最大值增大,即可表示数的范围增大了
-
2)可表示数的个数:随着rm 的增大,可表示数的个数增大
-
总结:尾数基值增大,会扩大浮点数表示范围,增加可表示数的个数,减
少移位次数,降低右移造成的精度损失,提高运算速度,但也会降低数据
的表示精度,数值的分布变稀疏
2 尾数下溢处理方法
(1) 截断法: 将尾数超出家弃子长的部分截去。
实现简单,不增加硬件,不需要处理时间;缺点是平均误差较大且无法调节
(2)舍入法:在机器运算的规定字长之外增设一位附加位,存放溢出部分
的最高位,每当进行尾数下溢处理时,将附加位加1。优点是实现简单,增
加硬件很少,最大误差小,平均误差接近于零;缺点是处理速度慢,需要
花费在附加位上加1以及因此产生的进位时间
(3)恒置“1”法:把有效字长的最低一位置成rm/2。优点是实现简单,
不需要增加硬件和处理时间,平均误差接近0;缺点是最大误差较大
(4)查表舍入法:用ROM或者PLA存放下溢处理表。优点是速度快,平均误
差可以调节到0;缺点是硬件量大
2.2 寻址技术
2.2.1 编址方式
1 编址单位
字编址 、 字节、位 块 编址
编址单位与访问字长;
- 一般:字节编址,字访问
- 部分机器:位编址,字访问
- 辅助存储器:块编址,位访问
字节编址字访问的优点:有利于符号处理
问题:
- 地址信息浪费:对于32位机器,浪费2位地址(最低2位地址); 对于64位机器,浪费3位地址
- 存储空间浪费
- 读写逻辑复杂
- 大小端问题
2 零地址空间个数
3 并行存储器交叉
- 高位交叉编址: 主要是扩大存储器容量
- 低位交叉编址: 主要是提高存储器速度
模 m低位交叉编制
寻址规则:
- 体地址 j = A mod m
- 体内地址 i = A/m
模m高位交叉
寻址规则:
- 体地址 j = A / m
- 体内地址 i = A mod m
4 输入输出设备编址
2.2.2 寻址方式
1 寻址方式设计思想
- 立即数寻址: 接在指令中给出操作数 用于数据比较短,且为源操作数的场合
- 面向寄存器的寻址方式
- 面向主存储器的寻址方式:
1) 直接寻址: 在指令中直接给出参加运算的操作数及运算结果所存放的主存地址
2)间接寻址: 指令中给出的是操作数地址的地址,必须经过两次
(或两次以上)的访主存操作才能得到操作数
3)变址寻址(基址寻址 相对寻址):指令执行时,用一个硬件加
法器,把变址寄存器中给出的基地址加上指令中给出的偏移量,
才能得到有效地址 - 面向堆栈的寻址方式: 堆栈寻址方式的地址是隐含的,在指令中不需要给出操作数的地址
2.2.3 定位方式
程序所分配到的主存物理空间和程序本身的逻辑地址空间是不相
同的,需要把指令和数据中的逻辑地址(相对地址)转换成主存
储器的物理地址(绝对地址)
- 直接定位:在程序装入主存储器之前,程序中的指令和数据的主
存物理就已经确定了的称为直接定位方式 - 静态定位:在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式
- 动态定位: 在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式
2.3 指令系统的优化
2.3.1 指令的组成
指令两部分组成: 操作码和地址码
2.3.2 操作码的优化表示
操作码的三种编码方法:固定长度、Huffman编码、扩展编码
1 固定长度操作码
- 主要优点:规整,译码简单
- 主要缺点:浪费信息量(操作码的总长位数增加)
2 Huffman编码法
操作码的平均最短长度
pi表示第i种操作码在程序中出现的概率
3 扩展编码法
Huffman编码的主要缺点:
- 操作码长度很不规整,硬件译码困难
- 与地址码共同组成固定长的指令比较困难
扩展编码法:界于定长二进制编码和完全哈夫曼编码之间的一种编码方式,操作码的长度不是定长的,但是只有有限几种码长。仍然采用高概率指令用短码、低概率指令用长码的哈夫曼编码思想
2.4 指令系统的发展和改进
2.4.1 两种途径和方法
- 按CISC方向:增强原有指令的功能以及设置更为复杂的新指令,取代原先由软件子程序完成的功能,实现软件功能的硬化
- 按RISC方向:通过减少指令种类和简化指令功能来降低硬件设计的复杂度,提高指令执行速度
RISC的关键技术
1 延迟转移技术
- 为了使指令流水线不断流,在转移指令之后插入一条没有数据相关和控制相关的有效指令,而转移指令被延迟执行,这种技术称为延迟转移技术。
- 采用指令延迟转移技术时,指令序列的调整由编译器自动进行,用户不必干预。
延迟转移技术的两个限制:
- 被移动指令在移动过程中与所经过的指令之间没有数据相关
- 被移动指令不破坏条件码,至少不影响后面的指令使用条件码
如果找不到符合上述条件的指令,必须在条件转移指令后面插入空操作
2 指令取消技术
采用指令延时技术,经常找不到可以用来调整的指令
- 1 向后转移(设计用于循环指令)
- 2 向前转移 (IF THEN)
向后转移:
实现方法:循环体的第一条指令安放在两个位置,分别在循环体的前面和后面。如果转移成功,则执行循环体后面的指令,然后返回到循环体开始;否则取消循环体后面的指令
向前转移:
就是说,如果转译成后,PC是加的,向前继续执行程序,不用对指令流进行调整
3 重叠寄存器窗口
原因:在RISC中,子程序比CISC中多,因为传送参数而访问存储器的信息量很大
实现方法:设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。
在每个过程使用的几个窗口中:
- 有一个窗口是与前一个过程共用
- 有个窗口是与下一个过程共用
4 指令流调整技术
目标:通过变量重新命名消除数据相关,提高流水线效率
5 采用高速缓冲存储器cache
设置指令cahce和数据cache 分别存放指令和数据,保证指令流束先不间断输送指令和存取数据,提高流水线效率