340 likes | 493 Vues
运算器总结和复习. 内容提要. 运算器功能:处理数据 数据表示:原码、反码、补码、移码 功能实现:加减乘除 检错纠错码 电路设计:加法器 运算器基本设计 运算器实例: Am2901. 数据类型. 逻辑型数据 真( 1 )、假( 0 ) 字符型数据 单字符 ASCII 、 UNICODE 字符串 字符的拼接、存储 数值型数据 整数、定点小数、浮点数、十进制数 原码、反码、补码、移码表示 有权码、无权码( BCD 码、余 3 码、循环码). 定点小数 : N = N N N ……...N. s. -1. -2.
E N D
内容提要 运算器功能:处理数据 数据表示:原码、反码、补码、移码 功能实现:加减乘除 检错纠错码 电路设计:加法器 运算器基本设计 运算器实例:Am2901
数据类型 • 逻辑型数据 • 真(1)、假(0) • 字符型数据 • 单字符 • ASCII、UNICODE • 字符串 • 字符的拼接、存储 • 数值型数据 • 整数、定点小数、浮点数、十进制数 • 原码、反码、补码、移码表示 • 有权码、无权码(BCD码、余3码、循环码)
定点小数: N = N N N ……...N s -1 -2 -n 整 数 : N = N N N ... N N s n n-1 1 0 浮点数: N = ME E ...E EM M ...M -n s s m-1 1 0 -1 -2 数值数据在计算机内的格式 IEEE 标准: 阶码用移码,尾数用原码,基为 2 符号位阶码位尾数数码位总位数 短浮点数: 1 8 23 32 长浮点数: 1 11 52 64 临时浮点数: 1 15 64 80
定点小数表示: Ns N1 N2 … Nn (纯小数)原码,反码,补码的定义 [ X ] = [ X ] = [ X ] = X 0 =< X < 1 -1 < X <= 0 1 - X 原 X 0 =<X < 1 -n -n (2 - 2 )+ X -1 < X <= 0 Mod ( 2 - 2 ) 反 X 0 =<X < 1 Mod 2 2 + X -1=< X <= 0 补
3.整数的编码表示 • 例如:整数8位码: • X = +01110 [X]原= 0 0001110 [X]补= 00001110 X =-01110 [X]原= 1 0001110 [X]补= 1 1110010
设n+1位纯整数X=X0X1X2…Xn 4.移码表示法 例:X=+10110,Y=-10110,则有 结论:对补码的符号位取反即得其对应的移码
原 反 补码表示 • 正数的 原码,反码,补码表示均相同, • 符号位为 0,数值位同数的真值。 • 零的原码和反码均有2个编码,补码只一个编码 • 负数的 原码,反码,补码表示均不同, • 符号位为 1,数值位:原码为数的绝对值; • 反码为每一位均取反码; • 补码为反码再在最低位+1; • 由[X]补求[-X]补:每一位取反后再在最低位+1; • 由[X]补求X的真值:X= -1 + Xi * 2-i (X<0) n i=1
补码的加减运算 [X + Y]补= [X]补+ [Y] 补 [X-Y] 补= [X]补+ [-Y]补 [-Y] 补 = 对 [Y] 补 逐位取反,再在最低位加 1 溢出判断: 1) 正 + 正 得 负 或 负 + 负 得 正; 2) 数字位有向符号位的进位,但符号位不产生向更高位的进位; 3) 双符号位的值为 01或 10;
00 101100 1011 +11 1011 + 00 0101 100 0110 01 0000 X+Y X-Y 模4丢弃 例 1 模 4补码计算 X=0.1011 y= -0.0101求[X+Y]补和[X-Y]补 解:[X]补= 00 1011, [Y]补= 11 1011 [-Y]补= 00 0101 (X+Y双符号位相同,不溢出;X-Y双符号位不同,溢出)
[x]补 1.0011 + [y]补 1.0101 [x]补 11.0011 + [y]补 11.0101 [x-y]补 10.1000 [x-y]补 110.1000 模2丢弃 模4丢弃 C=0, Cf=1,结果溢出 fs1=1, fs2=0,结果溢出 例 2 x=-0.1101,y=-0.1011,求x+y 解:[x]补=1.0011,[y]补=1.0101
原码一位乘 1.运算公式: 2.运算方法 若乘数的当前位=1,将被乘数和部分积求和。 若乘数的当前位=0,则跳过。 将部分积移位。 所有位都完成后,部分积即为最终结果。
解: [x]原=0.1001,[y]原=1.1101 高位部分积 低位部分积/乘数 说明 00.1001 00.0100 1 101 1 00.0100 00.0010 0 1 110 00.1011 00.0101 1 0 1 11 00.1110 1 00.0111 0 1 0 1 例:x=0.1001,y=-0.1101,用原码一位乘法求x×y 00.0000 1 1 01 最低位为1,+x +00.1001 部分积,乘数右移一位 最低位为0,+0 +00.0000 部分积,乘数右移一位 +00.1001 最低位为1,+x 部分积,乘数右移一位 最低位为1,+x +00.1001 部分积,乘数右移一位
F加法器 C 乘 数 & & C/2 C F F B A A 部分积 & Cd B 被乘数 计数器 F/2 A 运算结果: [x×y]原=(0⊕1)+0.01110101 =1.01110101 x×y=-0.01110101 原码一位乘逻辑电路框图
补码乘法运算规则 用Y的值乘[X]补,达到[X]补乘[Y]补,求出[X*Y]补,不必区分符号与数值位。乘数最低一位之后要补初值为0的一位附加位,并且每次乘运算需要看附加位和最低位两位的取值情况决定如何计算部分积,其规则是: 判别位 部分积计算 00 + 0 01 +被乘数 10 -被乘数 11 + 0
例:x=0.1101,y=-0.1001,用补码一位乘法求x×y 解: [x]补=00.1101,[y]补=11.0111,[-x]补=11.0011 附加位 高位部分积 低位积/乘数 说明 00.0000 1 0 1 1 10 11.0011 11.1001 1 0 1 110 1 11.1001 11.1100 1 1 1 0 111 11.1100 11.1110 0 1 1 1 011 00.1011 101 1 0 1 1 00.0101 11.1000 判别位为10,+[-x]补 +11.0011 部分积,乘数右移一位 +00.0000 判别位为11,+0 部分积,乘数右移一位 +00.0000 判别位为11,+0 部分积,乘数右移一位 判别位为01,+ [x]补 +00.1101 部分积,乘数右移一位 判别位为10,+[-x]补 +11.0011 不再移位
定点除法运算 原码一位除 1.运算公式: 恢复余数法 加减交替法 2.运算方法
原码一位除法运算方法 • 恢复余数法(取数的绝对值) • 余数-除数;余数为Ri • 若Ri >0,则上商1,余数左移1位, Ri+1 =2 Ri -Y • 若Ri <0,则上商0,( Ri +Y)再左移。 Ri+1 =2( Ri +Y)-Y;即:Ri+1 =2( Ri +Y)-Y=2 Ri+Y • 继续;直到余数为0或精度足够。 • 加减交替法(不恢复余数法) • 被除数-除数;余数为Ri • 若Ri >0,则上商1,余数左移1位, Ri+1 =2 Ri -Y • 若Ri <0,则上商0,不恢复余数,直接对Ri左移,然后+Y,可得新的余数。 Ri+1 =2 Ri+Y
解: |x|补=00.1011, |y|补=00.1101, [-|y|]补=11.0011 0 0 0 0 0 00.1011 -y 11.0011 11.1110 11.1100 00.1101 +y 00.1001 01.0010 -y 11.0011 00.0101 00.1010 -y 11.0011 11.1101 例:x=0.1011,y=-0.1101,用原码加减交替法求x/y 被除数(高)/余数 被除数(低)/商 说明 x-y 0 0 0 0 0 余数<0,商上0 0 0 0 0 0 余数左移,+y 0 0 0 01 余数>0,商上1 0 0 0 1 0 余数左移,-y 余数>0,商上1 0 0 0 1 1 0 0 1 1 0 余数左移,-y 0 0 1 1 0 余数<0,商上0
11.1010 +y 00.1101 00.0111 余数 商 说明 0 0 1 1 0 11.1101 0 1 1 0 0 余数左移,+y 0 1 1 01 余数>0,商上1 最后得:[x/y]原=1+0.1101=1.1101 即: x/y=-0.1101,余数为:0.0111×2-4
补码一位除 补码除法与原码除法很类似 差别仅在于: 被除数与除数为补码表示, 直接用补码除,求出反码商, 再修正为近似的补码商。 实现中, 求第一位商要判2数符号的同异, 同号,作减法运算,异号,则作加运算; 上商,余数与除数同号,商1,作减求下位商, 余数与除数异号,商0,作加求下位商; 商的修正:多求一位后舍入,或最低位恒置1。
解: [x]补=00.1011, [y]补=11.0011, [-y]补=00.1101 0 0 0 0 0 00.1011 +) 11.0011 11.1110 11.1100 00.1101 -) 00.1001 01.0010 +) 11.0011 00.0101 00.1010 +) 11.0011 11.1101 例:x=0.1011,y=-0.1101,用补码一位除法求x/y 被除数/余数 商 说明 两数异号,+[y]补 0 0 0 0 1 余数与y同号,商上1 0 0 0 1 0 余数左移,-[y]补 0 0 0 1 0 余数与y异号,商上0 0 0 1 0 0 余数左移,+[y]补 余数与y异号,商上0 0 0 1 00 0 1 0 0 0 余数左移,+[y]补 0 1 0 01 余数与y同号,商上1
11.1010 -) 00.1101 00.0111 余数 商 说明 00.0111 1 0 0 1 0 00.1110 +) 11.0011 00.0001 余数 商 说明 0 1 0 0 1 11.1101 1 0 0 1 0 余数左移,-[y]补 1 0 0 1 0 余数与y异号,商上0 若末位恒置1,最后得: [x/y]补=1.0011 即:x/y=-0.1101,余数为:0.0111×2-4 若精确求解,则多求一次商 余数左移,+[y]补 余数不为0 因此末位+1校正,所以[x/y]补=1.0010+2-4=1.0011 即: x/y=-0.1101,余数为:0.0111×2-4
浮点加减运算 1.运算规则 X±Y=(Mx.2Ex-Ey±My)×2Ey Ex<=Ey 2.运算步骤 (1)对阶操作 (2)对阶后的浮点数尾数求和(差)操作 (3)规格化处理 (4)舍入操作 (5)检查阶码是否溢出 对阶原则: 小阶向大阶看齐
解: x补=1110,1.00010 (-y)补=1100,1.00100 y补=1100,0.11100 例:设浮点数的阶码为4位(含阶符),尾数为6位(含尾符),x、y中的指数项、小数项均为二进制真值。x=-2-010×0.1111 y=2-100×0.1110,求X-Y=? ①对阶,[ΔE]=[Ex]补-[Ey]补=1110+0100=0010,其真值为0010,即x的阶码比y的阶码大2,-y的尾数应右移2位,阶码加2,得: (-y)补=1110,1.11001。(0舍1入) ②尾数相减(用双符号),即(x尾)补+(-y尾)补为: 11.00010 + 11.11001 丢掉 10.11011 1 ③结果规格化:右规,尾数右移1位,阶码加1 [x-y]补=1111,1.01110 (0舍1入) x-y=2-001×(-0.10010)
设n+1位纯整数X=X0X1X2…Xn 浮点数的阶码运算(移码运算及溢出的判断) (1)运算公式 (2)溢出判断 双符号位:最高符号位恒用‘0’参加运算,当结果的最高符号位变为‘1’时则溢出。
例:EX=-111,Ey=+110,如果用4位移码表示阶码,求Ex±Ey,并判断是否溢出。例:EX=-111,Ey=+110,如果用4位移码表示阶码,求Ex±Ey,并判断是否溢出。 解:[Ex]移=00 001,[Ey]移=01 110 [-Ey]移=00 010 [Ey]补=00 110 [-Ey]补=11 010 [Ex]移00 001 +[Ey]补00 110 [Ex]移00 001 +[-Ey]补11 010 [Ex+Ey]移00 111 [Ex-Ey]移11 011 不溢出 结果为负 溢出 下溢出 Ex+Ey=-1
浮点数乘、除法 • 算法 • 阶码加、减:乘:EX+EY,除:EX- EY • 对尾数进行乘、除法,求得结果 • 规格化 • 舍入,可能再次规格化 • 进行溢出检查(阶码)
数据检错和纠错 • 原理 • 增加冗余线路,使合法码字带有某种特征。 • 检查码字,是否保持这种特征。 • 如果还能指出是哪一位出错,则可纠错。 • 方法 • 奇偶校验码、海明校验码、循环冗余码
海明码数据位与校验位关系 例: 数据位有8位,校验位有5位,才能发现并改正一位错,并发现两位错。 共13位编码,校验位为其中第1、2、4、8和13位。其余为数据位。P5D8D7D6D5P4D4D3D2P3D1P2P1。他们的校验关系为(偶校验): P1=D1 D2D4 D5 D7 S1= P1 D1 D2D4 D5 D7 P2= D1 D3D4 D6 D7 S2= P2D1 D3D4 D6 D7 P3= D2D3 D4 D8 S3= P3D2D3 D4 D8 P4= D5D6 D7 D8 S4=P4 D5D6 D7 D8 P5= D1 D2D3 D4 D5 D6 D7 D8 P1 P2 P3 P4 S5= P5D1 D2D3 D4 D5 D6 D7 D8 P1 P2 P3 P4
实现运算的逻辑电路 输出 Fs OVR Z C F 1 ALU 选 通 门 选 通 门 Y 送入 通用寄存器组 乘商寄存器 选 通 门 选 通 门 1. 运算部件ALU 2.通用寄存器组 3. 支持移位的选通门 4. 与其它部件的关系
输出Y 二选一 /OE F F3 F=0000 OVR Cn+4 A L U S R Cn 三选一 二选一 输入D B锁存器 A锁存器 乘商寄存器Q A口地址 Q3 Q0 B 16个 A 通用寄存器 三选一 B口地址 三选一 RAM3 RAM0 4 位的 Am2901 内部组成与功能 组成 算逻运算 部件 1 6 个 累加器 乘商寄存器 Q 5组多路选择门 功能 8 种 运算功能 8 种 数据组合 8 种 结果处理
测 试 1.已知:X=0.1011 y= -0.0101,用双符号位求[X+Y]补和[X-Y]补,并判断结果是否溢出。 2.设十进制数X=(-123.25)×2-10 (1)若(Y)2=(X)10,用定点数表示Y值。 (2)设用21个二进制位表示浮点数,阶码用5位(含阶符1位),尾数用16位(含数符1位),阶码的基数为2。写出阶码和尾数均用原码表示Y的机器数。 (3)写出阶码和尾数分别用移码和补码表示Y的机器数。
测 试 3.设x=0.1101,y=-0.1001,分别用原码和补码一位乘法求x×y。 4.已知:X=+0101101,Y=-1001101 (1)写出 [X]补、[Y]补、[X]移、[Y]移 (2)用双符号位求:[X+Y]移和[X-Y]移,并判断是否溢出。