计算机组成原理数值的机器运算,计算机组成原理第4章数值的机器运算(终).ppt...

计算机组成原理第4章数值的机器运算(终).ppt

1 第4章数值的机器运算 2 运算器是计算机进行算术运算和逻辑运算的主要部件 运算器的逻辑结构取决于机器的指令系统 数据表示方法和运算方法等 本章主要讨论数值数据在计算机中实现算术运算和逻辑运算的方法 以及运算部件的基本结构和工作原理 3 本章学习内容 4 1基本算术运算的实现4 2定点加减运算4 3带符号数的移位和舍入操作4 4定点乘法运算4 5定点除法运算4 6规格化浮点运算4 7十进制整数的加法运算4 8逻辑运算与实现4 9运算器的基本组成与实例 4 本章学习要求 掌握 定点补码加法和减法运算方法理解 3种溢出检测方法理解 补码移位运算和常见的舍入操作方法了解 串行加法器与并行加法器理解 进位产生和进位传递掌握 定点原码 补码乘法运算方法掌握 定点原码 补码加减交替除法运算方法理解 浮点加减乘除运算理解 逻辑运算了解 运算器的基本结构及浮点协处理器 5 4 1基本算术运算的实现 计算机中最基本的算术运算是加法运算 不论加 减 乘 除运算最终都可以归结为加法运算 所以在此讨论最基本的运算部件 加法器 以及并行加法器的进位问题 6 4 1 1加法器 1 全加器全加器 FA 是最基本的加法单元 它有三个输入量 操作数Ai和Bi 低位传来的进位Ci 1 两个输出量 本位和Si 向高位的进位Ci 图4 1全加器的逻辑框图 7 全加器真值表 8 根据真值表 可得到全加器的逻辑表达式为 Si Ai Bi Ci 1Ci AiBi Ai Bi Ci 1 全加器的逻辑表达式 9 2 串行加法器与并行加法器 加法器有串行和并行之分 在串行加法器中 只有一个全加器 数据逐位串行送入加法器进行运算 在并行加法器中 由多个全加器组成 其位数的多少取决于机器的字长 数据的各位同时运算 10 串行加法器具有器件少 成本低的优点 但运算速度太慢 所以除去某些低速的专用运算器外很少采用 全加器 串行加法器 2 串行加法器与并行加法器 ai bi si ci Ci 1 11 2 串行加法器与并行加法器 续 并行加法器可同时对数据的各位相加 但存在着一个加法的最长运算时间问题 这是因为虽然操作数的各位是同时提供的 但低位运算所产生的进位会影响高位的运算结果 例如 11 11和00 01相加 最低位产生的进位将逐位影响至最高位 因此 并行加法器的最长运算时间主要是由进位信号的传递时间决定的 而每个全加器本身的求和延迟只是次要因素 很明显 提高并行加法器速度的关键是尽量加快进位产生和传递的速度 12 并行加法器中的每一个全加器都有一个从低位送来的进位输入和一个传送给高位的进位输出 我们将传递进位信号的逻辑线路连接起来构成的进位网络称为进位链 每一位的进位表达式为 Ci AiBi Ai Bi Ci 1其中 Gi AiBi为进位产生函数Pi Ai Bi为进位传递函数 进位表达式Ci Gi PiCi 1 4 1 2进位的产生和传递 13 C1 G1 P1C0C2 G2 P2C1 Cn Gn PnCn 1 串行进位的并行加法器 图4 3串行进位的并行加法器 串行进位的并行加法器 总的延迟时间正比于字长 字长越长 总延迟时间也越长 若一位进位需2ty时间 完成n位进位就需要2nty 要提高加法运算速度 必须改进进位方式 14 1 并行进位方式并行进位又叫先行进位 同时进位 其特点是各级进位信号同时形成 C1 G1 PC0C2 G2 P2C1 G2 P2G1 P2P1C0C3 G3 P3C2 G3 P3G2 P3P2G1 P3P2P1C0C4 G4 P4C3 G4 P4G3 P4P3G2 P4P3P2G1 P4P3P2P1C0 4 1 3并行加法器的快速进位 以上进位输出只与Gi Pi以及最低进位C0有关 且不依赖于其低位进位Ci 1的输入 因此各级进位可以同时产生 形成并行进位 15 优点 这种进位方式是快速的 若不考虑Gi Pi的形成时间 从C0 Cn的最长延迟时间仅为2ty 而与字长无关 缺点 但是随着加法器位数的增加 Ci的逻辑表达式会变得越来越长 输入变量会越来越多 这会使电路结构变得很复杂 所以完全采用并行进位是不现实的 1 并行进位方式 续 16 单级先行进位方式 组内并行 组间串行 以16位加法器为例 可分为4组 每组4位 第一小组组内的进位逻辑函数C1 C2 C3 C4的表达式与前述相同 它们是同时产生的 实现上述进位逻辑函数的电路称之为4位先行进位电路CLA 其延迟时间是2ty 利用这种4位的CLA电路以及进位产生 传递电路和求和电路可以构成4位的CLA加法器 用4个这样的CLA加法器 很容易构成16位的单级先行进位加法器 2 分组并行进位方式 17 16位单级先行进位加法器 图4 416位单级先行进位加法器 组数越长 进位延迟时间就越长 18 16位单级先行进位时间图 图4 516位单级先行进位时间图 19 多级先行进位方式 组内并行 组间并行 仍以字长为16位的加法器作为例子 分析两级先行进位加法器的设计方法 第一小组的进位输出C4可以变成两个与项相或 C4 G4 P4G3 P4P3G2 P4P3P2G1 P4P3P2P1C0 G1 P1 C0其中 G1 G4 P4G3 P4P3G2 P4P3P2G1P1 P4P3P2P1Gi 称为组进位产生函数Pi 称为组进位传递函数 2 分组并行进位方式 续 20 依次类推 可以得到 C8 G2 P2 C4 G2 P2 G1 P2 P1 C0C12 G3 P3 G2 P3 P2 G1 P3 P2 P1 C0C16 G4 P4 G3 P4 P3 G2 P4 P3 P2 G1 P4 P3 P2 P1 C0 2 分组并行进位方式 续 21 成组先行进位电路BCLA 其延迟时间是2ty 利用这种4位的BCLA电路以及进位产生 传递电路和求和电路可以构成4位的BCLA加法器 16位的两级先行进位加法器可由4个BCLA加法器和1个CLA电路组成 2 分组并行进位方式 续 22 16位两级先行进位加法器 图4 616位两级先行进位加法器 23 若不考虑Gi Pi的形成时间 C0经过2ty产生第一小组的C1 C2 C3及所有组进位产生函数Gi 和组进位传递函数Pi 再经过2ty 由CLA电路产生C4 C8 C12 C16 再经过2ty后 才能产生第二 三 四小组内的C5 C7 C9 C11 C13 C15 此时加法器的最长进位延迟时间是6ty 2 分组并行进位方式 续 24 16位两级先行进位时间图 图4 716位两级先行进位时间图 25 定点数的加减运算包括原码 补码和反码3种带符号数的加减运算 其中补码加减运算实现起来最方便 4 2定点加减运算 26 原码加减运算规则 参加运算的操作数取其绝对值 若做加法 则两数直接相加 若做减法 则将减数先变一次补 再进行加法运算 运算之后 可能有两种情况 有进位 结果为正 即得到正确的结果 无进位 结果为负 则应再变一次补 才能得到正确的结果 结果加上符号位 通常 把运算之前的变补称为前变补 运算之后的变补称为后变补 4 2 1原码加减运算 27 4 2 2补码加减运算 1 补码加法两个补码表示的数相加 符号位参加运算 且两数和的补码等于两数补码之和 即 X Y 补 X 补 Y 补证明P94 28 根据补码加法公式可推出 X Y 补 X Y 补 X 补 Y 补从补码减法公式可以看出 只要求得 Y 补 就可以变减法为加法 不管Y的真值为正或为负 已知 Y 补求 Y 补的方法是 将 Y 补连同符号位一起求反 末尾加 1 Y 补被称为 Y 补的机器负数 由 Y 补求 Y 补的过程称为对 Y 补变补 求补 表示为 Y 补 Y 补 变补 2 补码减法 29 2 补码减法 续 某数的补码表示 与 变补 是两个不同的概念 一个负数由原码转换成补码时 符号位是不变的 仅对数值位各位变反 末位加 1 变补则不论这个数的真值是正是负 一律连同符号位一起变反 末位加 1 Y 补表示的真值如果是正数 则变补后 Y 补所表示的真值变为负数 反之亦然 例1 Y 0 0110 Y 原 1 0110 Y 补 1 1010 Y 补 0 0110例2 Y 0 0110 Y 原 0 0110 Y 补 0 0110 Y 补 1 1010 30 参加运算的两个操作数均用补码表示 符号位作为数的一部分参加运算 若做加法 则两数直接相加 若做减法 则将被减数与减数的机器负数相加 运算结果仍用补码表示 3 补码加减运算规则 31 例3 A 0 1011 B 0 1110 求A B A 补 0 1011 B 补 1 00100 1011 A 补 1 0010 B 补1 1101 A B 补 A B 补 1 1101A B 0 0011 补码加法示例 32 例4 A 0 1011 B 0 0010 求A B A 补 0 1011 B 补 1 1110 B 补 0 00100 1011 A 补 0 0010 B 补0 1101 A B 补 A B 补 0 1101A B 0 1101 补码减法示例 33 练习 P1364 4 24 5 3 4 4 2 00 001104 5 3 01 01110正溢 34 4 2 3补码的溢出判断与检测方法 1 溢出的产生在补码运算中 若两个正数相加 而结果为负 两个负数相加 而结果为正 则结果出错 例5 设 X 1011B 11D Y 111B 7D则 X 补 0 1011 Y 补 0 01110 1011 X 补 0 0111 Y 补1 0010 X Y 补 X Y 补 1 0010X Y 1110B 14D两正数相加结果为 14D 显然是错误的 35 1 溢出的产生 续 例6 设 X 1011B 11D Y 111B 7D则 X 补 1 0101 Y 补 1 10011 0101 X 补 1 1001 Y 补0 1110 X Y 补 X Y 补 0 1110X Y 1110B 14D两负数相加结果为14D 显然也是错误的 原因在于两数相加之和的数值已经超过了机器允许表示的范围 36 1 溢出的产生 续 字长为n 1位的定点整数 其中一位为符号位 采用补码表示 当运算结果大于2n 1或小于 2n时 就产生溢出 当运算结果超出了机器所能表示的范围时 数值位侵占了符号位 这种现象称为溢出 两个同符号的数相加会产生溢出 两个正数相加 结果大于机器所能表示的最大正数 称为上溢 正溢 两个负数相加 结果小于机器所能表示的最小负数 称为下溢 负溢 37 2 溢出检测方法 设 被操作数为 X 补 Xs X1X2 Xn操作数为 Y 补 Ys Y1Y2 Yn其和 差 为 S 补 Ss S1S2 Sn 采用一个符号位采用一个符号位检测溢出时 当Xs Ys 0 Ss 1时 产生正溢 当Xs Ys 1 Ss 0时 产生负溢 溢出判断条件为溢出 Ss XsYs 38 2 溢出检测方法 续 采用进位位判断两数运算时 产生的进位为Cs C1C2 Cn 其中 Cs为符号位产生的进位 C1为最高数值位产生的进位 两正数相加 当最高有效位产生进位 C1 1 而符号位不产生进位 Cs 0 时 发生正溢 两负数相加 当最高有效位不产生进位 C1 0 而符号位产生进位 Cs 1 时 发生负溢 故溢出条件为溢出 C1 Cs Cs C1 39 2 溢出检测方法 续 采用变形补码 双符号位补码 在双符号位的情况下 把左边的符号位Ss1叫做真符 两个符号位都作为数的一部分参加运算 这种编码又称为变形补码 双符号位的含义如下 Ss1Ss2 00结果为正数 无溢出Ss1Ss2 01结果正溢Ss1Ss2 10结果负溢Ss1Ss2 11结果为负数 无溢出当两位符号位的值不一致时 表明产生溢出 溢出条件为溢出 Ss1 Ss2 40 4 2 4补码定点加减运算的实现 要实现补码加法 则需给出X F Y F和F X三个控制信号 同时打开门A 门B和门C 把寄存器X和寄存器Y的内容送入加法器的两个输入端进行加法运算 并把结果送回 最后由打入脉冲CPX打入寄存器X 减法与加法的不同之处在于 加法使用Y F控制信号 减法使用 F和1 F控制信号 其余控制信号相同 41 补码加减运算的逻辑电路 图4 8补码加减运算器框图 1 F 多位的并行加法器 接受参加运算的两个数 进行加法运算 并在输出端给出本次运算结果 寄存器X的打入脉冲 补码加法 在X F Y F F X三个控制信号的控制下 打开门A 门B和门C 把寄存器X和寄存器Y的内容送入加法器的两个输入端进行加法运算 把结果送回寄存器X中 补码减法 与补码加法不同之处在于要用Y F来代替Y F 并在1 F控制信号作用下使结果加1 即可完成补码减法运算 42 在计算机中 实现乘除运算的方案通常有3种 软件实现 在低档微机中无乘除运算指令 只能用乘法和除法子程序来实现乘除运算 在原有实现加减运算的运算器基础上增加一些逻辑线路 使乘除运算变换成加减和移位操作 在机器中设有乘除指令 设置专用的乘 除法器 机器中设有相应的乘除指令 不管采用什么方案实现乘除法 基本原理是相同的 如果采用第 种方案 则必然会涉及到移位操作 4 3带符号数的移位和舍入操作 43 1 原码的移位规则不论正数还是负数 在左移或右移时 符号位均不变 空出位一律以 0 补入 负数的原码移位前后结果为 左移 移位前有 1X1X2 Xn 1Xn移位后有 1X2X3 Xn0右移 移位前有 1X1X2 Xn 1Xn移位后有 10X1 Xn 2Xn 1 4 3 1带符号数的移位操作 44 2 补码的移位规则 正数符号位不变 不论左移或右移 空出位一律以 0 补入 负数符号位不变 左移后的空出位补 0 右移后的空出位补 1 左移 移位前有 1X1X2 Xn 1Xn移位后有 1X2X3 Xn0右移 移位前有 1X1X2 Xn 1Xn移位后有 11X1 Xn 2Xn 1 45 3 移位功能的实现 移位器是由与门和或门组成的逻辑电路 实际是一个多路选择器 可以实现直传 不移位 左斜一位送 左移一位 和右斜一位送 右移一位 的功能 移位器逻辑电路如图所示 左移由2F L控制 Fi 1 Li直传由F L来控制 Fi Li右移由F 2 L来控制 Fi 1 Li移位器无数据寄存能力 46 移位器逻辑电路 1 图4 9移位器逻辑电路 左移相当于乘2 只有移位功能 没有保存功能 47 4 3 2带符号数的舍入操作 在算术右移时 由于受到硬件的限制 运算结果有可能需要舍去一定的尾数 这会造成一些误差 为了缩小误差 就要进行舍入处理 假定经过运算后的数共有p q位 现仅允许保留前p位 常见的舍入方法有 恒舍 切断 无论多余部分q位为何代码 一律舍去 保留部分的p位不作任何改变 48 4 3 2带符号数的舍入操作 续 冯 诺依曼舍入法这种舍入法又称为恒置1法 即不论多余部分q位为何代码 都把保留部分p位的最低位置1 下舍上入法下舍上入就是0舍1入 用将要舍去的q位的最高位作为判断标志 以决定保留部分是否加1 如该位为0 则舍去整个q位 相当于恒舍 如该位为1 则在保留的p位的最低位上加1 49 4 3 2带符号数的舍入操作 续 查表舍入法 ROM舍入法 用ROM来存放舍入处理表 每次经查表来读得相应的处理结果 通常 ROM表的容量为2K个单元 每个单元字长为K 1位 舍入处理表的内容设置一般采用的方法是 当K位数据的高K 1位为全 1 时 让那些单元按恒舍法填入K 1位全 1 其余单元都按下舍上入法来填其内容 50 4 4定点乘法运算 在计算机中 乘法运算大多数由累加与移位来实现 也有些机器中具有由大规模集成电路制造的阵列乘法模块 51 4 4 1原码一位乘法 1 原码一位乘法算法原码一位乘法是从手算演变而来的 即用两个操作数的绝对值相乘 乘积的符号为两操作数符号的异或值 同号为正 异号为负 乘积P X Y 符号Ps Xs Ys式中 Ps为乘积的符号 Xs和Ys为被乘数和乘数的符号 52 1 原码一位乘法算法 续 原码一位乘法的规则 参加运算的操作数取其绝对值 令乘数的最低位为判断位 若为 1 加被乘数 若为 0 不加被乘数 加0 累加后的部分积以及乘数右移一位 重复n次 和 符号位单独处理 同号为正 异号为负 53 1 原码一位乘法算法 续 通常 乘法运算需要3个寄存器 被乘数存放在B寄存器中 乘数存放在C寄存器中 A寄存器用来存放部分积与最后乘积的高位部分 它的初值为0 运算结束后寄存器C中不再保留乘数 改为存放乘积的低位部分 例8 已知 X 0 1101 Y 0 1011 求 X Y X 00 1101 B Y 1011 C 0 A 54 原码一位乘法示例 AC说明 00 00001011 X 00 1101C4 1 X 00 1101 00 01101101部分积右移一位 01 0011 X 00 1101C4 1 X 00 10011110部分积右移一位 000 0000C4 0 0 00 1001 00 01001111部分积右移一位 X 00 1101C4 1 X 01 0001 00 10001111部分积右移一位 PS XS YS 0 1 1 X Y 0 10001111 55 原码一位乘法流程图 56 2 原码一位乘法运算的实现 图4 12中A B是n 2位的寄存器 C是n位的寄存器 A寄存器和C寄存器是级联在一起的 它们都具有右移一位的功能 在右移控制信号的作用下 A寄存器最低一位的值将移入C寄存器的最高位 C寄存器的最低位的值作为字级与门的控制信号 以控制加被乘数还是不加被乘数 即加0 C寄存器中的乘数在逐次右移过程中将逐步丢失 取而代之的是乘积的低位部分 原码一位乘法运算器电路中除去三个寄存器外 还需要一个n 2位的加法器 一个计数器 n 2个与门 控制是否加被乘数 和一个异或门 处理符号位 57 4 4 2补码一位乘法 虽然原码乘法比补码乘法容易实现 但因为补码加减法简单 在以加减运算为主的通用机中操作数都用补码表示 所以这类计算机在做乘法时常使用补码乘法 1 校正法 校正法是将 X 补和 Y 补按原码规则运算 所得结果根据情况再加以校正 从而得到正确的 X Y 补 补码乘法的统一表达式 X Y 补 X 补 0 Y1Y2 Yn X 补 Ys 58 2 比较法 Booth乘法 递推公式 Z0 补 0 Z1 补 2 1 Z0 补 Yn 1 Yn X 补 Z2 补 2 1 Z1 补 Yn Yn 1 X 补 Zn 补 2 1 Zn 1 补 Y2 Y1 X 补 X Y 补 Zn 补 Y1 Ys X 补 式中 Z0 补为初始部分积 Z1 补 Zn 补依次为各次求得的累加并右移之后的部分积 59 2 比较法 Booth乘法 续 Booth乘法规则 参加运算的数用补码表示 符号位参加运算 乘数最低位后面增加一位附加位Yn 1 其初值为0 由于每求一次部分积要右移一位 所以乘数的最低两位Yn Yn 1的值决定了每次应执行的操作 移位按补码右移规则进行 共需做n 1次累加 n次移位 第n 1次不移位 60 Booth乘法运算操作 判断位YnYn 1操作00原部分积右移一位01原部分积加 X 补后右移一位10原部分积加 X 补后右移一位11原部分积右移一位 61 2 比较法 Booth乘法 续 由于符号位要参加运算 部分积累加时最高有效位产生的进位可能会侵占符号位 故被乘数和部分积应取双符号位 而乘数只需要一位符号位 运算时仍需要有3个寄存器 各自的作用与原码时相同 只不过存放的内容均为补码表示而已 例9 已知X 0 1101 Y 0 1011 求X Y X 补 11 0011 B Y 补 0 1011 C 0 A X 补 00 1101 62 Booth乘法示例 AC附加位说明 00 00000 10110 X 补00 1101C4C5 10 X 补 00 1101 00 0110101011部分积右移一位 000 0000C4C5 11 0 00 0110 00 0011010101部分积右移一位 X 补11 0011C4C5 01 X 补 11 0110 11 1011001010部分积右移一位 X 补00 1101C4C5 10 X 补 00 1000 00 0100000101部分积右移一位 X 补11 0011C4C5 01 X 补 11 0111 X Y 补 1 01110001 X Y 0 10001111 63 Booth乘法流程图 图4 13Booth乘法流程图 64 3 Booth乘法运算的实现 各器件的作用与原码一位乘法相同 A B寄存器长n 2位 C寄存器长n 1位 还需一个n 2位的加法器 n 2个与或门和一个计数器 由C寄存器的最低两位CnCn 1来控制是加 减被乘数还是加0 当CnCn 1 01时 加被乘数 即加B寄存器的内容 CnCn 1 10时 减被乘数 即加上B寄存器中内容的反 并在加法器的最低位加1 CnCn 1 00或11时 不加也不减 加0 由于符号位参与运算 所以不需要专门处理符号位的异或门 65 4 4 3补码两位乘法 为了提高乘法的执行速度 可以选用两位乘法的方案 所谓两位乘法 就是每次处理乘数中的两位 从而使乘法的速度提高了一倍 根据Booth乘法方便地推导出补码两位乘法 即把补码两位乘理解为将Booth乘法的两次合并为一次来做 66 补码两位乘法操作 Yn 1YnYn 1000 0 右移2位001 X 补 右移2位010 X 补 右移2位011 2 X 补 右移2位100 2 X 补 右移2位101 X 补 右移2位110 X 补 右移2位111 0 右移2位 67 4 4 3补码两位乘法 续 被乘数和部分积取3符号位 当乘数的数值位n为偶数时 乘数取两符号位 共需作 1次累加 次移位 最后一次不移位 当n为奇数时 乘数只需一个符号位 共需次累加和移位 但最后一次仅移一位 例10 已知 X 0 0110011 Y 0 0110010 求 X Y X 补 000 0110011 B Y 补 1 1001110 C 0 A2 X 补 000 1100110 X 补 111 1001101 2 X 补 111 0011010 68 补码两位乘法示例 AC附加位 2 X 补111 0011010 000 00000001 10011100 111 0011010 2 111 1100110101100111 0000 0000000 111 1100110 2 111 1111001101011001 X 补000 0110011 000 0101100 2 000 0001011001010110 X 补111 1001101 111 1011000 1 111 1101100000101011 X Y 补 1 11011000001010X Y 0 00100111110110 69 4 5定点除法运算 除法是乘法的逆运算 与乘法运算的处理思想相似 可以将n位除转化成若干次 减法 移位 也有些计算机具有由大规模集成电路制造的阵列除法模块 70 4 5 1原码除法运算 1 原码比较法和恢复余数法 比较法比较法类似于手工运算 只是为了便于机器操作 将除数右移改为部分余数左移 每一位的上商直接写到寄存器的最低位 设A寄存器中存放被除数 或部分余数 B寄存器中存放除数 C寄存器用来存放商Q 若A B 则上商1 并减除数 若A B 则上商0 比较法需要设置比较线路 从而增加了硬件的代价 71 比较过程的流程图 图4 16 a 比较过程流程 72 1 原码比较法和恢复余数法 续 恢复余数法恢复余数法是直接作减法试探方法 不管被除数 或部分余数 减除数是否够减 都一律先做减法 若部分余数为正 表示够减 该位商上 1 若部分余数为负 表示不够减 该位商上 0 并要恢复余数 73 恢复余数过程的流程图 图4 16 b 恢复余数过程流程 74 1 原码比较法和恢复余数法 续 由于部分余数的正 负是根据不同的操作数组合随机出现的 恢复除数法会使得除法运算的实际操作次数不固定 从而导致控制电路比较复杂 而且在恢复余数时 要多作一次加法 降低了除法的执行速度 因此 原码恢复余数法在计算机中一般很少采用 75 2 原码不恢复余数法 原码加减交替法 原码不恢复余数法是对恢复余数法的一种改进 它减少了浪费的加法时间 且运算的次数固定 故被广泛采用 在恢复余数法中 若第i 1次求商的部分余数为ri 1 则第i次求商操作为 ri 2ri 1 Y 若够减 部分余数ri 2ri 1 Y 0 商1 若不够减 部分余数ri 2ri 1 Y 0 商0 恢复余数后 ri ri Y 2ri 1 然后再左移一位 进行第i 1次操作 ri 1 2ri Y 2 ri Y Y 2ri 2Y Y 2ri Y 76 2 原码不恢复余数法 续 原码不恢复余数除法由下面的通式表示 ri 1 2ri 1 2Qi Y 式中Qi为第i次所得的商 若部分余数为正 则Qi 1 部分余数左移一位 下一次继续减除数 若部分余数为负 则Qi 0 部分余数左移一位 下一次加除数 由于加减运算交替地进行 故称为原码加减交替法 77 2 原码不恢复余数法 续 除法运算需要3个寄存器 A和B寄存器分别用来存放被除数和除数 C寄存器用来存放商 它的初值为0 运算过程中A寄存器的内容为部分余数 它将不断地变化 最后剩下的是扩大了若干倍的余数 只有将它乘上2 n才是真正的余数 例12 已知 X 0 10101 Y 0 11110 求 X Y X 00 10101 A Y 00 11110 B 0 C Y 变补 11 00010 78 原码不恢复余数除法示例 AC说明 00 101010 00000 Y 变补11 00010 Y 11 101110 00000余数为负 商0 11 01110左移一位 Y 00 11110 Y 00 011000 00001余数为正 商1 00 11000左移一位 Y 变补11 00010 Y 11 110100 00010余数为负 商0 11 10100左移一位 Y 00 11110 Y 00 100100 00101余数为正 商1 01 00100左移一位 Y 变补11 00010 Y 00 001100 01011余数为正 商1 00 01100左移一位 Y 变补11 00010 Y 11 011100 10110余数为负 商0 Y 00 11110恢复余数 Y 00 01100 79 原码不恢复余数除法示例 续 经过原码不恢复余数除法 有 商 0 10110余数 0 01100 2 5 X Y 0 10110 0 01100 2 5 0 11110 80 原码加减交替除法流程图 图4 17原码加减交替除法流程图 81 2 原码不恢复余数法 续 在定点除法运算时 为了防止溢出 要求被除数的绝对值小于除数的绝对值 X Y X Y 除外 且除数不能为0 因此第一次减除数肯定是不够减的 如果我们采用先移位后减除数的方法 得到的结果也是相同的 另外 在原码加减交替法中 当最终余数为负数时 必须恢复一次余数 使之变为正余数 注意此时不需要再左移了 82 3 原码加减交替除法的实现 图4 18中A B寄存器长n 2位 C寄存器长n 1位 还需一个n 2位的加法器 n 2个与或门 一个计数器和一个异或门 应当注意 A寄存器和C寄存器是级联在一起的 它们都具有左移一位的功能 在左移控制信号的作用下 C寄存器最高位的值将移入A寄存器的最低位 A寄存器中的初值是被除数 但在运算过程中将变为部分余数 C寄存器的最低位用来保存每次运算得到的商值 此商值同时也作为下一次操作是做加法还是做减法的控制信号 83 4 5 2补码除法运算 1 够减的判断参加运算的两个数符号任意 当被除数 或部分余数 的绝对值大于或等于除数的绝对值时 称为够减 反之称为不够减 当两数同号时 实际应作减法 两数异号时 实际应作加法 判断的方法和结果如下 当被除数 或部分余数 与除数同号时 如果得到的新部分余数与除数同号 表示够减 否则为不够减 当被除数 或部分余数 与除数异号时 如果得到的新部分余数与除数异号 表示够减 否则为不够减 84 2 上商规则 补码除法运算的商也是用补码表示的 上商的规则是 如果 X 补和 Y 补同号 则商为正数 够减时上商 1 不够减时上商 0 如果 X 补和 Y 补异号 则商为负数 够减时上商 0 不够减时上商 1 补码的上商规则可归结为 部分余数 ri 补和除数 Y 补同号 商上 1 反之 商上 0 85 3 商符的确定 商符是在求商的过程中自动形成的 按补码上商规则 第一次得出的商 就是实际应得的商符 为了防止溢出 必须有 X Y 所以第一次肯定不够减 当被除数与除数同号时 部分余数与除数必然异号 商上 0 恰好与商符一致 当被除数与除数异号 部分余数与除数必然同号 商上 1 也恰好就是商的符号 86 4 求新部分余数 求新部分余数 ri 1 补的通式如下 ri 1 补 2 ri 补 1 2Qi Y 补Qi表示第i步的商 若商上 1 下一步操作为部分余数左移一位 减去除数 若商上 0 下一步操作为部分余数左移一位 加上除数 5 末位恒置1商的最末一位恒置为 1 运算的最大误差为2 n 此法操作简单 易于实现 87 补码加减交替除法规则 88 补码加减交替除法示例 例13 已知X 0 1000 Y 0 1010 求X Y X 补 00 1000 A Y 补 11 0110 B 0 C Y 补 00 1010 89 补码加减交替除法示例 续 AC说明 00 10000 0000 Y 补11 0110 X 补 Y 补异号 Y 补 11 1100左移一位 Y 补00 1010 Y 补 00 01100 0010 ri 补 Y 补异号 商0 00 1100左移一位 Y 补11 0110 Y 补 00 00100 0100 ri 补 Y 补异号 商0 Y 补11 0110 Y 补 11 10100 1001 ri 补 Y 补同号 商1 11 0100左移一位 Y 补00 1010 Y 补 11 11101 0011末位恒置1 11 11100 0001 ri 补 Y 补同号 商1 00 0100左移一位 90 补码加减交替除法示例 续 商 补 1 0011 余数 补 1 1110 2 4 商 0 1101余数 0 0010 2 4 91 补码加减交替除法流程图 图4 19补码加减交替除法流程图 92 4 6规格化浮点运算 浮点数比定点数的表示范围宽 有效精度高 更适合于科学与工程计算的需要 浮点数中包含两组代码 采用定点整数格式的阶码和采用定点小数格式的尾数 因此 浮点运算实质上包含两组定点运算 阶码运算和尾数运算 但这两部分运算既有各自的作用 也有相互间的关联 主要讨论规格化浮点数的运算 并特别强调对阶和规格化两个概念 93 4 6 1浮点加减运算 设两个非0的规格化浮点数分别为 A MA B MB 规格化浮点数A B加减运算通式为 A B MA EA MB EB 94 1 浮点数加减运算步骤 对阶两个浮点数相加或相减 首先要把小数点的位置对齐 而浮点数的小数点的实际位置取决于阶码的大小 因此 对齐两数的小数点 就是使两数的阶码相等 这个过程称为对阶 要对阶 首先应求出两数阶码EA和EB之差 E EA EB若 E 0 表示两数阶码相等 即EA EB 若 E 0 表示EA EB 若 E 0 表示EA EB 95 1 浮点数加减运算步骤 续 当EA EB时 要通过尾数的移位来改变EA或EB 对阶的规则是 小阶向大阶看齐 要使小阶的阶码增大 则相应的尾数右移 直到两数的阶码相等为止 每右移一位 阶码加1 EA EB 则MB右移 每右移一位 EB 1 EB 直至EA EB为止 EA EB 则MA右移 每右移一位 EA 1 EA 直至EA EB为止 尾数右移后 应对尾数进行舍入 96 1 浮点数加减运算步骤 续 尾数加 减对阶之后 就可以进行尾数加 减 即 MA MB MC其算法与定点加 减法相同 尾数结果规格化尾数加 减运算之后得到的数可能不是规格化数 为了增加有效数字的位数 提高运算精度 必须进行结果规格化操作 97 1 浮点数加减运算步骤 续 尾数结果规格化 M 1设尾数用双符号位补码表示 经过加 减运算之后 可能出现以下6种情况 即 00 1xx x规格化 11 0 xx x规格化 00 0 xx x 11 1xx x 01 xxx x 10 xxx x 98 1 浮点数加减运算步骤 续 第 和 种情况 如2个异号数相加或者同号数相减 使 M 1 2 需要使尾数左移以实现规格化 这个过程称为左规 尾数每左移一位 阶码相应减1 EC 1 EC 直至成为规格化数为止 左规 Cs1Cs2C1左规可以进行多次 Cs1 Cs2表示尾数MC的两个符号位 C1为MC的最高数值位 例 00 0101正尾数的最高有效位不为1 应该左移为00 101011 1011补码表示的负尾数 尾数最高有效位不为0 应该左移为11 0110 99 1 浮点数加减运算步骤 续 01 xxx x 10 xxx x在定点加减运算中称为溢出 但浮点加减运算中 只表明此时尾数的绝对值大于1 而并非真正的溢出 这种情况应将尾数右移以实现规格化 这个过程称为右规 尾数每右移一位 阶码相应加1 EC 1 EC 右规 Cs1 Cs2右规最多只有一次 100 1 浮点数加减运算步骤 续 舍入最简单的舍入方法是恒舍法 即无条件的丢掉正常尾数最低位之后的全部数值 溢出判断当尾数右规后 根据阶码来判断浮点运算结果是否溢出 EC 补 01 xxx x 表示上溢 此时 浮点数真正溢出 机器需停止运算 做溢出中断处理 EC 补 10 xxx x 表示下溢 浮点数值趋于零 机器不做溢出处理 而是按机器零处理 101 2 浮点数加减运算举例 有两浮点数为A 0 101110 2 01B 0 101011 2 10假设这两数的格式 阶码4位 用移码 偏置值为23 表示 尾数8位 用补码表示 包含一位符号位 即阶码尾数 A 浮 0111 0 1011100 B 浮 0110 1 0101010 X 移 偏置值 XX是真值 102 2 浮点数加减运算举例 续 对阶求阶差 E EA EB 1 2 1 E 1 表示EA EB 按对阶规则 将MB右移一位 EB 1 EB 得 B 浮 0111 1 1010101 尾数求和00 1011100 11 101010100 0110001 103 2 浮点数加减运算举例 续 尾数结果规格化由于结果的尾数是非规格化的数 故应左规 尾数每左移一位 阶码减1 直至尾数成为规格化数为止 最后结果为 A B 浮 0110 0 110001即A B 0 110001 2 10未发生溢出 104 练习 4 11 1 X 浮0101 1 011110 Y 浮0100 1 000010对阶EA EB 0101 0100 0001则MB右移EB 1补码负数1 000010 1 100001 Y 浮 0101 1 100001 105 尾数相加11 011110 11 100001 10 111111右规E 1 01101 011111 X Y 浮 0110 1 011111无溢出X Y 0 100001 106 11 011110 00 011111 11 111101需左规4次 X Y 浮 0001 1 010000无溢出所以X Y 0 110000 107 4 6 2浮点乘除运算 设两个非0的规格化浮点数分别为A MA B MB 规格化浮点数A B乘除运算通式为 MA EA MB EB MA MB EA EB MA EA MB EB MA MB EA EB 108 1 乘法步骤 两浮点数相乘 其乘积的阶码应为相乘两数的阶码之和 其乘积的尾数应为相乘两数的尾数之积 即 A B MA MB 阶码相加两个浮点数的阶码相加 如果阶码用补码表示 无须校正 当阶码用偏置值为2n的移码表示时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值