1 / 165

第二章 数据表示与指令系统

第二章 数据表示与指令系统. 2.1 数据表示 2.2 浮点数据表示 2.3 高级数据表示 2.4 指令系统的优化设计 2.5 指令系统设计的两种风格. 数据 用户定义的数据 —— 用户程序中使用 系统数据 —— 执行程序时生成 指令 —— 数据的复合. 2.1 数据表示. 2.1.1 数据类型、数据表示与数据结构. 数据类型 —— 定义了具有相同属性一组值的集合,还定义了这个集合上的操作集。. 整数、实数、布尔数、二进制位、字符、串、图、表、树、阵列、队列、链表、栈、向量等。.

summer
Download Presentation

第二章 数据表示与指令系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 数据表示与指令系统 2.1 数据表示 2.2 浮点数据表示 2.3 高级数据表示 2.4 指令系统的优化设计 2.5 指令系统设计的两种风格

  2. 数据 用户定义的数据——用户程序中使用 • 系统数据——执行程序时生成 • 指令——数据的复合 2.1 数据表示 2.1.1 数据类型、数据表示与数据结构 数据类型——定义了具有相同属性一组值的集合,还定义了这个集合上的操作集。 整数、实数、布尔数、二进制位、字符、串、图、表、树、阵列、队列、链表、栈、向量等。

  3. 基本数据类型: • 二进制位、整数、十进制数、浮点数、字符、布尔数等。 所有系统结构都支持基本数据类型 • 结构数据类型:由一组相互有关的数据元素复合而成的数据类型 • 数组、字符串、向量、堆栈、队列、记录、树等 • 大多数系统结构只能部分地支持结构数据类型 计算机体系结构所要研究的一个内容是:在所有这些数据类型中,哪些用硬件实现,哪些用软件实现,并研究它们的实现方法。

  4. 存储器 数据结构基本数据类型 映像 数据表示:机器硬件能直接识别,并可以被指令调用的数据类型,由硬件实现的数据类型。 数据结构:结构数据类型的组织方式。研究数据类型的逻辑结构和物理结构之间的关系并给出算法,面向系统软件、面向应用领域所需处理的数据类型。由软件实现的数据类型。 确定哪些数据类型用数据表示实现,哪些数据类型用数据结构实现,是软硬件的主要分界面之一,本质上是一个软硬取舍问题。

  5. 确定哪些数据类型用数据表示实现的原则: • 缩短程序的运行时间 • 占用存储空间少 • 减少CPU和主存的通信量 • 通用性和利用率 • 例:实现A=A+B,A和B都是200×200的矩阵。 • 标量机:6条指令, 其中4条循环指令要执行200*200=40000次;因此CPU与主存之间的通信量为: • 取指令 2+4×40000条; • 读或写数据 3×40000个; • 共要访问主存 7×40000次以上。

  6. 向量机:向量指令: 1条指令, 减少取指令操作4*40000=160000次,程序执行时间缩短了一半。 从减少CPU和主存的通信量及缩短执行时间两方面看,对于处理矩阵运算,向量数据表示优越性要高。 举例1:引入树型数据表示 • 对复杂的树数据结构的支持较好,高效; • 但对向量、数组、链表等其他数据结构支持不够,低效。 通用性不好 举例2:引入指针数据表示 • 可高效地对向量、数组、链表、树等多种数据结构提供支持。 通用性好 当选择产生冲突时,根据性能/价格衡量

  7. 实际系统设计 简单的、常用的、通用的数据类型采用数据表示(如int、 float、stack等); 复杂的数据类型一般通过数据结构或通过软硬件联合设计实现(如table、 graph、record、tree等) 系统结构设计的任务:确定哪些数据类型用硬件即数据表示实现,哪些数据类型用软件实现,即数据结构,哪些数据类型由软件和硬件共同来实现。

  8. 数据结构 软硬件的界面 数据表示 • 数据结构与数据表示的关系 –数据表示是数据结构的一个子集,数据结构通过 一定的算法变成数据表示才能在系统中处理; –数据表示是软、硬件界面的一部分;数据结构是软件和应用的一部分。 数据表示的确定实质上是软硬件的取舍问题

  9. 2.1.2 浮点数据表示 1.浮点数据表示的提出 • 早期的计算机系统只有定点数据表示 • 优点:硬件结构简单 • 缺点: • 编程困难:先确定小数点位置,小数点对齐再运算 • 表示数的范围小:如16位字长表示的整数范围为: -32768~32767 • 数据存储单元的利用率很低(大量的前置0)

  10. 负上溢区 可表示的负数 负下溢区 正下溢区 可表示的正数 正上溢区 -Nmin0 -Nmax Nmin Nmax 2.浮点数据表示的特点 • 计算机中的浮点数来源于数学中的实数,但两者有很多本质的区别: 实数:表示范围—无限,表示精度—连续。 浮点数:表示范围—有限,表示精度—不连续。 三大特点:表数范围、表数精度和表数效率 关键问题:在数据字长确定的情况下,找到具有最大表数范围、最高表数精度和最大表数效率的浮点数表示方式。

  11. 其中: 3.浮点数据的表示方式 • 浮点数的一般格式:对任意浮点数N,可表示为: m:尾数,多采用规格化小数表示 e: 阶码的值,一般采用整数、移码表示 rm :尾数的基,一般采用二进制、十六进制 re :阶码的基,一般采用二进制 p:尾数长度(不包括符号位),当rm =16时,每四个二进制位表示一位尾数 q:阶码长度(不包括阶码的符号)

  12. 1 1 q p mf ef e m 一种浮点数的表示方式如下: 数符 阶符 浮点数的表示需要六个基本参数:尾数m、阶码e的值;尾数的基rm、阶码的基re、尾数长度p(不包括符号位)、阶码长度q (不包括符号位) 尾数规格化 在浮点表示方式中尾数采用规格化小数的目的是为了在尾数中表示最多的有效数据位及数据表示的惟一性。 0.00345  0.345×10-2

  13. 最大正数: 最小正数: 最大负数: 最小负数: 表数范围: • (1)表数范围: 在尾数采用原码p位、纯小数,阶码q位采用移码的浮点数表示方式中,规格化浮点数N的表数范围如下:

  14. 例如:尾数用原码,纯小数表示,阶码用移码整数表示,当p=23,q=7, rm = re=2时,规格化数N在正数区间的表数范围是: 在负数区间的表数范围是: 表示数的个数是: 规格化浮点数的个数应是可表示的阶码的个数与可表示的尾数的个数的乘积。

  15. 7 6 5 4 3 2 1 0 0 0 阶符 尾符 在阶码相同的前提下,尾数采用不同基值时,表示的浮点数大小及个数均不相同。 现以阶码为q=2,尾数p=4,正阶、正尾数为例,比较rm=2和rm=16时的不同情况。 在尾数基值rm=2(二进制) ,p=4(即尾数bit3~bit0,共4位)、做规格化表示(即此时bit3=1)的正阶、正尾的数的范围:

  16. 最小尾数为 最大尾数为 最小阶码为 最大阶码为 阶码的个数为 尾数的个数为 可表示的最大正浮点数为 可表示规格化的最小正浮点数为 可表示的正阶、正尾规格化数的个数为

  17. 最小尾数为 最大尾数为 在尾数基值rm=16(十六进制)q=2, p=4(尾数bit3~bit0,4位二进制组成一个十六进制数),做规格化表示(即此时bit3~bit0 中必须有1位为“1”,不许出现全“0”, bit3~bit0 为0001~1111)的正阶、正尾的数的范围:

  18. 最小阶码为 最大阶码为 阶码的个数为 尾数的个数为 可表示的最小正浮点数为

  19. 可表示的最大正浮点数为 而rm=2时,其最大数是15/2。 可表示的正阶、正尾规格化数的个数为 rm=2时,其个数是32。 从上述例子,可得到下列两个结论: (1)当有相同阶码与尾数位数时, rm大,则表示数的范围也大,表示数的个数增多。 rm只能取2,4,8,16,…。一般使用2,8,16三种。

  20. 1/2 12 (2) rm大时,虽然表示数的范围大,表示数的个数增加,但在数值的分布较稀疏。例如在数轴1/2-2之间,当rm=2时,有数15个;而当rm=16时,有数8个。 rm=2, 20(0.1001~0.1111), 21(0.1~0.1111) rm=16, 160(0.1001~0.1111) ,161(0.0001) 原因有两点:一是因为采用规格化表示的缘故。如上例中rm=2时,规格化后,其尾数个数只为原来的1/2;二是因为在同长度阶码时, rm不同,每次小数点移动位置不同,如上例中rm=2时,1个阶码值移动小数点1bit,而rm=16时,则移动4bits。故:rm增大,则表示数的个数增加,数值上分布稀疏,从而计算误差增加。

  21. 最大尾数为 (0.1FF) 最大阶码为 阶码的个数为 可表示的正阶、正尾规格化数的个数为 • 【例1】某计算机的浮点数采用1位符号位、6位阶码和9位尾数,基数为16,求规格化时它能表示数值的个数。 解:此浮点数共有16位 阶码为q=5,尾数位数p=9,re =2和rm =16。 尾数用原码表示,阶码采用移码。

  22. 15 14 9 8 0 数符 阶码 尾数 • 【例1】某计算机的浮点数采用1位符号位、7位阶码(移码)和8位尾数(原码规格化),基数为2,数据1在这种浮点格式中的表示为,这种浮点表示的大于1的最小数是。 解:此浮点数共有16位,格式如下: 1=0.1×21 1: 0 1000001 , 10000000 >1最小数: 0 1000001 , 10000001 规格化表示的最小尾数

  23. 最小正尾数为:0.100000000 可表示的负阶、正尾规格化数的个数为 可表示的正规格化浮点数的个数为 可表示的正、负规格化浮点数的个数为

  24. 从上面的分析可以看到,规格化浮点数的表数范围主要与阶码的长度q和rm尾数基值有关,这时,能表示的绝对值最大的浮点数可近似为:从上面的分析可以看到,规格化浮点数的表数范围主要与阶码的长度q和rm尾数基值有关,这时,能表示的绝对值最大的浮点数可近似为: 表数范围随着q和rm的增大而扩大。当有相同阶码与尾数位数时, rm大,则表示数的范围大。但rm大时,在数轴上的分布较稀疏。

  25. (2)浮点数的表数精度 表数精度也称为表数误差,浮点数存在表数精度的根本原因是由于浮点数的不连续性造成的。浮点数表示的仅仅是实数的一个子集。 规格化浮点数的表数精度主要与尾数基值和尾数长度有关,一般认为尾数最后1位值的一半定义为表数精度 当浮点数的尾数长度相同时,尾基为2时具有最高的表数精度。

  26. 在尾数基值rm=16(十六进制)re=2, 尾数4位(4位二进制组成一个十六进制数)、q=2时做规格化表示的最大正数、正规格化数的个数及一个数量单位的大小: rm=2,正规格化尾数的个数8个,最大正数为 (1-2-4) 22,一个数量单位=(2-4))22=1/4 rm=16,正规格化尾数的个数15个,最大正数为 (1-16-1)162,一个数量单位=(1/16)162=16 当表示的浮点数有相同的位数、尾数时,rm=2,有最大的表数精度。

  27. (3)浮点数的表数效率 浮点数的表数效率定义为 尾数基值rm=2与rm=16相比,显然基值越大浮点数的表数效率高。

  28. (4)浮点数尾数基值的选择 • 浮点数的表数范围、表数精度和表数效率三个主要特征都与尾数基值rm有关。 rm =2,表数效率只有50%,为了提高表数效率,许多计算机采用了隐藏位表示法,此时表数效率100%; 但rm=4时,就不能采用隐藏位表数法,因为尾数可以从00、01、10、11中取值, 当浮点数字长确定后,rm取2,具有最大的表数范围、表数效率和最高的表数精度。

  29. 应用情况: IBM370系列机、IBM4300系列机等浮点数的尾数是16; Burroughs公司的B6700,B7700等大型计算机,浮点数尾数的基值是8; DEC公司的VAX-11、CDC公司CDC6600等大型机以及Intel公司的X86系列机等的浮点数均采用尾数基值为2。

  30. (5)浮点数的下溢处理 • 浮点数加法中的对阶、规格化右移操作以及乘法中结果取单倍长度会把有效位移掉或截掉从而造成精度损失。 尾数下溢处理方式: (1)截断。也称为不舍入法。简单地将下溢部分截去。在整数运算中最大会接近于1;误差大都是负误差。 (2)舍入法。被截尾数为1进1,运算中最大误差小于一半。 (3)恒置1法。被截尾数无论是0是1,恒置1。最大误差比截断法大。 (4)ROM或PLA法。也称查表舍入法,平均误差接近于零。

  31. 2.2 高级数据表示 • 自定义数据表示(Self-defining) • 带标志符的数据表示 • 数据描述符 • 向量数据表示 • 堆栈数据表示 内容:堆栈、向量、数组(队列)、记录、自定义等。 目的:支持数据结构,提高系统效率和性能/价格比。

  32. 注意点: 新数据表示引入的可行性(原则); 新数据表示的必要条件(指令系统和硬件器件); 新数据表示的存取方法(如稀疏向量表示)。

  33. 2.2.1 自定义数据表示 • 引入思想: • 减小高级语言和机器语言的语义差距,减轻编译软件的工作量(减少指令种类) • 分类 • 带标志符数据表示 • 数据描述符

  34. 类型标志 数据 1.带标志符数据表示 • 定义:用以定义某个数据的数据类型和数值的数据表示。格式如下: • 类型标志主要用于指明数据类型(如二进制整数、十进制整数等,也可用于指明机器内部所用信息的各种类型)。 • 标志符由编译程序建立,对高级语言程序员来说是透明的。

  35. 优点: • 简化指令系统和程序设计 • 简化了系统程序和编译程序的设计 • 便于一致性校验 • 能由硬件自动完成数据类型的变换 • 支持数据库系统的实现与数据类型无关的要求 • 为软件调试和应用软件开发提供支持 • 缺点: • 硬件设计的复杂度增加(数据类型转换、一致性检验等) • 降低指令的执行速度 • 必须用专门的指令完成标志符的初始化

  36. 不采用标志符 A 数据 总数少 B 采用标志符后 数据字增长 指令 总数多 通常有面积B>面积A 采用标志符后 指令字缩短 • 引入可行性分析 • 存储空间是否减少?

  37. 例2.2 设处理机A的数据不带标志符,指令字长和数据字长都是32位,设处理机B的数据带3位标志符,使数据字长增至35位,但可使指令字长减少至30位。现有1个程序正在处理机A和B上运行的目标程序都有IC条指令,平均每条指令访问2个操作数,每个操作数重复访问R次。 • (1)分别计算程序在处理机A和B上占用的存储空间大小。 • (2)在什么条件下,程序在处理机B上占用的存储空间才小于在处理机A上占用的存储空间?

  38. 解 (1)程序在处理机A上占用的存储空间 • 程序在处理机B上占用的存储空间 • (2)为实现MB <MA即有程序在处理机A上占用的存储空间 由此可得R>3,即当操作数平均重复访问次数R>3,在带标志符的数据表示的处理机上运行的程序占用的存储空间会减小。

  39. 实现时间是否减少? • 取出数据后转换,必须推迟到运行时间进行 • 专门的指令用于标志符初始化,增加了辅助开销 • 指令执行过程中,对每个标志符进行逐个解释,并判断数据是否相容,因此单条指令的执行速度降低,但宏观执行时间减少 • 宏观时间=设计时间+编译时间+调试时间

  40. 通用性和利用率 • 这是一种理想的数据表示模式,通用性较好; • 只用一种存储器,利用率不高,采用指令和数据存储器后,利用率不会降低。 • 结论 • 运行时间增加,存储空间减少。 • 减小高级语言和机器语言的语义差距 • 通用机中不使用,专用机(支持动态数据类型如LISP和PROLOG)中使用

  41. 格式: 描述符 标志位 特征标记 数据块长度 数据块起始地址 3 8 20 20 2.数据描述符 • 目的:描述复杂和多维的结构类型,进一步减少标志符所占的存贮空间。 • 举例: • 现以美国Burroughs公司的B6500,7500为例进行自定义数据表示的说明,格式如下:

  42. 数据 000 数值 3 1 1 1 1 1 2 1 20 20 101 P C I S R T D 长度 地址 描述符 0:单精度数据 1:双精度数据 00:数据描述符 只准读出的数据 0:连续数据 1:不连续数据 0:数据集的全体 1:数据集中的一个 写其他描述符 0:不在主存中 1:在主存中

  43. 优点: • 实现阵列数据的索引比变址方法实现的好,而且能检查程序设计中阵列越界错误 • 为向量、数组数据结构的实现提供一定的支持,有利于简化编译中的代码生成 • 引入可行性分析:同带标志符的数据表示 • 描述符的工作过程如下图

  44. 主存储器 指令 操作码 X Y 101 描述符 (数据) ··· 101 000 数据块 ··· 地址生成逻辑 (数据) 000 101 数据块 ··· 描述符 101

  45. 3.两种自定义数据表示的区别 • 标志符是和每一个数据相连的,合存在一个存储单元中,描述单个数据的类型特征。 • 描述符是和数据分开存放的,专门用来描述所要访问的数据是整块数据还是单块数据,访问该数据块或数据元素所需要的地址以及其他特征信息等。

  46. A a0 a1 a11 2.2.2 向量数据表示 • 向量表示 • 向量通常是指由标量的一组有序集合表示的量,类似于一维数组 • 标量通常只是一个整数或实数 • 数组 A=(a0,a1,a2,…,an-1)可看成向量 • 向量在主存储器中的存放原则: 规律性、地址计算简单、访存冲突小 • 元素相邻存放 • 元素等间距存放 • 向量计算机-处理向量数据的计算机

  47. 向量加 X A Y B Z C • 举例:计算 ci=ai+bi, I=10,11,…,1000 • 无向量数据表示(C语言): • for(i=10; i<=1000; i++) • c[i]=a[i]+b[i]; • 向量数据表示: • C(10:1000)=A(10:1000)+B(10:1000) • 向量指令及包含的参数 • 基地址、位移量、向量长度 • 格式如下: X,Y,Z:寄存器号,存放A,B,C的位移量 A,B,C:存放A,B,C的向量基址及长度

  48. a0 a10 an-1 注:向量起始地址=基址+位移量 向量有效长度=向量长度-位移量 向量的数据地址=起始地址+位移量

  49. 基址Ab 基址Cb A0 C0 A1 C1 位移量Ad=4 Cd A2 C2 A3 起始地址 As=4 起始地址 Bs=-4 C3 起始地址 Cs=4 A4 B-4 C4 A5 B-3 C5 位移量 Bd=-4 A6 B-2 C6 A7 B-1 C7 基址Bb Ae=12-4=8 Ce=12-4=8 A8 B0 C8 Be=4- (- 4) =8 A9 B1 C9 A10 B2 C10 A11 B3 C11 源向量A 结果向量C 源向量B • 举例:计算C(4:11)=A(4:11)+B(-4:3) 向量起始地址=基址+位移量 向量有效长度=向量长度-位移量

More Related