1. 基本概念
- 数据表示:计算机
硬件能够直接识别、指令集可以直接调用
的数据类型
。
所有数据类型中最常用、相对比较简单、用硬件实现比较容易的几种。
- 数据结构: 由
软件
进行处理和实现
的各种数据类型
研究:这些数据类型的逻辑结构和物理结构之间的关系并给出响应的算法。
系统结构设计者要解决的问题:如何确定数据表示
(软硬件取舍折中问题)
1.1 数据表示类型
1.1.1 定点数据表示
当机器设置有定点加、减、乘、除、移位、比较等一系列定点运算指令和相应的运算硬件。可以直接对定点数据进行各种处理时,机器就有了定点数据表示。
1.1.2 逻辑数据表示
当机器设置有逻辑加、逻辑乘、按位相加、逻辑移位等一系列逻辑运算指令和相应的逻辑运算硬件。可以直接对逻辑数据进行各种处理时,机器就有了逻辑数据表示。
1.1.3 浮点数据表示
类似的,若机器设置有浮点运算指令(如浮点加、减、乘、除、比较、存、取等)和相应的运算硬件,可以对浮点数进行各种处理,机器就有了浮点数据表示。
1.2 变址操作对向量、阵列数据结构的支持
机器的运算类指令和运算器结构主要是按机器有什么样的数据表示来确定的。
1.3 引入数据表示的原则
一方面是看系统的效率是否有提高,即是否减少了实现时间和所需的贮存空间。
衡量实现时间是否减少,主要是看在主存和处理机之间传递的信息量是否有减少;传送的信息量越少,其实现时间就会越少(处理器一般处理速度很快,而从主存中获取数据相对来说很耗时,如果减少数据传输,则可以提高处理效率)。
另一方面是看引入这种数据表示后,其通用性和利用率是否高。
如果只对某种数据结构的实现效率很高,而对其他数据结构的实现效率很低,或者引入这种数据表示在应用中很少用,那么为此所花费的硬件过多却并未在性能上得到好处,必然导致性能价格比的下降,特别是对一些复杂的数据表示。
1.4 操作数的大小:操作数的位数或字节数
- 字节(8位)
- 半字(16位)
- 字(32位)
- 双字(64位)
基准程序对 单字定点和双字浮点数据数据访问具有较高的频度。
- 字符:用ASCII码表示,为一个字节的大小。
- 整数:用二进制补码表示,其大小可以是字节,半字或单字。
- 浮点操作数:单精度浮点数(1个字)、双精度浮点数(2个字)。
- 十进制数
- …
2. 高级数据表示
2.1 自定义数据表示
2.1.1 标识符数据表示
一对一:一个数据对应一个标识符
表示操作数类型的方法有两种。
1)由指令中的操作码
指定操作数的类型。
多一个操作数,就要多一个对应的操作数指令(操作码)。
2)带标识符的数据表示。给数据加上标识,由数据本身给出操作数类型。
- 优点
- 简化了指令系统和程序设计。
- 简化了编译程序。
- 便于实现一致性校验。
- 能由硬件自动完成数据类型的变换。
- 支持了数据库系统的实现与数据库类型无关的要求。
- 为软件调试和应用软件开发提供了支持。
标识符数据表示的主要问题
-
每个数据字因增设标识符,会使程序所占用的主存空间增加。但指令种类变少,操作码位数缩短。
-
采用标识符会降低指令的执行速度。
需要增加按标识符确定数据属性,判断操作数之间是否兼容,单条指令执行速度下降。
总体上看,由于程序的编制和调试时间缩短,总开销时间变低。
**微观性能下降、宏观性能提升。**
2.1.2 数据描述符
一对多:几个或者一组数据对应一个描述符
为进一步减少标识符所占用的存贮空间,对于向量、数组、记录等数据,由于每个元素具有相同的属性,为此发展出数据描述符。
数据描述符和数据标识符的差别在于标识符是和每个数据相连的,合存在一个存储单元中,描述单个数据的类型及特征。描述符是和数据分开存放的,专门用来描述所要访问的数据是整块数据还是单个数据,访问该数据块或单个元素所需要的地址以及其他特征信息等。
数据描述符举例:B6700
以B6700的描述符为例,其数据描述符和数据的形式如下所示:
描述符:
数据:
读取到以 101 开头,则识别为 数据描述符;读取到000 开头的数据,则识别为数据。
- 可以将描述符按树形连接以描述多维数组表示。如下,有一个3*4二维阵列a:
下图表示了用数据描述符描述阵列A的情况:具体使用了两级描述符,一级描述符一个,二级描述符是连续存放的三个描述符,描述符的前三位都为101;
2.2 向量和数组的数据表示
2.2.1 向量处理
在具有向量、数组数据表示的向量处理机上,表现出在硬件上设置有丰富的向量或者阵列运算指令,配置有以流水或者阵列方式处理的高速运算器,只需用一条如下的向量加法:
2.3 堆栈数据表示
堆栈数据表示在编译和子程序调用用很有用。
有 堆栈数据表示的计算机成为堆栈计算机。
- 有若干高速寄存器组成的硬件堆栈,并附加控制电路让它与主存中的堆栈区在逻辑上组成一个整体,使堆栈的访问速度是寄存器的,堆栈的容量是主存的。
- 有很丰富的堆栈操作类指令且功能很强,直接可对堆栈中的数据进行各种运算和处理。
- 有力地支持高级语言程序的编译。
3. 浮点数尾数基值大小和下溢处理
等等再写(TODO)。