第二章指令系统 ·指令系统是计算机系统结构的主要组成部分 ·指令系统是软件与硬件分界面的一个主要标志 指令系统软件与硬件之间互相沟通的桥梁 ·指令系统与软件之间的语义差距越来越大 2.1数据表示 2.2寻址技术 2.3指令格式的优化设计 2.4指令系统的功能设计 2.5RISC指令系统 2.1数据表示 ·新的研究成果,如浮点数基值的选择 ·新的数据表示方法,如自定义数据表示 2.1.1数据表示与数据类型 2.1.2浮点数的设计方法 2.1.3自定义数据表示 2.1.1数据表示与数据类型 ·数据的类型:文件、图、表、树、阵列、队列、链表、栈、向量、串、实 数、整数、布尔数、字符 数据表示的定义:数据表示研究的是计算机硬件能够直接识别,可以被指 令系统直接调用的那些数据类型。 例如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量 ·确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题 ·确定数据表示的原则: 一是缩短程序的运行时间, 二是减少CPU与主存储器之间的通信量 三是这种数据表示的通用性和利用率。 例2.1:实现A=A+B,A和B均为200×200的矩阵。分析向量指令的作用 解:如果在没有向量数据表示的计算机系统上实现,一般需要6条指令,其 中有4条指令要循环4万次。因此,CPU与主存储器之间的通信量 取指令2+4×40,000条, 读或写数据3×40,000个, 共要访问主存储器7×40,000次以上 如果有向量数据表示,只需要一条指令 减少访问主存(取指令)次数:4×40,000次 缩短程序执行时间一倍以上
2-1 第二章 指令系统 • 指令系统是计算机系统结构的主要组成部分 • 指令系统是软件与硬件分界面的一个主要标志 • 指令系统软件与硬件之间互相沟通的桥梁 • 指令系统与软件之间的语义差距越来越大 2.1 数据表示 2.2 寻址技术 2.3 指令格式的优化设计 2.4 指令系统的功能设计 2.5 RISC 指令系统 2.1 数据表示 • 新的研究成果,如浮点数基值的选择 • 新的数据表示方法,如自定义数据表示 2.1.1 数据表示与数据类型 2.1.2 浮点数的设计方法 2.1.3 自定义数据表示 2.1.1 数据表示与数据类型 • 数据的类型:文件、图、表、树、阵列、队列、链表、栈、向量、串、实 数、整数、布尔数、字符 • 数据表示的定义:数据表示研究的是计算机硬件能够直接识别,可以被指 令系统直接调用的那些数据类型。 例如:定点、逻辑、浮点、十进制、字符、字符串、堆栈和向量 • 确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题 • 确定数据表示的原则: 一是缩短程序的运行时间, 二是减少 CPU 与主存储器之间的通信量, 三是这种数据表示的通用性和利用率。 例 2.1:实现 A=A+B,A 和 B 均为 200×200 的矩阵。分析向量指令的作用 解:如果在没有向量数据表示的计算机系统上实现,一般需要 6 条指令,其 中有 4 条指令要循环 4 万次。因此,CPU 与主存储器之间的通信量: 取指令 2+4×40,000 条, 读或写数据 3×40,000 个, 共要访问主存储器 7×40,000 次以上 如果有向量数据表示,只需要一条指令 减少访问主存(取指令)次数:4×40,000 次 缩短程序执行时间一倍以上
·数据表示在不断扩大,如字符串、向量、堆栈、图、表 ·用软件和硬件相结合的方法实现新的数据表示 例如:用字节编址和字节运算指令来支持字符串数据表示 用变址寻址方式来支持向量数据表示 2.1.2浮点数的设计方法 1、浮点数的表示方式 ·一个浮点数N可以用如下方式表示:N=mrm 需要有6个参数来定义。 两个数值 m:尾数的值,包括尾数的码制(原码或补码)和数制(小数或整数) e:阶码的值,移码(偏码、增码、译码、余码等)或补码,整数 两个基值: rm:尾数的基值,2进制、4进制、8进制、16进制和10进制等 re:阶码的基值,通常为2 两个字长: p:尾数长度,当rm=16时,每4个二进制位表示一位尾数 q:阶码长度,阶码部分的二进制位数 p和q均不包括符号位 ●浮点数的存储式 1位 p 注:m为尾数的符号位,er为阶码的符号位,e为阶码的值,m为尾数的值 2、浮点数的表数范围 尾数为原码 尾数用原码、纯小数,阶码用移码、整数时,规格化浮点数N的表数范围: N≤(1-rm2) 尾数为补码 尾数用补码表示时,正数区间的表数范围与尾数采用原码时完全相同,而负 数区间的表数范围为 -(r 浮点数在数轴上的分布情况 上溢 下溢(浮点零) 上溢 mIn 负数区 0 Nmin 正数区 Nmax 例2.2:设p=23,q=7,m=ne=2,尾数用原码、纯小数表示,阶码用移 码、整数表示,求规格化浮点数N的表数范围。 解:规格化浮点数N的表数范围是:
2-2 N m m e = r • 数据表示在不断扩大,如字符串、向量、堆栈、图、表 • 用软件和硬件相结合的方法实现新的数据表示 例如:用字节编址和字节运算指令来支持字符串数据表示 用变址寻址方式来支持向量数据表示 2.1.2 浮点数的设计方法 1、浮点数的表示方式 • 一个浮点数 N 可以用如下方式表示: 需要有 6 个参数来定义。 两个数值: m:尾数的值,包括尾数的码制(原码或补码)和数制(小数或整数) e:阶码的值,移码(偏码、增码、译码、余码等)或补码,整数 两个基值: rm:尾数的基值,2 进制、4 进制、8 进制、16 进制和 10 进制等 re:阶码的基值,通常为 2 两个字长: p:尾数长度,当 rm=16 时,每 4 个二进制位表示一位尾数 q:阶码长度,阶码部分的二进制位数 p 和 q 均不包括符号位 • 浮点数的存储式 1 位 1 位 q 位 p 位 mf ef e m 注:mf 为尾数的符号位,ef 为阶码的符号位,e 为阶码的值,m 为尾数的值。 2、浮点数的表数范围 • 尾数为原码 尾数用原码、纯小数,阶码用移码、整数时,规格化浮点数 N 的表数范围: − − − − − 1 1 rm rm N 1 r r p m m q e q r re ( ) • 尾数为补码 尾数用补码表示时,正数区间的表数范围与尾数采用原码时完全相同,而负 数区间的表数范围为: q e q r re rm N rm r r p m m − − − − 1 −( 1 + ) − • 浮点数在数轴上的分布情况 上溢 下溢(浮点零) 上溢 -Nmin 负数区 -Nmax 0 Nmin 正数区 Nmax 例 2.2:设 p=23,q=7,rm=re=2,尾数用原码、纯小数表示,阶码用移 码、整数表示,求规格化浮点数 N 的表数范围。 解:规格化浮点数 N 的表数范围是:
AN≤(1-2-2)2 即 2-13sN≤(1-22)27 例2.3:尾数用补码、纯小数表示,阶码用移码、整数表示,p=6,q=6, rm=16,re=2,求规格化浮点数N的表数范围。 解:规格化浮点数N在正数区间的表数范围是: 16-65≤N≤(1-16)163 在负数区间的表数范围是: -163≤N≤ +16)·16 16 3、浮点数的表数精度(误差) 产生误差的根本原因是浮点数的不连续性 误差产生的直接原因有两个: 是两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内 是数据从十进制转化为2、4、8、16进制,产生误差。 ●规格化尾数的表数精度为: 6( rm,P) 最后1个有效位的可信度为一半, 当rm=2时,有 P 4、浮点数的表数效率 浮点数是一种冗余数制( Redundat Number System) 浮点数的表数效率定义为 可表示的规格化浮点数的个数_2·(rm-1)·rnp-l.2·r:9+1 如厘占人 数 2·rnP·2·r:q 简化表示:mXrm) 当尾数基值为2时,浮点数的表数效率为: 72) 浮点数的表数效率随rm增大 当尾数基值rm=16时,浮点数的表数效率为 6=94% 尾数基值rm=16与rm=2相比,浮点数的表数效率提高了 2)=1875倍 x16) 4、浮点数尾数基值的选择 在表示浮点数的6个参数中,只有尾数基值m、尾数长度p和阶码长度q 与表数范围、表数精度和表数效率有关
2-3 1 2 2 7 7 2 23 2 1 1 2 2 - − − − N ( ) 即: -129 23 127 2 1− 2 2 − N ( ) 例 2.3:尾数用补码、纯小数表示,阶码用移码、整数表示,p=6,q=6, rm=16,re=2,求规格化浮点数 N 的表数范围。 解: 规格化浮点数 N 在正数区间的表数范围是: -65 6 63 16 1−16 16 − N ( ) 在负数区间的表数范围是: 63 6 64 16 16 16 1 16 − − + − − N ( ) 3、浮点数的表数精度(误差) • 产生误差的根本原因是浮点数的不连续性 • 误差产生的直接原因有两个: 一是两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内, 二是数据从十进制转化为 2、4、8、16 进制,产生误差。 • 规格化尾数的表数精度为: ( , ) ( ) r p p m = rm 1 − − 2 1 最后 1 个有效位的可信度为一半, 当 rm=2 时,有: ( , ) ( ) 2 2 2 1 2 1 p p p = = − − − 4、浮点数的表数效率 • 浮点数是一种冗余数制(Redundat Number System) • 浮点数的表数效率定义为: = = − + 可表示的规格化浮点数的个数 − 全部浮点数个数 2 1 2 1 2 2 1 (r ) r r r r m m e m e p q p q 简化表示: (r ) r r m m m = −1 当尾数基值为 2 时,浮点数的表数效率为: (2) 2 1 2 = 50% − = • 浮点数的表数效率随 rm 增大 当尾数基值 rm=16 时,浮点数的表数效率为: (16) 16 1 16 = 94% − = 尾数基值 rm=16 与 rm=2 相比,浮点数的表数效率提高了: T = = ( ) ( ) . 16 2 1875倍 4、浮点数尾数基值的选择 • 在表示浮点数的 6 个参数中,只有尾数基值 rm、尾数长度 p 和阶码长度 q 与表数范围、表数精度和表数效率有关
在字长确定的情况下,如何选择尾数基值rm,使表数范围最大、表数精度 和表数效率最高 假设有两种表示方式F1和F2,它们二进制字长相同,尾数都用原码或补码 小数表示,阶码都用移码、整数表示,阶码的基均为2,尾数的基不同。 浮点数表示方式F1:尾数基值rm=2,尾数长度pl,阶码长度q1, 二进制字长:L1=pl+q1+2。 浮点数表示方式F2:尾数基值rm2=2k,尾数长度p2,阶码长度q2, 进制字长:L2=kp2+q2+2。 由F1与F2的二进制字长相同,即Ll=L2,得: pl+gl=k p2+g2 字长和表数范围确定时,尾数基值rm与表数精度的关系 F1的表数范围是:|N1ma=2, F2的表数范围是:N2mx=(23)2 F1与F2的表数范围相同,得到:2q1=k·292 两边取以2为底的对数,得到:q1=q2+1og2k (2.2) 把(2.2)式代入(2.1)式,得到:pl=kp2-log2k Fl的表数精度是:6=1.2-p1 把2.3)代入(24得到:6=12 kp 2+log k F2的表数精度是:62=1.2k(-p2) 取F2与F1表数精度的比值:T=02=2k+kgk 只有k=1(尾数基值rm=2)或k=2(尾数基值rm=4)时,比值T=1 结论1:在字长和表数范围一定时,尾数基值m取2或4,浮点数具有最高 的表数精度。 字长和表数精度一定,尾数基值rm与表数范围的关系 由F1与F2的表数精度相同得到 2(2)2 即 pI=kp2-k+I (2.6) 把(2.6)代入(2.1)得到:q1=q2+k-1 (2.7) 0q2+k-1 F1的表数范围:2=2 2的表数范围:(2k)2=2 假设表数范围F2大于F1,则阶码的最大值F2大于F1: k> 即k 这个不等式在正整数定义域内没有解,即不存在比F1的表数范围更大的浮 点数表示方式 只有k=1(尾数基值rm=2)或k=2(尾数基值rm=4)时,F2阶码的最大 值等于F阶码的最大值 结论2:在字长和表数精度一定时,尾数基值r取2或4,浮点数具有最大 的表数范围。 推论1:在字长确定之后,尾数基值rm取2或4,浮点数具有最大的表数范
2-4 • 在字长确定的情况下,如何选择尾数基值 rm,使表数范围最大、表数精度 和表数效率最高; 假设有两种表示方式 F1 和 F2,它们二进制字长相同,尾数都用原码或补码、 小数表示,阶码都用移码、整数表示,阶码的基均为 2,尾数的基不同。 浮点数表示方式 F1:尾数基值 rm1=2,尾数长度 p1,阶码长度 q1, 二进制字长:L1=p1+q1+2。 浮点数表示方式 F2:尾数基值 rm2=2 k,尾数长度 p2,阶码长度 q2, 二进制字长:L2=k p2+q2+2。 由 F1 与 F2 的二进制字长相同,即 L1=L2,得: p1+q1=k p2+q2 (2.1) • 字长和表数范围确定时,尾数基值 rm与表数精度的关系 F1 的表数范围是: q N 1 2 | 1max|=2 , F2 的表数范围是: |N max| ( ) q k 2 2 2 = 2 , F1 与 F2 的表数范围相同,得到: q q k 1 2 2 = 2 两边取以 2 为底的对数,得到:q1=q2+log2 k (2.2) 把(2.2)式代入(2.1)式,得到:p1=k p2-log2 k (2.3) F1 的表数精度是: 1 1 1 1 2 = 2 − p (2.4) 把(2.3)代入(2.4)得到: 1 1 1 2 2 = 2 −kp +log k F2 的表数精度是: 2 1 1 2 2 = 2 k( − p ) 取 F2 与 F1 表数精度的比值: T k k = = − − 2 1 1 2 log (2.5) 只有 k=1(尾数基值 rm=2)或 k=2(尾数基值 rm=4)时,比值 T=1。 结论 1:在字长和表数范围一定时,尾数基值 rm取 2 或 4,浮点数具有最高 的表数精度。 • 字长和表数精度一定,尾数基值 rm 与表数范围的关系 由 F1 与 F2 的表数精度相同得到: 1 2 2 1 2 2 1 1 1 2 = − p − p k ( ) 即: p1=kp2-k+1 (2.6) 把(2.6)代入(2.1)得到:q1=q2+k-1 (2.7) F1 的表数范围: q1 q2 k 1 q2 k 1 2 2 2 2 2 = 2 = 2 + − − F2 的表数范围: q q k k 2 2 2 2 (2 ) = 2 假设表数范围 F2 大于 F1,则阶码的最大值 F2 大于 F1: q q k k k k 2 2 1 1 2 2 2 2 − 即 − 这个不等式在正整数定义域内没有解,即不存在比 F1 的表数范围更大的浮 点数表示方式 只有 k=1(尾数基值 rm=2)或 k=2(尾数基值 rm=4)时,F2 阶码的最大 值等于 F1 阶码的最大值。 结论 2:在字长和表数精度一定时,尾数基值 rm取 2 或 4,浮点数具有最大 的表数范围。 推论 1:在字长确定之后,尾数基值 rm取 2 或 4,浮点数具有最大的表数范
围和最高的表数精度。 例2.4:IBM370系列计算机的短浮点数表示方式,尾数基值rm=16,尾数 字长为16进制6位,阶码基值rm=2,阶码字长6位,尾数用原码、小数表示, 阶码用移码、整数表示。求表数范围和表数精度,并尾数基址m=2的浮点数表 示方式进行比较 解:表数精度为:δ=·16-(6-)=2-21 表数范围是:|Nm时=162°=236 若尾数基值m=2,则有:12-(p-D=21 解得p=21,则q=32-21-2=9,它的表数范围是 1Nm=22=2512 推论2:浮点数的尾数基值m取2,并采用隐藏位表数方法是最佳的浮点数 表示方式。这种浮点数表示方式能做到表数范围最大、表数误差最小、表数效率 最高。 目前,IBM公司的IBM360、370、4300系列机等,尾数基值rm=16。 Burroughs公司的B6700、B7700等大型机,尾数基值rm=8。 DEC公司的PDP-11、VAX-11和 Alpha等小型机,CDC公司的CDC6600、 CYBER70 等大型机, Intel公司的x86系列机等均采用尾数基值rm=2 5、浮点数格式的设计 定义浮点数表示方式的6个参数的确定原则 ●尾数:多数机器采用原码、小数表示 采用原码制表示:加减法比补码表示复杂,乘除法比补码简单 表示非常直观 采用小数表示能简化运算,特别是乘除法运算 阶码:一般机器都采用整数、移码表示 采用移码表示的主要原因是:浮点0与机器0一致。 阶码进行加减运算时,移码的加减法运算要比补码复杂 ●尾数的基值rm选择2, 阶码的基值re取2 浮点数格式设计的关键问题是 在表数范围和表数精度给定的情况下,如何确定最短的尾数字长p和阶码 字长 例2.5:要求设计一种浮点数格式,其表数范围不小于1037,正、负数对称 表数精度不低于1016。 解:根据表数范围的要求:22-1>1037 解这个不等式 log(log1O 37/lg2+1)=695 log 2 取阶码字长q=7 根据表数精度的要求,得到:1 P-1)∠10-16
2-5 围和最高的表数精度。 例 2.4:IBM 370 系列计算机的短浮点数表示方式,尾数基值 rm=16,尾数 字长为 16 进制 6 位,阶码基值 rm=2,阶码字长 6 位,尾数用原码、小数表示, 阶码用移码、整数表示。求表数范围和表数精度,并尾数基址 rm=2 的浮点数表 示方式进行比较。 解: 表数精度为: = = 1 − − − 2 16 2 (6 1) 21 表数范围是: N max = = 6 2 256 16 2 若尾数基值 rm=2,则有: 1 2 2 2 1 21 = −( p− ) − 解得 p=21,则 q=32-21-2=9,它的表数范围是: N max = = 9 2 512 2 2 推论 2:浮点数的尾数基值 rm取 2,并采用隐藏位表数方法是最佳的浮点数 表示方式。这种浮点数表示方式能做到表数范围最大、表数误差最小、表数效率 最高。 目前,IBM 公司的 IBM360、370、4300 系列机等,尾数基值 rm=16。 Burroughs 公司的 B6700、B7700 等大型机,尾数基值 rm=8。 DEC 公司的 PDP-11、VAX-11 和 Alpha 等小型机,CDC 公司的 CDC6600、CYBER70 等大型机,Intel 公司的 x86 系列机等均采用尾数基值 rm=2。 5、浮点数格式的设计 定义浮点数表示方式的 6 个参数的确定原则: • 尾数:多数机器采用原码、小数表示 采用原码制表示:加减法比补码表示复杂,乘除法比补码简单 表示非常直观。 采用小数表示能简化运算,特别是乘除法运算。 • 阶码:一般机器都采用整数、移码表示 采用移码表示的主要原因是:浮点 0 与机器 0 一致。 阶码进行加减运算时,移码的加减法运算要比补码复杂 • 尾数的基值 rm 选择 2, • 阶码的基值 re 取 2, 浮点数格式设计的关键问题是: 在表数范围和表数精度给定的情况下,如何确定最短的尾数字长p和阶码 字长q 例 2.5:要求设计一种浮点数格式,其表数范围不小于 1037,正、负数对称, 表数精度不低于 10-16。 解:根据表数范围的要求: q 2 1 37 2 10 − 解这个不等式: q + = log(log /log ) log . 37 10 2 1 2 695 取阶码字长 q=7 根据表数精度的要求,得到: 1 2 2 1 16 10 − − (P ) −