Chapter3 运算方法和运算器1.溢出判断与变形补码1) 溢出判别信号:设[x] 补 =x 0.x1x2…xn ,[y] 补 =y 0.y1y2…yn, [s]补 =[x]补 +[y] 补 =s 0.s1s2…sn ;OVR 为溢出判别信号,且当 OVR=1 时,表示溢出2) 三种判断溢出的方法:①根据符号 x0、y0 及 s0 判别溢出(3 个数符):即 x0 和 y0 均与 s0 不同时,产生溢出,且 x0= y0 =0 时为正溢出;x0= y0 =1 时为负溢出②根据两数相加时产生的进位判别(2 个进位):设 Cf 为符号位上产生的进位,C 1 为最高数值位上产生的进位即若 Cf≠C 1 ,则产生溢出,且 Cf = 0 时,为正溢出;C f = 1 时,为负溢出③采用变形补码运算(双符号位补码):即[x] 变形补 =x 0x0.x1x2…xn ,[y] 变形补 =y 0y0.y1y2…yn,设[s] 变形补 = [x]变形补 +[y]变形补 = sf1sf2.s1s2…sn 变形补码的溢出判断条件: OVR=s f1⊕s f2当 sf1≠s f2 时,出现溢出其中:s f1sf2=01,表示正溢出; sf1sf2=10,表示负溢出。
2.定点乘法运算:1) 原码一位乘法的计算过程、硬件实现:(不要求)①原码一位乘法的算法规则:a. 积的符号单独处理用绝对值| 被乘数|和|乘数| 进行运算b. 设初始部分积 Z0=0,增设进位触发器 Cj 且初始化为 0c. 以 |乘数| 的最低位 yn 作为乘法判别位,若判别位为 1,则在前次部分积上加上 |被乘数| ,然后将本次 部分积连同 |乘数|及 Cj 一起逻辑右移一位;若判别位为 0,则在前次部分积上加 0(或不加) ,然后将本次部分积连同|乘数| 及 Cj 一起逻辑右移一位d. 重复 c.,直到运算 n 次为止 (n 为乘数数值部分的长度) ②例 1:已知 x=-0.1101,y= -0.1011,求 x×y=? (原码一位乘法)解:[x] 原 = 1.1101, [y]原, = 1.1011,乘积[z] 原 =[x×y]原Step1:符号位单独处理,z 0=1⊕1=0Step2:将 |被除数| (不含符号位)和 |除数| (不含符号位)的数值部分相乘注意 :初始部分积为 0(含符号,正 0) ;初始乘数为乘数绝对值的数值部分(不含符号) 得:step:3:| x×y|=0.10001111Step4:加上符号部分:[x×y] 原 = 1.10001111Step5:即 x×y= -0.10001111 ③硬件实现(1)A、B、C:乘法计算开始时,A :部分积, B:被乘数,C :乘数;乘法运算结束后,A:乘积高位部分,B:不变,仍然是被乘数,C:乘积低位部分。
2)CR:是计数器,用于记录乘法运算的次数3)C j:是进位位4)C T:是乘法控制器,用于控制乘法运算的开始和结束C T=1,允许发出移位脉冲,控制进行乘法运算;C T=0,不允许发出移位脉冲,停止进行乘法运算2) 补码一位乘法的计算过程、硬件实现:①补码一位乘法的算法规则:a. 参加运算的数均以补码表示,结果仍以补码表示b. 增设 yn+1,且初始化为 0,部分积初始化为 0c. 部分积与被乘数采用双符号位,且符号位参加运算d. 判别 ynyn+1,并采取相应的操作其中,右移指将部分积连同乘数( 包括 yn+1 )一起算术右移 e. 重复 d,共做 n+1 次操作,最后一次不移位! ②例 1:已知 x=-0.1101 y=-0.1011 求 x×y=? (补码一位乘法)解:[x] 补 = 11.1101, [y]补, = 1.1011,[-x] 补 = 00.1101,乘积[z] 补 =[x×y]补注意 : 初始部分积 为 0(含符号, 双符号 ,正 0) ; 初始乘数 为乘数绝对值的数值部分(含符号,单符号) 附加位 yn+1=0最后一次只做运算,不移位得:[x×y] 补 = 0.10001111 (单符号)x×y= -0.10001111 ③硬件实现(1)A、B、C:A:存放乘积和部分积的最高位,初始内容为 0,A f1、A f2 是部分积的两个符号位,补码乘法中符号位和数值部分同时参加运算;C:存放乘数和部分积的最低位,Cn、C 0 用于控制电路中进行+[x] 补 ,还是+[-x] 补 操作;B:存放被乘数, C:乘积地位部分。
2)C T:是乘法控制器,用于控制乘法运算的开始和结束C T=1,允许发出移位脉冲,控制进行乘法运算;C T=0,不允许发出移位脉冲,停止进行乘法运算3)CR:是计数器,用于记录乘法运算的次数初始时, CR 清 0,每进行一次运算,CR+1,当计数到 CR=n+1 时,结束运算注意:CR=n 是,C T 就清 0,所以第 n+1 次运算时,不再进行移位3.定点除法运算——原码不恢复余数法(原码加减交替除法)------过程(非要求) ,原理(要求)1)原码不恢复余数法的算法规则1 判溢出,比较被除数和除数若在定点小数运算时,|被除数| > |除数| ,则除法将发生溢出,不能进行除法运算2 符号位单独处理,商的符号由被除数和除数符号的异或运算求得3 用被除数和除数的数值部分进行运算,被除数减去除数4 若所得余数为正,表示够减,相应位上商为 1,将余数左移一位后,减去除数;若所得余数为负,表示不够减,相应位上商为 0,将余数左移一位后,加上除数5 重复第④步,直到所求得的商的各位为止如果最后一次所得的余数仍为负,则需要再做一次加除数的操作,以得到正确地余数 (参看,书 P98, 【例 3.18】 )2)书 p97,例 3.17:已知 x=-0.1101 ,y=-0.1011,求 x/y=? 解:[x] 原 = 1.1101, [y]原, = 1.1011,|x|=0.1101 , |y|=0.1011 , [-|y|]补 =11.0011,Step1:符号位单独处理,商符 q0=x0⊕y 0=1⊕0=1Step2:将 |被除数| (双符号位)和 |除数| (单符号位)的数值部分相除注意 :初始余数为被除数 X(含符号,双符号,正 0) ;初始乘数为乘数绝对值的数值部分(不含符号) 。
得:商|x/y| = 0.1101,余数|r| = 0.0111因为:商符 q0=1,余数符号与被除数 X 相同,余数的数值部分位数等于被除数和除数数值部分位数之和所以,商[q] 原 =[x/y]原 =1.1101 (单符号) ,余数[r] 原 =1.0111×2-4,所以 x/y = -0.1101,r = -0.000001113)硬件实现A 寄存器:被除数——>(部分余数)——>余数B 寄存器:除数C 寄存器:初态为 0,终态为商Ff: 余数的符号位,若 Ff=0,表示余数为正,在 C 最低位上商 1,并控制下次做减法若Ff=1,表示余数为负,在 C 最低位上商 0,并控制下次做加法CT: 是除法控制触发器,用于控制除法运算的开始和结束C T=1,允许发出移位脉冲,控制进行除法运算;C T=0,不允许发出移位脉冲,停止进行除法运算4.浮点加减运算(例题)————有要求写出计算过程两个浮点数加减运算的步骤如下:1 对阶:求阶码之差;小阶向大阶看齐即将阶码小的数的尾数向右移位,每右移一位,阶码加 1,右移位数等于两数阶码之差的绝对值|△e|2 尾数求和/差:若求和,则将对阶后的两数尾数直接相加,得到两浮点数之和的尾数;若求差,则将对阶后的减数的尾数变补,然后与被减数的尾数相加,得到两浮点数之差的尾数。
3 结果规格化:原码表示中,满足 1/2≤|S|<1 的数为规格化数;(尾数的最高位为 1)补码表示中,满足一 1≤S<-1/2 和 1/2≤S <1 的数为规格化数 (符号位与尾数的最高位异或值为 1)4 舍入:舍入方法:a. 恒舍法(截断法):将移出的部分一律舍去,保留的部分不作任何改变b. 0 舍 1 入法:若右移时被丢掉数位的最高位为 0,则舍去;若右移时被丢掉数位的最高位为 1,则将 1 加到尾数的最低位c. 恒舍法(截断法):将移出的部分一律舍去,保留的部分不作任何改变d. 末位恒置 1 法:不管右移丢失数据的最高位是 0 还是 1 ,均将尾数的最低位恒置为1e. ROM 舍入法(查表舍入法):舍入表编制原则是:若尾数低 K 位值不为全 1,则按0 舍 1 入法编制;若尾数低 K 位值为全 1,则按截断法编制。