组成原理课件 Computing__and_ALU V127_第1页
组成原理课件 Computing__and_ALU V127_第2页
组成原理课件 Computing__and_ALU V127_第3页
组成原理课件 Computing__and_ALU V127_第4页
组成原理课件 Computing__and_ALU V127_第5页
已阅读5页,还剩145页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

三 运算器 谭志虎 本章主要内容 定点补码加 减法运算定点乘法运算定点除法运算浮点运算运算器组织 C语言中的运算 逻辑运算位运算 逻辑运算 移位运算 位扩展位截断用于类型转换算术运算无符号 符号整数的加减乘除运算变量与常数间的乘除运算浮点数加减乘除运算如何用电路实现 3 1定点补码加 减法运算 运算方法及实现运算公式溢出检测逻辑实现快速加法器 补码加减法的实现 补码加法 X Y 补 X 补 Y 补和的补码 补码的和补码减法 X Y 补 X 补 Y 补 X 补 Y 补差的补码 补码的差减法变加法 关键是求 Y 补求补公式 Y 补 Y 补 补对 Y 补逐位取反 再在最低位加1是否恒成立 补码加法公式证明 X Y 补 X 补 Y 补x 0y 0 无需证明 x 0y0 2 3证明相同 x 0y 0只需证明2 4两种情况即可 补码加法公式证明x 0y 0 x 补 x y 补 2 y x 补 y 补 x 2 y 2 x y 当x y0时2 x y 2模舍去 x 补 y 补 2 x y x y mod2 x y 补 mod2 补码加法公式证明x 0y 0 x 补 2 x y 补 2 y x 补 y 补 2 x 2 y 2 2 x y mod2 2 x y 0故0 2 x y 2故2 2 x y mod2 2 x y x y 补mod2 补码减法公式证明 X Y 补 X 补 Y 补 X Y 补 X 补 Y 补 加法公式 Y 补 Y 补 Y 补 Y 补 Y Y 补 0 补 0故 Y 补 Y 补成立 X Y 补 X 补 Y 补 X 补 Y 补 Y 补 Y 补 补 补码加法的几种情况 正正得负正溢出 负负得正负溢出 正常结果 计算机如何识别运算结果是否溢出 模数舍去正常结果 单符号数溢出检测1 溢出逻辑 正正得负负负得正设两数符号位为f0f1 和数符号位fs溢出检测信号Overflow OF 单符号溢出检测方法2 正溢出 负溢出 正常结果 正常结果 Cf 0 Cn 0 Cf 1 Cn 1 Cf 0 Cn 1 Cf 1 Cn 0 Overflow Cf Cn 符号位进位位Cf 最高位进位位Cn 双符号溢出检测方法 正溢出 负溢出 未溢出 未溢出 Overflow f1 f2 双符号位最高位永远是正确符号位 溢出检测软件方法 inttadd ok intx inty intsum x y intneg over x 0 intpos over x 0 软 硬件功能具有等效性和差异性 二进制加法运算 各位逐位相加 进位从右至左传递首先要考虑一位加法 然后考虑进位链 Xn 1 X2X1X0 Yn 1 Y2Y1Y0 n 1 2 1 0 一位加法逻辑电路实现 0 1 11 0 11 1 00 0 0一个异或门即可实现自动一位加法算术运算变成逻辑电路 S X Y 带进位链的一位全加器 Si Xi Yi Ci Ci 1 XiYi Xi Yi Ci Ci 1 XiYi Xi Yi Ci 一位全加器逻辑实现 3级门电路延迟3T Si Xi Yi Ci Ci 1 XiYi Xi Yi Ci n位加法器 n位加法器包含n个全加器将n个一位全加器串联低位进位输出连接到高位进位输入 单符号位补码加法器电路 ripplecarryadder 符号位 无符号 有符号加法器有无区别 无符号数溢出检测unsignedchar UOF Sub Cout 加法变大 减法变小 加法溢出 减法溢出 双符号位补码加法器电路 符号位 计算机中是否需要双符号 补码减法电路实现 补码减法可以变加法 X 补 Y 补 X 补 Y 补关键是求 Y 补方法 将Y补连同符号位一起逐位取反末位加一 Y 补 Y 补 补注意补码区间不对称 加法器的改造 符号位 Input 加法器输入Y补作加法 输入 Y 补则作减法 加法器的改造 引入运算控制位SubSub 0时作加法 送入加法器的是Y补Sub 1时作减法 送入加法器的是 Y 补对Y补逐位取反 末位加一 Y 补 Y 补 补 可控加减法电路 符号位 减法的避免减少了逻辑器件 控制信号Sub如何产生 加法器是算术运算电路的核心 所有算术运算都基于加法器实现加法器不区分符号数与无符号数加法器取低n位为结果 生成标志信息 标志寄存器 存放运算标志的寄存器称为程序 状态字或标志寄存器每个标志对应标志寄存器中的一个标志位 IA 32中的EFLAGS寄存器 MIPS无标志寄存器 ZF 结果为零 SF 结果为负数 CF 进位 借位 OF 有符号溢出 OF Cn 1 Cout 串行加法器时间延迟 n个全加器延迟 3n个门电路延迟 考虑片内并行性 2n 1个门电路延迟 符号位 快速加法器 能否提前产生各位的进位输入使得各位的加法运算能并行起来即可提高多位加法器运算速度 并行加法器进位链 carry lookahead Si Xi Yi Ci 1 Ci XiYi Xi Yi Ci 1 Pi Xi Yi 进位生成函数Generate 进位传递函数Propagate Gi XiYi 并行加法器进位链 高位运算依赖于低位进位计算不能并行能否提前得到各位的进位输入 Cn Gn PnCn 1 Cn 1 Gn 1 Pn 1Cn 2 C1 G1 P1C0 并行加法器进位链 C1 G1 P1C0 C2 G2 P2C1 G2 P2 G1 P1C0 G2 P2G1 P2P1C0 C3 G3 P3C2 G3 P3 G2 P2G1 P2P1C0 G3 P3G2 P3P2G1 P3P2P1C0 并行加法器进位链 Cn Gn PnGn 1 PnPn 1Gn 2 PnPn 1Pn 2Gn 3 PnPn 1 P1C0 进位输出仅与最低位进位输入C0有关位数越长 进位链电路复杂度越高通常按照4位一组进行分组运算 C4 G4 P4G3 P4P3G2 P4P3P2G1 P4P3P2P1C0 生成函数 传播函数 C1 G1 P1C0 C2 G2 P2G1 P2P1C0 C4 G4 P4G3 P4P3G2 P4P3P2G1 P4P3P2P1C0 与门异或门电路 1级门电路延迟 先行进位电路carrylookahead c0 1 1 2级门电路延迟 快速加法器 S4 X4 Y4 C3 P4 C3S3 X3 Y3 C2 P3 C2S2 X2 Y2 C1 P2 C1S1 X1 Y1 C0 P1 C0进位信号得到后 求和只需一级异或门即可完成 四位快速加法器 与门异或门电路 1级延迟 C0 四位先行进位电路 2级延迟 G4P4 G3P3 G2P2 G1P1 C4C3C2C1 X4Y4 X3Y3 X2Y2 X1Y1 C4 4级门电路延迟 X4Y4 X3Y3 X2Y2 X1Y1 G4P4 G3P3 G2P2 G1P1 16位加法器 组内先行进位组间串行进位可否组间并行 成组进位 C4 G4 P4G3 P4P3G2 P4P3P2G1 P4P3P2P1C0G4 G4 P4G3 P4P3G2 P4P3P2G1成组进位生成函数P4 P4P3P2P1成组进位传递函数C4 G4 P4 C0C1 G1 P1C0上下两式子形式一样 成组进位生成函数 传递函数 P4 P4P3P2P1G4 G4 P4G3 P4P3G2 P4P3P2G1C4 G4 P4 C0 两级先行进位电路 G4 P4 C3 C2 C1 G4 P4 G3 P3 G2 P2 G1 P1 C0 1 1 2级门电路延迟 1 1 先行进位电路CLA74182 输入 P4G4P3G3P2G2P1G1C0输出 先行进位输出C4C3C2C1成组进位传送输出P 成组进位发生输出G Cn Gn PnGn 1 PnPn 1Gn 2 PnPn 1Pn 2Gn 3 PnPn 1 P1C0Gi XiYiPi Xi Yi 先行进位芯片CLA74182 2级门电路延迟 四位运算器芯片SN74181 先行进位的多功能算术 逻辑运算单元 SN74181 16位先行进位系统 8级门电路延迟 2级门电路延迟 3级门电路延迟 3级门电路延迟 生成P G 需3T 生成C3 C12需2T 求和需3T C4 C16的关系 64位先行进位系统 12级门电路延迟 生成P G 第一级P G 需3T 生成第二级P G 需2T 生成C3 48需2T 生成C52需2T 求和需3T 32位先行进位系统 时间延迟 本章主要内容 定点补码加 减法运算定点乘法运算定点除法运算浮点运算运算器组织 定点乘法运算 原码乘法运算方法原码乘法运算实现补码乘法运算方法补码乘法运算实现 乘法运算实现方法 执行乘法运算子程序实现乘法运算设置专用乘法器实现乘法运算原码 补码 借助加法器配置相应部件实现乘法运算原码一位乘法的运算方法与逻辑实现补码一位乘法的运算方法与逻辑实现 原码乘法 符号单独运算 直接异或绝对值相乘 仅需考虑数值部分的计算以定点数为例进行讨论 二进制手工乘法运算 p4 p3 p2 p1 p0 p9p8p7p6p5p4p3p2p1p0 X4X3X2X1X0 Y4Y3Y2Y1Y0 先计算相加数 然后逐列相加 p9 一位乘法逻辑实现 R X Y1 1 11 0 00 1 00 0 0与门实现一位乘法25个与门并发一级门延迟 生成所有相加数 横向进位无符号阵列乘法器 p3 p2 p1 p0 p9 0 0 横向进位阵列乘法器时延分析 X3Y1 X2Y1 X1Y1 X0Y1 X4Y1 X3Y2 X2Y2 X1Y2 X0Y2 X4Y2 X3Y3 X2Y3 X1Y3 X0Y3 X4Y3 X3Y4 X2Y4 X1Y4 X0Y4 X4Y4 X4Y0 X3Y0 X2Y0 X1Y0 X0Y0 p3 p2 p1 p0 p9 p7 p8 0 0 0 p4 0 p5 0 p6 横向进位阵列乘法器时延分析 X3Y1 X2Y1 X1Y1 X0Y1 X4Y1 X3Y2 X2Y2 X1Y2 X0Y2 X4Y2 X3Y3 X2Y3 X1Y3 X0Y3 X4Y3 X3Y4 X2Y4 X1Y4 X0Y4 X4Y4 X4Y0 X3Y0 X2Y0 X1Y0 X0Y0 p3 p2 p1 p0 p9 p7 p8 0 0 0 p4 0 p5 0 p6 0 n n 1 个全加器 n 2 n 2 3T T 3n 4 3T T 斜向进位无符号阵列乘法器 0 0 斜向进位阵列乘法器时延分析 p4 p3 p2 p1 p0 p9 0 0 0 0 0 n n 1 个全加器2 n 1 3T T 2n 2 3T T 阵列乘法器时间延迟小结 硬件成本相同 n n 1 个全加器 性能差异3n 2n 如何继续优化 横向进位阵列乘法器 斜向进位阵列乘法器 n n位原码乘法器框图 相加数产生部件 A af an 1 a1a0 B bf bn 1 b1b0 1 n n乘法阵列 补码乘法器原理图 bf bn 1 b1b0 乘法阵列 同前n n阵列 2n位求补器 数值同原码 相加数 积绝对值 补码乘积 1 af an 1 a1a0 相加数产生电路 同前 汽车生产流水线 大规模流水线组装方式将复杂工作分解为简单重复劳动 将待组装的车辆通过流水线的方式流转 大大提升了生产效率 降低了生产成本 得益于计算机及自动化技术的发展 现代汽车工厂中自动控制的机械臂 机器人大量取代工人 将工人从重复而繁重的劳动中解放出来 下岗 计算机中的流水线 流水思想 复杂问题分解成细粒度任务并发乘法流水线 浮点流水线 指令流水线流水线 寄存器 组合逻辑 寄存器 组合逻辑 寄存器 数据通路串联流水线时钟频率取决于组合逻辑的关键路径 加工结果 待加工数据 时钟 阵列乘法器流水优化1 X3Y1 X2Y1 X1Y1 X0Y1 X4Y1 X3Y2 X2Y2 X1Y2 X0Y2 X4Y2 X3Y3 X2Y3 X1Y3 X0Y3 X4Y3 X3Y4 X2Y4 X1Y4 X0Y4 X4Y4 X4Y0 X3Y0 X2Y0 X1Y0 X0Y0 p3 p2 p1 p0 p9 p7 p8 0 0 0 p4 0 p5 0 p6 Y0X Y1X 2 Y2X 4 Y3X 8 Y4X 16 第1步 第2步 第3步 第4步 流水接口 流水接口 寄存器 锁存加工结果 和后续步骤需要的数据YiX 阵列乘法器流水优化2 X3Y1 X2Y1 X1Y1 X0Y1 X4Y1 X3Y2 X2Y2 X1Y2 X0Y2 X4Y2 X3Y3 X2Y3 X1Y3 X0Y3 X4Y3 X3Y4 X2Y4 X1Y4 X0Y4 X4Y4 X4Y0 X3Y0 X2Y0 X1Y0 X0Y0 p3 p2 p1 p0 p9 1 p7 p8 0 0 0 p4 0 p5 0 p6 2 3 4 5 8 9 A B 7 6 Booth两位乘法华莱士树乘法流水线 乘法运算实现方法 设置专用乘法器实现乘法运算执行乘法运算子程序实现乘法运算借助加法器配置相应部件实现乘法运算原码一位乘法的运算方法与逻辑实现补码一位乘法的运算方法与逻辑实现 5个部分积相加 X3Y1 X2Y1 X1Y1 X0Y1 X4Y1 X3Y2 X2Y2 X1Y2 X0Y2 X4Y2 X3Y3 X2Y3 X1Y3 X0Y3 X4Y3 X3Y4 X2Y4 X1Y4 X0Y4 X4Y4 X4Y0 X3Y0 X2Y0 X1Y0 X0Y0 p3 p2 p1 p0 p9 p7 p8 0 0 0 p4 0 p5 0 p6 部分积 5个部分积相加 0 0 0 0 0 X3 X2 X1 X0 X4 0 0 0 0 0 X3 X2 X1 X0 X4 X4 X3 X2 X1 X0 p3 p2 p1 p0 p9 p7 p8 0 0 0 p4 0 p5 0 p6 X4X3X2X1X0 1404140414 p9p8p7p6p5p4p3p2p1p0 部分积累加的数学表示 XYn XYn 1 XYn 2 1 XYn 2 XYn 1 XYn 2 1 2 1 XYn 2 XYn 12 1 XYn 2 2 XY1 2 1 XY2 2 2 XYn 2 nX Y X Y1 2 1 Y2 2 2 Yn 2 n 原码乘法算法流程图 开始 作完加法 一定移位n次加法符号位单独计算 例子 X 0 1101Y 0 0011求 X 原 Y 原 00 0000 00 1101 00 1101 00 01101 00 1101 01 00111 00 100111 00 0000 00 100111 00 0100111 00 0000 00 0100111 00 00100111 0 001 0 00 0 0 0 最终乘积 符号位和数据位分开运算Yn决定累加 X 是0连同进位位一起右移可能溢出 移位后正常 原码一位乘法硬件实现 核心运算累加 0 X逻辑右移 2分支合并累加 YnX节约多路选择器减少寄存器访问 YnX 2先移位再锁存 提升速度运算计数控制简单状态机控制 计数器比较 原码一位乘法硬件实现 R0存放 高n位 初值为0R1存放Y 其它位 如何载入Y初值 运算结果右移后送寄存器输入时钟到来 R0 R1锁存新值状态机控制使能信号停机停机后最终乘积存放在R0 R1中 Y Yn X Y 2连同进位位右移 加法器 部分积累加的数学表示 XYn XYn 1 XYn 2 1 XYn 2 XYn 1 XYn 2 1 2 1 XYn 2 XYn 12 1 XYn 2 2 XY1 2 1 XY2 2 2 XYn 2 nX Y X Y1 2 1 Y2 2 2 Yn 2 n 补码一位乘法 1 被乘数X符号任意 乘数Y为正 X 补 X0 X1X2 Xn Y 补 0 Y1Y2 Yn X 补 Y 补 2 X Y 2n 1 X Y 2n 1Y XY 2 2n 0 Y1Y2 Yn XY 2 Y1Y2 Yn XY 2 XY X Y 补 X Y 补 X 补 Y 补 补码一位乘法 2 被乘数 X 符号任意 乘数 Y 为负数 X 补 X0 X1X2 Xn Y 补 1 Y1Y2 Yn Y 补 2 YY Y 补 2 0 Y1Y2 Yn 1 X Y 补 X 0 Y1Y2 Yn 1 补 X 0 Y1Y2 Yn X 补 X 0 Y1Y2 Yn 补 X 补 X 补 0 Y1Y2 Yn X 补 X 补 0 Y1Y2 Yn Y0 X 补 补码一位乘法 X Y 补 X 补 0 Y1Y2 Yn Y0 X 补 X 补 Y0 0 Y1Y2 Yn X 补 Y0 Y12 1 Y22 2 Yn2 n X 补 Y0 Y1 Y12 1 Y22 1 Y22 2 Yn2 n 1 Yn2 n X 补 Y1 Y0 Y2 Y1 2 1 Y3 Y2 2 2 0 Yn 2 n XY补 X补 Y12 1 Y22 2 Yn2 n 原码乘法 补码一位乘法流程图 booth一位乘法 开始 i 0 0 Yn 1 0 X 补 X 补 结束 01 10 00或11 Y N 0 Y 补右移一位i i 1 n 1次加法符号位参与运算不需单独计算符号位 补码乘法举例 X 补 0 1101 Y 补 1 1101求 X 补 Y 补 00 0000 11 0011 11 0011 11 10011 00 1101 00 01101 00 001101 11 0011 11 011001 11 1011001 00 0000 11 1011001 11 11011001 11101 1110 111 0 最终乘积 11 00 0000 11 11011001 X 补 1 0011Yn 1Yn决定累加值 Yn 1 Yn x 补算术右移运算可能溢出吗 加减交替 不会溢出 补码一位乘法流程与硬件逻辑 Y Yn 1 Yn X 补 Y 2算术右移 和数 Y 算术右移一位 加法器 例子 和数 R1 右移后送R0 R1 X 0 10111 Y 0 00101 用补码一位乘法计算 X 补 Y 补 X 补 1 01001 X 补 0 10111 Y 补 0 00101 X 补 X 补 X 补 X 补 0 0 乘法器性能提升 核心算法 n个部分积累加无乘法器实现 Intel8008 8080 编译器生成子程序Booth一位乘 n个全加器 n2个全加器时延 面积小 Intel8086 booth二位乘 减少相加数 速度更快 增加额外电路阵列乘法器 n2 n 个全加器 2n级全加器时延 面积大 华莱士树 更多全加器 log2n级全加器时延 面积更大 主流乘法器二位booth算法 华莱士树 流水 C语言中整数的乘法运算 两个n位整数的乘积只取2n位乘积中的低n位intmul intx inty intz x y returnz 无溢出判断 如何判断乘积是正确的 有符号乘积的高n位全0或全1无符号乘积的高n位全0 则不溢出 x y被转换为乘法指令运算电路得到64位乘积 只取低32位赋给z 乘法运算反汇编 0 x004016D0push ebp0 x004016D1mov esp ebp0 x004016D3sub 0 x10 esp0 x004016D6mov0 x8 ebp eax0 x004016D9imul0 xc ebp eax0 x004016DDmov eax 0 x4 ebp 0 x004016E0mov 0 x4 ebp eax0 x004016E3leave0 x004016E4ret 整数乘法溢出判断 无符号 若Puh 0 则不溢出带符号 若Psh每位都等于Ps的最高位 则不溢出指令 分无符号数乘指令 带符号整数乘指令 整数的乘运算 硬件不判溢出 仅保留2n位乘积 供软件使用程序不判断溢出 编译器也不生成用于溢出处理的代码 会发生整数溢出问题 乘法指令的操作数长度为n 而乘积长度为2nIA 32中8位 8位的乘积存放在AX16位 16位的乘积存放在DX AX32位 32位的乘积存放在EDX EAXMIPS中32位乘法运算的64位乘积存放在寄存器Hi和Lo中 乘法指令可生成溢出标志 编译器可使用2n位乘积来判断是否溢出 变量与常数之间的乘法运算 整数乘法比移位和加法运算慢很多编译器在处理变量与常数相乘时 用其它快速运算指令代替乘法x 20 x 4 x 2 乘法转换成了2次移位和1次加法x 15 x 4 x乘法转换成了1次移位和1次减法移位加减组合运算和直接相乘结果一样的 包括溢出 是否优化取决于组合运算周期数是否小于乘法开销 本章主要内容 定点补码加 减法运算定点乘法运算定点除法运算 绝对值 浮点运算运算器组织 除法手工运算 余数 0 00111 0 01011 0 00000011 0 000011 0 001011 0 00001011 0 1011 商 1 1 0 不够减 商上0 够减 商上1 求余数除数左移一位继续按规则上商直至所需位数 1 0 0 1 关键是判断是否够减 恢复余数除法 绝对值 如何判断是否够减利用补码作减法 判断余数符号即可余数为负数时 必须恢复余数将余数加除数 恢复成原值求下一位商 必须将余数左移一位 再与除数比较手工运算将除数右移 注意这里余数放大了 最后结果要缩小比较 上商 恢复 余数移位 再比较 直到商的位数足够 恢复余数法 00 1001 11 1110 00 1001 00 0111 00 0011 11 1011 00 0110 00 0001 R 0 Qn 1 0 1 R 2R Y X 0 1001Y 0 1011求X Y Y 补 1 0101第一次一定不够减 商Qn R0 余数符号位 R 0R R Y R 2R YQ 0 1101R 0 0001 2 4 00 1100 恢复余数乘法问题 需要进行恢复余数的操作余数是负数 必须恢复余数绝对值运算 余数不可能是负数恢复余数的操作次数不确定运算时间不固定最慢除法 每次都不够除 拖慢除法速度实际应用通常采用不恢复余数除法 不恢复余数法 设某次余数为Ri 求下位商需将Ri左移一位 再减去除数Y进行比较 此过程可表示为2Ri Y余数Ri小于0时商上0 需要恢复余数 左移一位 再减除数Y比较 2Ri Y Y 2Ri2 2Ri Y 4Ri Y 2 2Ri Y Y不恢复余数法 余数Ri小于0时商上0 左移一位 再加除数Y比较 不恢复余数法 00 1001 11 1110 00 0111 00 0011 11 1011 00 0001 Y X 0 1001Y 0 1011求X Y Y 补 1 0101第一次一定做减法商Qn R0 余数符号位 R R 1 QnY 2Q 0 1101R 0 0001 2 4 R 2R Y 11 1100 R 2R Y 00 0110 00 1110 R 2R Y R 2R Y 11 0110 不恢复余数法逻辑实现 Q 1 Qn Y 补 Q 2Qn R0 和数 Q 左移一位 加法器 例子 和数 Q 左移后送R Q 用原码不恢复余数法计算 X 补 Y 补 X 0 10101 Y 0 11011 Y 补 1 00101 Y 补 Y 补 Y 补 Y 补 Y 补 Y 补 余数为负数 仍需恢复 可控制加 减法 CAS 单元 原码阵列除法器 0 Q1 Q2 P 1 1 时间延迟分析 0 Q1 Q2 P 1 CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS CAS 1 n n个CAS单元 n n 4T如何优化 本章主要内容 定点补码加 减法运算定点乘法运算定点除法运算浮点运算运算器组织 浮点加减法运算 Ex EyS 2Ex Mx My Ex Ey必须先对阶浮点计算步骤 对阶 尾数运算 规格化 舍入 溢出判断 对阶 对阶 使得尾数可以直接相加 例子28 0 11000 26 0 00111 大对小or小对大 大阶对小阶28 0 11000 26 11 000 溢出小阶对大阶26 0 00111 28 0 0000111 小阶对大阶尾数右移 运算结果规格化 27 0 11000 也可表示为28 0 01100 浮点数规格化尾数非零时 要求绝对值 0 5 尾数MSB 1否则修改阶码并移动尾数 使其满足上述要求目的 保证浮点数的编码唯一性右移以实现规格化向右规格化右归阶码 左移以实现规格化向左规格化左归阶码 规格化形式 真值规格化数0 1XXXX 0 1XXXX原码规格化数0 1XXXX1 1XXXX补码规格化数00 1XXXX11 0XXXX补码非规格化数00 0XXXX11 1XXXX01 XXXXX10 XXXXX 1 2非规格化 规格化方法 连符号位一起移位00 0XXXX11 1XXXX01 XXXXX10 XXXXX浮点数表示时要进行规格化规格化有0 1XXX1 XXXX两种1不需要表示 可隐藏浮点数运算时结果需要进行规格化 绝对值小于0 5左规 00 1XXX0可多位 绝对值小于0 5左规 11 0XXX0左归补零 绝对值大于1右规 00 1XXXX符号位进位位右移 绝对值大于1右规 11 0XXXX符号位进位位右移 运算结果规格化规则 尾数运算上溢时右归 一位 变形补码运算结果10 XX或01 XXX 单符号如何判断 右归时连同符号位进位位一起右移 阶码作加法尾数运算下溢时左归 可多位 0 01XX0 0001XXX或1 10XX1 11110XX左归时LSB位补0 阶码作减法 溢出处理 尾数上溢右归尾数下溢左归阶码正上溢浮点数上溢 X 阶码负上溢浮点数下溢 X 0浮点数溢出判定标准阶码运算是否溢出溢出检测方法同定点数 3种方法 舍入处理 右规后低位部分丢失了一位 产生误差舍入方法 0舍1入 截去法 向偶数舍入不同舍入方式对精度的影响 舍入处理 向零舍入 1 1 1 2 2 向上舍入 2 2 2 3 3 向下舍入 1 1 1 2 2 四舍五入 1 2 2 3 3 1 1 2 2 向偶数舍入 1 2 2 2 3 2 IEEE754采用向偶数舍入 001 0011 10保证LSB为0 浮点运算的精度问题 FloatingPointnumbersarelikepilesofsand everytimeyoumoveoneyoulosealittlesand butyoupickupalittledirt 浮点数就像一堆沙 每移动一次就会失去一点沙 并捡回一点脏如何使失去的沙和捡回的脏都尽量少呢 更长尾数的浮点运算器增加附加位IEEE754 中间结果须在右边加2个附加位Guard 保护位 在最低有效位右边的位Round 舍入位 在保护位右边的位 浮点数加减法五步骤 对阶尾数求和规格化 左规 右规 溢出判断舍入 截去 0舍1入 偶数舍入 浮点运算举例 例1两浮点数x 2101 0 11011011 y 2111 0 10101100 假设尾数在计算机中以补码表示 可存储10位尾数 2位符号位 阶码以补码表示 双符号位 求x y 解 将x y转换成浮点格式 x 浮 00101 00 11011011 Y 浮 00111 11 01010100步骤1 对阶 阶差为Ex Ey Ex 补 Ey 补 Ey 补 11001Ex Ey 00101 11001 11110 2 0小阶对大阶 X阶码加2 尾数右移2位 x 浮 00111 00 0011011011保留位 浮点运算举例 x 浮 00111 00 0011011011保留位 Y 浮 00111 11 01010100步骤2 尾数求和 X Y 浮 00111 11 1000101011保留位参与运算步骤3 结果规格化 X Y 浮 00110 11 000101011非规数 左归1位 阶码减1 保留位 步骤4 舍入处理 X Y 浮 00110 11 00010110 0舍1如法 X Y 浮 00110 11 00010101 截去法 步骤5 溢出判断 X Y 浮 2110 x 0 11101011 无溢出 特殊例子 X 2111 0 11111111 Y 2111 0 10000001 X 浮 0111 0 11111111 Y 浮 0111 0 10000001 X Y 浮 0111 1 10000000尾数上溢 右归一位 连同符号位进位位一起右移1位 阶码加1 X Y 浮 1000 0 11000000阶码正溢出 运算结果上溢 特殊例子 X 2 1000 0 11110000 Y 2 1000 0 10000001 X 浮 1000 1 00010000 Y 浮 1000 0 10000001 X Y 浮 1000 1 10010001尾数下溢 左归一位 左移一位 阶码减1 X Y 浮 1000 1 001000101000 1111 0111 7阶码负上溢 运算结果下溢 浮点数加减法步骤 对阶阶码补码 移码尾数求和IEEE754为什么用原码表示 符号位为什么放首位 规格化规格化规则 溢出判断舍入 截去 0舍1入 偶数舍入 是否破坏规格化特性 IEEE754溢出例子 X 7F000000Y 7F000000求X Y 阶码相同 E 254 尾数还原隐藏位后运算1 0 1 0 2 0非规数 尾数右移一位 阶码加一阶码为255 无穷大 运算上溢 程序员角度看硬件实现 union charc 4 floatf inti t1 t2 t3 main t1 i 0X7F000000 t2 i 0X7F7FFFFF Maxfloatt3 f t1 f t1 f printf 08X f n t1 i t1 f printf 08X f n t2 i t2 f printf 08X f n t3 i t3 f 7F000000170141183460469230000000000000000000000 0000007F7FFFFF340282346638528860000000000000000000000 0000007F8000001 INF00 IEEE754溢出例子 X 00C00000Y 00800000求X Y 阶码相同 E 1 尾数还原隐藏位后运算1 1 1 0 0 1非规数 尾数左移一位 阶码减一阶码为0 非规格化数 运算下溢 程序员角度看硬件实现 union charc 4 floatf inti t1 t2 t3 t4 main t1 i 0X00000001 t2 i 0X00C00000 t3 i 0X00800000 Minusfloatt4 f t2 f t3 f printf 08X 61f n t1 i t1 f printf 08X 61f n t2 i t2 f printf 08X 61f n t3 i t3 f printf 08X 61f n t4 i t4 f 000000010 000000000000000000000000000000000000000000001401298464324817100C000000 0000000000000000000000000000000000000176324152623343130000000008000000 0000000000000000000000000000000000000117549435082228750000000004000000 0000000000000000000000000000000000000058774717541114375000000 浮点数乘法运算 如 X 2m MxY 2n MyX Y 2m Mx 2n My 2m n Mx My 阶码相加阶码相加可能产生溢出 要进行溢出判断 如溢出计算机要进行处理尾数相乘尾数相乘可得积的尾数 可按定点乘法运算方法运算结果规格化可按浮点加 减法运算规格化方式处理 舍入方式也相同 浮点数除法运算 如 X 2m MxY 2n MyX Y 2m Mx 2n My 2m n Mx My 尾数调整如被除数尾数大于除数尾数 绝对值 则将被除数尾数右移一位 阶码 1阶码求差商的阶码等于被除数的阶码减去除数的阶码尾数相除以被除数的尾数除以除数的尾数以获得商的尾数 尾数相除与定点除法运算相同 浮点运算器构建 浮

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论