本章重点
:浮点数尾数基值的选择和下溢处理,自定义数据表示,再定位技术,操作码优化,指令字格式化,RISC思想及基本技术。
本章难点
:浮点数尾数基值选择,指令字格式的优化设计。
第一节 数据表示
-
数据表示和数据结构
-
数据表示
是指能
由机器硬件直接识别和引用的数据类型
。如定点数据、逻辑数据、浮点数据等 -
数据结构:如串、队列、栈、向量、阵列、链表、树、图等是
系统处理的各种数据结构
。
数据结构和数据表示是软硬件的交界面
机器的运算类指令和运算器结构主要是按机器有什么样的数据表示来确定的。
高级数据表示
自定义数据(self-defining)
表示
标志符
和
数据描述符
两类。
高级语言用类型说明语句指明数据类型,让数据类型直接与数据本身联系起来,运算符不反应数据类型是通用的。
标志符
为了缩短高级语言与机器语言的语义差异,可以在机器中的每个数据都有类型标志位。
标志符数据主要优点是:
- 简化了指令系统和程序设计
- 简化了编译程序
- 便于实现一致性检验
- 能够由硬件自动完成数据类型的变化
数据描述符
为进一步减少标志符所占的存贮空间,对于向量、数组、记录等数据,由于每个元素具有相同的属性,为此发展出数据描述符。
向量、数组数据表示
(
1
)含义
:有序排列的数据元素称为向量(向量数据)
(
2
)向量数据的三要素
:
-
①
基地址
:存放第一个向量数据的地址; -
②
向量长度
:向量数据个数; -
③
位移量
:与基地址的距离。
堆栈数据表示(有力力丰富若干)
- (1)有若干高速寄存器组成的硬件堆栈,并附加控制电路让它与主存中的堆栈区在逻辑上组成一个整体,使堆栈的访问速度是寄存器的,堆栈的容量是主存的。
- (2)有很丰富的堆栈操作类指令且功能很强, 直接可对堆栈中的数据进行各种运算和处理。
- (3)有力地支持高级语言程序的编译。假定有算术赋值语句F=A*B+C/(D-E),可以很容易通过用逆波兰表达式AB*CDE-/+
- (4)有力地支持子程序的嵌套和递归调用
引入数据表示的原则
- (1)一方面是看系统的效率有否提高,即是否减少了实现时间和所需的存贮空间。
- (2)另一方面是看引入这种数据表示后, 其通用性和利用率
-
浮点数尾数基数大小与下溢处理方法的选择
-
基数选择
- 浮点数一般采用阶码和尾数两部分表示,由于计算机字长有限,浮点数只能表示出数轴上分散于正、负两个区间上的部分离散值。
浮点数尾数的下溢处理方法
★
为了减少运算中的精度损失,关键是要处理好运算中尾数超出字长的部分。四种常用的下溢处理方法:
- (1)截断法。
- (2)舍入法。
- (3)恒置“1”法。
- (4)查表舍入法。
第二节 寻址方式
指按什么方式寻找所需操作数或信息。
三个面向:
面向寄存器、堆栈和主
存的寻址方式。
- 面向寄存器的寻址方式操作数可以取自寄存器或主存,结果大多保存在寄存器中,少量的送入主存。
- 面向堆栈的寻址方式主要访问堆栈,少量访问主存或寄存器。
- 面向主存的寻址方式主要访问主存,少量访问寄存器。
寻址方式在指令中的指明
两种:占用操作码来指明;不占用操作码、在地址码部分设置专门的寻址方式字段。
程序在主存中的定位技术 ★
-
逻辑地址
是
程序员
编程时使用的地址。 -
主存物理地址
是程序在主存中的实际地址。(实存空间)
当程序装入主存时,就需要
进行逻辑地址空间到物理地址空间的变换
,即进行程序的
定位
。目前使用的定位技术有三种:
(1)
静态
再定位:装入主存时,将逻辑地址变换并修改成物理地址。
(2)
动态
再定位:装入主存时,指令不能修改,将主存的起始地址存入寄存器,程序执行时,将逻辑地址加上基址即可形成物理地址。
(3)
虚实地址映像表
:程序空间可以超过实际主存空间,通过虚实地址映射来定位。
不同的寻址方式
- 变址寻址:指令中的地址码+给定的变址寄存器,数组。
- 相对寻址:相对于当前PC进行加减,分支跳转应用
- 基址寻址:指令中地址码+基址寄存器,虚拟存储器应用;
- 推栈寻址:先进后出,队列。不需要地址,进栈指针加一,出栈指针减一。
物理主存中信息的存储分布
通常一台计算机同时存放具有不同宽度的多种信息,如果允许它们任意存储,就会出现一个信息跨主存字边界存储的情况。为了使任何时候都只用一个存储周期访问到,信息在存储器中应按
整数边界存储。
信息按整数边界存储对于保证访问速度是必要的,但它会造成存储空间的浪费。
第三节
指令系统的设计和优化
指令系统的设计原则
指令系统是程序设计者看计算机的主要属性,
是软、硬件的主要界面
,它在很大程度上决定了计算机具有的基本功能。设计基本原则:
- 1.是否有利于满足系统的基本功能
- 2.是否有利于优化计算机性价比
- 3.是否有利于指令系统今后的发展和改进
编译程序设计者要求:
- 规整性、对称性、独立性和全能性、正交性、可组合性、可扩充性;
系统结构设计者额外需求:
- 指令码密度适中、兼容性、适应性;
指令操作码的优化
指令是
操作码和地址码
两部分组成的。指令格式的优化是指如何用最短的位数来表示指令的操作信息和地址信息,使程序中指令的平均字长最短。
哈夫曼编码
哈夫曼压缩技术,对发生频率高的采用最短位数表示,对发生频率低的采用较长位数表示,使平均位数最短。
扩展操作码编码
仍利用短码表示高概率的信息,长码表示低概率的信息。但必须遵守短码不能是长码的前缀的原则。
指令字格式的优化
只有操作码的优化,没有在地址码和寻址方式上采取措施,程序总位数还是难以减少的。指令字格式优化的措施如下:
- 1.采用扩展操作码,根据指令的使用频率选择合适的编码方式,缩短平均码长;
- 2.采用多种寻址方式,缩短地址码的长度;
- 3.采用0,1,2,3等多种地址,以增强指令的功能,从宏观上缩短程序的长度;
- 4.在维持指令在存储器中按整数边界存储的前提下,使用多种不同的指令字长度;
第四节
指令系统的发展和改进
1、两种途径和方向(CISC和RISC)
一种是如何进一步
增强原有指令的功能以及设置更为复杂的新指令
来取代原先由软件子程序完成的功能,实现软件功能的硬化。按此方向设计的计算机称为CISC。
另一种是如何通
过减少指令种数和简化指令功能
来降低硬件设计的复杂度,提高指令的执行速度,按此方向设计的计算机称为RISC。
2、按CISC方向发展和改进指令系统
从三个方面来改进:面向目标程序的优化、面向高级语言的优化、面向操作系统的优化。
3、按RISC方向发展和改进指令系统 ★
(1)CISC的问题:指令系统庞大;操作繁杂、执行速度很低;高级语言编译程序选择目标指令的效率降低;各指令的使用频度都不会太高。
(2)RISC的基本原则:
-
①确定指令系统时,只选择
使用频度很高
的那些指令,在此基础上增加少量能有效支持操作系统和高级语言实现及其他功能的最有用的指令,让指令的条数大大减少,一般不超过 100 条。 - ②大大减少指令系统可采用的寻址方式的种类,一般不超过两种。简化指令的格式,使之也限制在两种之内,并让全部指令都具有相同的长度。
-
③让所有指令都在
一个机器周期
内完成。 - ④扩大通用寄存器的个数,一般不少于 32 个寄存器, 以尽可能减少访存操作,所有指令中只有存(STORE)、取(LOAD)指令才可访存,其他指令的操作一律都在寄存器间进行。
-
⑤为提高指令执行速度,大多数指令都
采用硬联控制
实现, 少数指令采用微程序实现。 -
⑥通过
精简指令和优化设计编译程序
,以简单有效的方式来支持高级语言的实现。
表2-2 代表性的RISC处理机的特征