• 1. 第三章 运算方法和运算部件1
  • 2. 主要内容3.1 数据的表示方法和转换3.2 带符号数据的表示方法与 加减运算3.3 二进制乘法运算3.5 浮点数的运算方法3.6 运算部件3.7 计算机中的数据校验方法3.4 定点除法运算2
  • 3. 3.1 数制3.1.1 数值型数据的表示和转换3.1.2 十进制数的编码与运算3
  • 4. 1、进位计数制 基数(base或radix):所用到的数字符号个数。 例如10进制 :0-9 十个数码,基数为10 权:进位制中各位“1”所表示的值为该位的权. 常见的进位制: 2,8,10,16进制。 二进制:Binary 八进制: Octal 十进制:Decimal 十六进制:Hexadecimal3.1.1 数值型数据的表示和转换4
  • 5. 2、进位计数制之间的转换按权展开法:先写成多项式,然后计算十进制结果. N= dn-1 dn-2• • • • • •d1d0d-1d-2 • • • • • •d-m =dn-1 ×Rn-1 + dn-2 ×Rn-2 + • • • • • •d1 ×R1 + d0 ×R0 + d-1×R-1 + d-2 ×R-2 + • • • • • •d-m ×R-m1) R进制转换成十进制的方法5
  • 6. 例如:写出(1101.01)2,(237)8,(10D)16的十进制数(1101.01)2=1×23+1×22+0×21+1×20+ 0×2-1+1×2-2 =8+4+1+0.25=13.25 (237)8=2×82+3×21+7×20 =128+24+7=159 (10D)16=1×162+13×160=256+13=269 6
  • 7. 2)十进制转换成二进制方法一般分为两个步骤: 整数部分的转换 除2取余法(基数除法) 小数部分的转换 乘2取整法(基数乘法)7
  • 8. 例如:将(327)10转换成二进制数2 327 余数2 163 1 2 81 1 2 40 1 2 20 0 2 10 0 2 5 0 2 2 1 2 1 0 2 0 1 (327)10 =(101000111) 2最高位最低位8
  • 9. 乘基取整法(小数部分的转换) 例如:将(0.8125) 10 转换成二进制小数. 整数部分 2 ×0.8125=1.625 1 2 ×0.625=1.25 1 2 × 0.25=0.5 0 2 ×0.5=1.0 1 (0.8125) 10 =(0.1101) 29
  • 10. 例:将(0.2) 10 转换成二进制小数0.2 × 2 = 0.4 0 0.4 × 2 = 0.8 0 0.8 × 2 = 1.6 1 0.6 × 2 = 1.2 1 0.2 × 2 = 0.4 0 0.4 × 2 = 0.8 0 0.8 × 2 = 1.6 1 0.6 × 2 = 1.2 1 (0.2) 10 = [ 0.001100110011….] 2 整数部分10
  • 11. 3)其它进制之间的直接转换法二<—>八 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 71000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 二 <—>十六0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 11
  • 12. 二进制转换成八进制例:(10110111 .01101) 2(10110111.01101) 2 =(267.32)8八进制: 2 6 7 . 3 2二进制: 010 ,110 , 111 . 011 , 010二进制: 10 ,110 , 111 . 011 , 0112
  • 13. 八进制转换二进制例如: (123.46 ) 8 =(001,010,011 .100,110 ) 2 =(1010011.10011)213
  • 14. 二进制转换成十六进制例:(110110111 .01101) 2(10110111.01101) 2 =(1B7.68)16十六进制: 1 B 7 . 6 8二进制: 0001 ,1011 , 0111 . 0110 ,1000二进制: 1 ,1011 , 0111 . 0110 ,114
  • 15. 十六进制转换成二进制例如: (7AC.DE ) 16 =(0111,1010,1100.1101,1110 ) 2 =(11110101100 .1101111 )2 15
  • 16. 3、数值符号的表示 带符号数的编码 名词解释:真值和机器数 真值:正、负号加某进制数绝对值的形式。 如二进制真值: X=+1011 y=-1011 机器数:符号数码化的数称为机器数 如 :X=01011 Y=1101116
  • 17. 3.1.2 十进制数的编码与运算1、BCD码 8421码为有权代码,数值为 N=8d3+4d2+2d1+1d0 十进制数63.29的BCD码为: 0110 0011 . 0010 1001 2421码为有权代码,数值为 N=2d3+4d2+2d1+1d0 十进制数63.29的BCD码为:1100 0011 . 0010 1111 余3码为无权代码,对应8421码加3而得。 除上述三种BCD码之外,还有5421码、格雷码等17
  • 18. BCD码8421码2421码余3码格雷码 0000000000011000010001000101000001200100010010100113001100110110001040100010001110110501011011100001116011011001001010170111110110100100810001110101111009100111111100110118
  • 19. 二进制码 <<--->> 格雷码二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变; 格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变). 19
  • 20. 十进制编码的加法运算 1) “8421”BCD码加法运算 BCD码运算应将每4位二进制数分为一组,组与组之间直接运算,逢十进一。但计算机中无法区分BCD码,一概作为二进制数处理,因此,计算机做此运算后须进行调整。 调整方法: 和≤9 (1001)2, 不调整 和>9 (1001)2 , 加6 (0110)2修正20
  • 21. 0 1 1 1 + 1 0 0 0 1 1 1 1 + 0 1 1 0 1 0 1 0 1 1 0 0 0 + 1 0 0 1 1 0 0 0 1 + 0 1 1 0 1 0 1 1 1例:5+3=87+8=158+9=17 0 1 0 1 + 0 0 1 1 1 0 0 0向高位进位21
  • 22. 2、 数字串在机内的表示与存储 主要有两种形式: (l) 字符形式:用一个字节存放一个十进制数位或符号位,存放的是0~9十个数字和正负号的ASCll编码值。 例如,+123的编码为2B 31 32 33 ,占用 4个连续的字节。 这种方式高4位不具有数值意义,运算起来很不方便,主要用在非数值计算的应用领域。22
  • 23. (2)压缩的十进制数形式。用一个字节存放两个十进制数位,其值用BCD码或ASCll码的低4位表示。符号位也占半个字节并放在最低数字位之后,其值可从4位二进制码中的6种冗余状态中选用。 例,用C(l2)表示正号;D(13)表示负号。并规定数字和符号位个数之和必须为偶数,否则在最高数字之前补一个0。 例如,+123被表示成12 3C(2个字节),一12被表示成01 2D(2个字节)。23
  • 24. 3.2 带符号数据的表示方法与加减运算 机器数:计算机中表示的带符号的二进制数. 四种表示方法即原码、补码、反码和移码。3.2.1 原码、补码、反码和移码 及运算3.2.2 定点数和浮点数计算机中的两种表示方式3.2.3 数字化信息的编码及表示24
  • 25. 3.2.1 原码、补码、反码和移码及运算 1、 原码表示法 原码表示法用“0”表正号,用“1” 表负号,有 效值部分用二进制的绝对值表示。 课件以下的n表示数值位数(机器字长为n+1位)小数: X 1>X≥0 [X]原 = 1-X=1+|X| 0≥X>-125
  • 26. 原码的表示范围: [+0]原 =00000000 ; [-0]原 =10000000 整数最大值 : 2n-1;最小值:-(2n-1) 小数最大值:1-2-n;最小值-(1-2-n) 表示数的个数: 2n+1 - 1 若二进制的位数是8,求其表示的最大值、最小值及表示数的个数整数 127,-127; 小数 127/128,-127/128; 个数:25526
  • 27. 原码特点:表示简单,易于同真值之间进行转换, 实现乘除运算规则简单。 进行加减运算十分麻烦。 27
  • 28. 2、补码表示法模:计量器具的容量,或称为模数。 例如:4位字长的机器表示的二进制16种状态,模为16= 24 。 整数N位字长的模值为 2n, 一位符号位的纯小数的模值为2。 补码的定义:正数的补码就是正数的本身,负数的补码是原负数加上模。28
  • 29. 补码的表示范围:N+1位纯整数: 2n -1 , -2n N+1位纯小数: 1- 2-n , - 1 均能表示 2n+1 个数小数: X 1>X≥0 [X]补 = 2+X=2-|X| 0≥X ≥ -129
  • 30. 原码求补码 正数: [X]补=[X]原 负数: 符号除外,各位取反,末位加1 例:X= -01001001 [X]原=11001001 [X]补=10110110+1=10110111 [X]补= 28 +X=100000000-1001001=10110111 100000000 - 1001001 10110111原码与补码之间的转换30
  • 31. 由[X]补求[-X]补(求机器负数) 运算过程是连同 符号一起将各位取 反,末位再加1。设字长N=8位 例:X= +100 1001 [X]补 = 0100 1001 [-X] 补=1 011 01 1 131
  • 32. 最大的优点就是将减法运算转换成加法运算。[X]补-[Y]补= [X]补+[-Y]补 例如 X=(11)10=(1011)2 Y=(5)10=(0101)2 已知字长n=5位 [X]补-[Y]补 =[X]补+[-Y]补 =01011+11011=100110=00110=(6)10 注: 最高1位已经超过字长故应丢掉32
  • 33. 3、 反码表示法 正数的表示与原、补码相同,负数的补码符号位为1,数值位是将原码的数值按位取反,就得到该数的反码表示。小数: X 1>X≥0 [X]反 = 2-2-n+X 0≥X>-133
  • 34. 整数的表示形式 X 0≤ X<2n [X]原 = 2n-X=2n+|X| -2n < X ≤ 0 X 0≤ X<2n [X]补 = 2n+1+X=2n+1-|X| -2n≤ X< 0 X 0≤ X<2n [X]反 = 2n+1-1+X -2n < X ≤ 034
  • 35. 4、 移码表示法[X]移= 2n + X -2n ≤ X < 2n X1 = +101 0101 [X1]补= 0101 0101 [X1]移= 1101 0101 X2 = -0101 0101 [X2]补=1010 1011 [X2]移=0010 1011 35
  • 36. 码制表示法小结[X]原、[X]反 、[X] 补用“0”表示正号,用“1”表示负号; [X]移用“1”表示正号,用“0”表示负号。 如果X为正数,则[X]原=[X]反 =[X] 补。 如果X为0,则 [X] 补 、[X]移有唯一 编码, [X]原、[X]反 有两种编码。 移码与补码的数值形式相同,只是符号位相反。 36
  • 37. 6、 数值的运算方法 计算机中,常用补码进行加减运算 补码可将减法变加法进行运算 补码运算特点:符号位和数值位一同运算 定点补码运算在加法运算时的基本规则: [X+Y]补= [X]补+[Y]补 定点补码运算在减法运算时的基本规则: [X-Y]补=[X]补+[-Y]补37
  • 38. 例如:已知机器字长n=8,X=44,Y=53, 求X+Y=? 解:[X]原=00101100,[Y]原=00110101[X]补=00101100,[Y]补=00110101 [X]补= 0 0 1 0 1 1 0 0 + [Y]补= 0 0 1 1 0 1 0 110000110 X+Y= + 9738
  • 39. 例:已知机器字长n=8,X=-44, Y=-53, 求X+Y=?解:[44]补=00101100, [53]补=00110101 [X]补=[-44]补=11010011+1=11010100, [Y]补=[-53]补=11001010+1=11001011, [X]补 = 1 1 0 1 0 1 0 0 + [Y]补 = 1 1 0 0 1 0 1 1 [X+Y]补= 1 1 0 0 1 1 1 1 1 超出8位,舍弃模值 X+Y=-01100001,X+Y=( -97)39
  • 40. 例:已知机器字长n=8,X=44,Y=53, 求X-Y=?解:[X]补=00101100,[Y]补=00110101, [-Y]补=11001011 [X]补= 0 0 1 0 1 1 0 0 + [-Y]补= 1 1 0 0 1 0 1 1 11 1 1 0 1 1 1 [X-Y]补=11110111,X-Y=-0001001=(-9)40
  • 41. 例:已知机器字长n=8,X=-44,Y=-53, 求X-Y=?解:[X]补=11010100,[Y]补=11001011, [-Y]补=00110101 [X]补 = 1 1 0 1 0 1 0 0 + [-Y]补= 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 1 超出8位(模值),舍弃 [X-Y]补=00001001,X-Y=+0001001 =(+9)41
  • 42. 溢出问题 例:已知机器字长n=8,X= 120,Y=10, 求X+Y=?42
  • 43. 解:[X]补=01111000,[Y]补=00001010, [X]补= 0 1 1 1 1 0 0 0 + [Y]补= 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 [X+Y]补=10000010,[X+Y]原=11111110 X+Y的真值= -1111110=( -126)10 运算结果超出机器数值范围发生溢出错误。43
  • 44. 溢出判断规则与判断方法两个相同符号数相加,其运算结果符号与被加数相同,若相反则产生溢出; 两个相异符号数相加,不会产生溢出。 溢出判断方法: 1.双符号法,2.进位判断法。44
  • 45. (1)双符号位溢出判断法 Sf1⊕Sf2 (也被称为变形补码)双符号含义: 00表示运算结果为正数; 01表示运算结果正向溢出; 10表示运算结果负向溢出; 11表示运算结果为负数。 亦即:OVR = Sf1⊕ Sf2 = 1 有溢出 OVR = Sf1⊕ Sf2 = 0 无溢出 第一位符号位为运算结果的真正符号位。45
  • 46. 例:X=0.1001,Y=0.0101,求[X+Y]解: [X]补= 00.1 0 0 1 +[Y]补= 00.0 1 0 1 [X+Y]补= 00.1 1 1 0 两个符号位相同,运算结果无溢出 X+Y=+0.1110 46
  • 47. 例:X= - 0.1001,Y= - 0.0101,求 [X+Y]=?解: [X]补= 11.0110+1 = 1 1. 0 1 1 1 + [Y]补= 11.1010+1 = 1 1. 1 0 1 1 [X+Y]补= 1 1 1. 0 0 1 0 最高位1丢掉 两个符号位相同,运算结果无溢出 X+Y= - 0.1110 47
  • 48. 例:X= 0.1011,Y= 0.0111,求 [X+Y]=?解: [X]补= 00.1 0 1 1 + [Y]补= 00.0 1 1 1 [X+Y]补= 01.0 0 1 0 两个符号位为01,运算结果正向溢出48
  • 49. 例:X= - 0.1011,Y= 0.0111,求 [X-Y]=?解: [X]补= 11.0100+1=11.0101 [Y]补=00.0111 [-Y]补=11.1001 [X]补 = 1 1. 0 1 0 1 + [-Y]补 = 1 1. 1 0 0 1 [X+Y]补 = 1 1 0. 1 1 1 0 两个符号位10不同,运算结果负向溢出49
  • 50.  (2)进位溢出判断法 S⊕C 两单符号位的补码进行加减运算时,若最高数值位向符号位的进位值C与符号位产生的进位输出值S相同时则无溢出,否则溢出。 例: [X]补= 1. 1 0 1 + [Y]补= 1. 0 0 1 [X+Y]补=1 0. 1 1 0 C=0,S=1,有溢出 X+Y=+0.010 [X]补= 1. 1 1 0 + [Y]补= 0. 1 0 0 [X+Y]补= 1 0. 0 1 0 C=1,S=1,无溢出 50
  • 51. 3.2.2 定点数和浮点数数值范围:一种数据类型所能表示的最大值和最小值 数据精度:实数所能表示的有效数字位数。 数值范围和数据精度均与使用多少位二进制位数以及编码方式有关。 计算机用数字表示正负,隐含规定小数点。 采用“定点”、“浮点”两种表示形式。51
  • 52. 1、数的定点表示方法 定点整数——小数点位置固定在数的最低位之后 如: Dn Dn-1 • • • • • • D1 D0 . 定点小数——小数点位置固定在数的符号位之后、数值最高位之前。 如:D0. D1 • • • • • • D-(n-1) D-n Sf S1S2 Sn…数符数值部分小数点位置Sf S1S2 Sn…数符数值部分小数点位置或52
  • 53. (1)浮点数的表示:是把字长分成阶码和尾数两部分。其根据就是:N=M ·RE ① J Em-2…….E0 S D-1……D-(n-1) 阶符 阶码值 数符 . 尾数值 ② S J Em-2 …….E0 D-1……D-(n-1) 数符 阶符 阶码值 . 尾数值 通常,阶码为补码或移码定点整数,尾数为补码或原码定点小数。 2、数的浮点表示方法53
  • 54. (2)浮点数的规格化目的:字长固定的情况下提高表示的精度 方法:调整阶码使尾数满足下列关系: 尾数用原码表示时,无论正负应满足1/2≦d<1 即:小数点后的第一位数一定要为1。 正数的尾数应为0.1x….x 负数的尾数应为1.1x….x 尾数用补码表示时,小数最高位与符号位相反。 正数应满足 1/2≦d<1,即 0.1x….x 负数应满足 -1/2 > d≥ -1,即 1.0x….x 54
  • 55. 例题:某机器用32位表示一个实数,阶码8位(含1位阶符),用定点整数补码表示;尾数24位(含数符1位),用规格化定点小数补码表示,基数为2。则:1)X=256.5 的第一种浮点表示格式 X=(256. 5)10 =+(100000000.1)2 =+(0.1000000001× 2+9 )2 8位阶码为:[+9]补=0000 1001 24位尾数为:[+0.10 0000 0001]补 =0.100 0000 0010 0000 0000 0000 所求256.5的浮点表示格式为: 0000 1001 0100 0000 0010 0000 0000 0000 用16进制表示此结果则为:(09402000)1655
  • 56. Y=-(256. 5)10 =-(100000000.1)2 =-0.1000000001 ×2+9 8位阶码为:[+9]补=0000 1001 24位尾数为:[-0.10 0000 0001]补 =1.011 1111 1110 0000 0000 0000 所求-256.5的浮点表示格式为: 0000 1001 1011 1111 1110 0000 0000 0000 用16进制表示此结果则为:09BFE000H2)求Y= -256.5 的第一种浮点表示格式56
  • 57. 3.3 二进制乘法运算1. 软件编程方法实现(时序控制乘法器) 由手算到机器实现,要解决三个问题:符号问题、部分积相加进位问题、移位问题。 原码乘法是先取绝对值相乘,再根据同号相乘为正、异号相乘为负,单独决定符号位。补码乘法则让 符号位直接参加运算,算法将会复杂一些。 2. 硬件快速乘法器实现 利用中大规模集成电路芯片,在一拍节中实现多 项部分积的相加,成为阵列乘法器。 57
  • 58. 乘法运算1. 分析笔算乘法A = – 0.1101 B = 0.1011A×B = – 0.100011110 . 1 1 0 10 . 1 0 1 11 1 0 11 1 0 10 0 0 01 1 0 10 . 1 0 0 0 1 1 1 1符号位单独处理乘数的某一位决定是否加被乘数 4个位积一起相加乘积的位数扩大一倍×乘积的符号心算求得?58
  • 59. 3.3.1 定点数一位乘法1、 定点原码一位乘2、定点补码一位乘法59
  • 60. 例:设X=0.1101,Y=0.1011,求X×Y。 其中寄存器B=X ,计数器Cd=4。 计算过程如下:0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 1 1 1 +x 右移一位→ +x 右移一位→ +0 右移一位→ +x 右移一位→部分积 A 乘数 C 乘积高位 乘积低位1(丢失) 1(丢失) 0(丢失) 1(丢失)X•Y=0.1000111160
  • 61. 例已知 x = – 0.1110 y = 0.1101 求[x • y]原解:数值部分的运算0 . 0 0 0 00 . 1 1 1 00 . 1 1 1 00 . 0 0 0 00 . 1 1 1 00 . 1 1 1 0部分积 初态 z0 = 0 部 分 积 乘 数 说 明0 . 0 1 1 101 . 0 0 0 11 01 . 0 1 1 01 1 00 . 1 0 1 10 1 1 01,得 z4逻辑右移逻辑右移1 1 0 1=0 . 0 1 1 11,得 z10 1 1 0=0 . 0 0 1 11,得 z21 0 1 1=0 . 1 0 0 01,得 z31 1 0 1=61
  • 62. ② 数值部分按绝对值相乘① 乘积的符号位 x0 y0 = 1 0 = 1x*• y* = 0. 1 0 1 1 0 1 1 0则 [x • y]原 = 1. 1 0 1 1 0 1 1 0特点绝对值运算逻辑移位结果用移位的次数判断乘法是否结束62
  • 63. 2、定点补码一位乘法 原码乘法存在的缺点是符号位需要单独 运算,并要在最后给乘积冠以正确的符号。 补码乘法是指采用操作数的补码进行乘 法运算,最后乘积仍为补码,能自然得到乘 积的正确符号。63
  • 64. 实现补码乘法有两种方法,现在广泛使用的是Booth算法,也称为比较法。这种方法在机器实现中要在乘数末位(最低位后)Yi之后再增加一个附加位Yi+1,并令其初始值为0。然后根据比较Yi、 Yi+1的值决定下一步操作,规则如下:(设置部分积初始值为0) Yi Yi+1 操 作 0 0 原部分积右移一位 0 1 原部分积加X补后再右移一位 1 0 原部分积加[-X补]后再右移一位 1 1 原部分积右移一位64
  • 65. 初始值与符号位:A寄存器存放部分累加和,初始为0,采用双符号位。第1符号位指示累加和的正负,以控制右移时补0或补1。B中存放被乘数的补码,双符号位。 基本操作:用C寄存器最末两位作判断位,决定下一步的操作。 移位:在右移时,第2符号位值移入位数的最高位,第1符号位值不变且移入第2符号位,而A寄存器末位移入C寄存器。 步数与最后一步操作:乘数有效位是n=4位,共作n+1=5步。注意,最后一步不移位因为这一步是用来处理符号位的。 65
  • 66. 例3.35:设X=-0.1101,Y=0.1011,即[X]补=11.0011,[Y]补=0.1011 ,[-X]=00.1101 求[X•Y]补. 计算过程如下:0 0 0 0 0 0 0. 1 0 1 1 0 初始值,最后一位补0 0 0 1 1 0 1 Y4Y5=10 +[-X]补 0 0 1 1 0 1 0 0 0 1 1 0 1 0 1 0 1 1 右移一位 0 0 0 0 0 0 Y3Y4=11 +0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 右移一位 1 1 0 0 1 1 Y2Y3=01 +[X]补 1 1 0 1 1 0 1 1 1 0 1 1 0 0 1 0 1 0 右移一位 0 0 1 1 0 1 Y1Y2=10 +[-X]补 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 右移一位 1 1 0 0 1 1 Y0Y1=01 +[X]补 1 1 0 1 1 1 0 0 0 1+ → + → + → + → + 部分积 乘数Y Yi Yi+1 说明乘积高位 乘积低位[X•Y]补=1.01110001, X•Y=-0.1000111166
  • 67. 3、阵列乘法器 为了进一步提高乘法器运算速度,可采 用类似人工计算的方法,用一个阵列乘法器 完成X*Y乘法运算。阵列的每一行送入乘数 Y的每一位数,而各行错开形成的每一斜列 则送入被乘数的每一数位。每一个基本单元 可用1个与门和1位全加器。该方案所用加法 器数量较多,内部结构规则性强,适用超大 规模集成电路实现。 67
  • 68. 定点补码一位除法(加减交替法) n位数相除,要求被除数的位数要扩展成除数位数n的两倍2n位,没包括符号位在内; 由于不能自动判溢出,故需在|X|<|Y|即不溢出的前提下。 规则表:X补、Y补、r补分别为被除数、除数和余数 X补Y补 数 符最终商符第一步 操作r补 Y补 数 符 上商下一步操作同号 0 X-Y 同号 异号 1 02[ri]补-Y补 2[ri]补+Y补异号 1 X+Y 同号 异号 1 02[ri]补-Y补 2[ri]补+Y补68
  • 69. (1)第一步如果被除数X与除数Y同号,用X-Y;若两数是异号,用X+Y。 (2)求商:如果所得余数r与除数Y同号则商上1,同时将余数左移一位后减去除数,即2r-Y;若余数与除数异号,则商上0,进行2r+Y操作。 (3)第二步如此重复执行n-l 次(设如数值部分有n位)。例如n=4位有效数值,连同第一步需做5次运算,4次移位操作。 (4)当两数能除尽时,如 Y为正数,商不必加2-n;如Y为负,商需加2-n(商由反码变成补码)。当两数除不尽时若商为负,要在商的最低一位加 1,使商从反码值转变成补码值;若商为正最低位不需要加1。 (5)如最后余数与X异号,若则需要纠正余数时: X、Y同号,用+Y纠余;X、Y异号,用-Y纠余。 例3.41:设X=0.0100 , Y=-0.1000, 求[X/Y]补=? 解: [X]补=00.0100,[Y]补=11.1000,[-Y]补=00.100069
  • 70. 被除数X (余数r) 商 C 操作说明 0 0 0 1 0 0 0 0 0 0 0 +[Y]补 1 1. 1 0 0 0 X,Y异号, 1 1. 1 1 0 0 0 0 0 0 1 r与Y同号,末位上商C=1 左移 1 1. 1 0 0 0 0 0 0 1 0 低位补0 +[-Y]补 0 0. 1 0 0 0 因为C=1 0 0. 0 0 0 0 0 0 0 1 0 r与Y异号,末位上商C=0 左移 0 0. 0 0 0 0 0 0 1 0 0 +[Y]补 1 1. 1 0 0 0 因为C=0 1 1. 1 0 0 0 0 0 1 0 1 r与Y同号,末位上商C=1 左移 1 1. 0 0 0 0 0 1 0 1 0 +[-Y]补 0 0. 1 0 0 0 因为C=1 1 1. 1 0 0 0 0 1 0 1 1 r与Y同号,末位上商C=1 左移 1 1. 0 0 0 0 1 0 1 1 0 +[-Y]补 0 0. 1 0 0 0 因为C=1 1 1. 1 0 0 0 1 0 1 1 1 r与Y同号,末位上商C=1 +[-Y]补 0 0. 1 0 0 0 因为r与X异号,故需纠余。另外 0 0. 0 0 0 0 X与Y异号,所以+[-Y]补 由于商值符号是1,故需在其末位加1,有反码变成补码 这样[X/Y]补=1.0111+0.0001=1.1000 余数为0,表示除尽。70
  • 71. 在计算机中,A寄存器开始时存放被除数X(补码),以后就存放余数r ,取双符号位。B寄存器存放除数Y(补码),双符号位。C寄存器存放商,初始值为0(未考虑商符之前),单符号位。 注意:书中例题3.40的第一步注释错误,应改为两数异号加[Y]补。71
  • 72. 例3.42 [X]补=1.0111, [Y]补=1.0011, 则[-Y]补 =0.1101。求[X/Y]补=? 被除数(余数) 商 操作说明 11.0111 + 00.1101 两数同号,+[-Y]补 00.0100 0 余数与除数异号,商0 左移 00.1000 + 11.0011 +[Y]补 11.1011 01 同号,商1 左移 11.0110 + 00.1101 +[-Y]补 00.0011 010 异号,商0 左移 00.0110 + 11.0011 +[Y]补 11.1001 0101 同号,商1 左移 11.0010 + 00.1101 +[-Y]补 11.1111 01011 同号,商1 注:1、商值为正,商不必末位加1。 2、余数与X同号,不必进行纠余 [X/Y]补=0.1011 [余数]补=1.1111x 2-4 72
  • 73. 3.5 浮点数的运算方法 浮点数的表示形式(以2为底): N = ±D ·2±E 其中,D为浮点数的尾数,一般为绝对值小于1的规格化二进制小数用原码或补码形式表示;E为浮点数的阶码,一般是用移码或补码表示的整数。 阶码的底除了2以外,还有用8或16表示的。 73
  • 74. 1 、加、减法运算 两数首先均为规格化数,在进行规格化浮点数的加减运算需经过五步完成: 对阶操作:低阶向高阶补齐,使阶码相等; 尾数运算:阶码对齐后直接对尾数运算; 规格化:对运算结果进行规格化处理; (使补码尾数的最高位和尾数符号相反)如溢出则需右规;如不是规格化时应左规。 舍入操作:丢失位进行0舍1入或恒置1处理; 判断溢出:判断阶码是否溢出,下溢则将运 算结果置0,上溢则中断。74
  • 75. 具体说明如下: 对阶运算(小阶向大阶对齐) 尾数为原码时,尾数右移,符号位不动,最高位补0 尾数为补码时,尾数右移,符号也移位,最高位补符号位 (1) 求阶差(2) 对阶原则Δj = jx – jy = jx= jy 已对齐jx> jy jx< jy y 向 x 看齐x 向 y 看齐小阶向大阶看齐Sy 1, Sx 1, = 0> 0< 0jy+1 jx+175
  • 76. 例如: 求 =? 小阶对大阶 舍掉的是 如大阶对小阶 则舍掉的是76
  • 77. 例如x = 0.1101 × 201 y = (–0.1010) × 211求 x + y解:[x]补 = 00, 01; 00.1101 [y]补 = 00, 11; 11.0110 1. 对阶(设阶码的符号也为双符号位)[Δj]补 = [jx]补 – [jy]补= 00, 0111, 0111, 10阶差为负( – 2)[Sx]补' = 00.0011 [Sy]补= 11.011011.1001∴ Sx 2 jx+ 2∴ [x+y]补 = 00, 11; 11. 1001② 对阶[x]补' = 00, 11; 00.0011++对阶后的[Sx]补' ① 求阶差2. 尾数求和77
  • 78. 规格化:原码尾数值高位为1,补码尾数值高位与符号 相反 (1) 规格化数的定义(2) 规格化数的判断r = 2 ≤ |S| <1 12S>0正数真值原码补码反码规格化形式S< 0负数规格化形式真值原码补码反码0.1×× ×…0.1×× ×…0.1×× ×…0.1×× ×…原码 不论正数、负数,第一数位为1补码 符号位和最高数值位不同– 0.1×× × …1.1×× ×…1.0×× ×…1.0×× ×…78
  • 79. 特例S = – = – 0.100 0 12 …12∴ [– ]补 不是规格化的数S = – 1∴ [–1]补 是规格化的数[S]原 = 1 . 1 0 0 0…[S]补 = 1 . 1 0 0 0…[S]补 = 1 . 0 0 0 0… 79
  • 80. (3) 左规(4) 右规尾数 1,阶码减 1,直到数符和第一数位不同为止 上例 [x+y]补 = 00, 11; 11. 1001左规后 [x+y]补 = 00, 10; 11. 0010∴ x + y = (– 0.1110)×210 当 尾数溢出( >1)时,需 右规即尾数出现 01. ×× ×或 10. ×× ×时……尾数 1,阶码加 180
  • 81. 例x = 0.1101× 210 y = 0.1011× 201求 x +y(除阶符、数符外,阶码取 3 位,尾数取 6 位) 解:[x]补 = 00, 010; 00. 110100[y]补 = 00, 001; 00. 101100① 对阶② 尾数求和[Δj]补 = [jx]补 – [jy]补 = 00, 010 11, 111100, 001阶差为 +1∴ Sy 1, jy+1∴ [y]补' = 00, 010; 00. 010110[Sx]补 = 00. 110100[Sy]补' = 00. 010110对阶后的[Sy]补'01. 001010++尾数溢出需右规81
  • 82. ③ 右规[x +y]补 = 00, 010; 01. 001010[x +y]补 = 00, 011; 00. 100101右规后∴ x +y = 0. 100101 × 211 舍入操作:0舍1入 或 恒置1在 对阶 和 右规 过程中,可能出现 尾数末位丢失 引起误差,需考虑舍入(1) 0 舍 1 入法 (2) 恒置 “1” 法82
  • 83. 例x = (– —)×2-5 y = (—) ×2-4 5878求 x – y(除阶符、数符外,阶码取 3 位,尾数取 6 位)解:[x]补 = 11, 011; 11. 011000[y]补 = 11, 100; 00. 111000① 对阶[Δj]补 = [jx]补 – [jy]补 = 11, 011 00, 100 11, 111阶差为 –1∴ Sx 1, jx+ 1∴ [x]补‘ = 11, 100; 11. 101100 (尾数补码右移最高数值位补1。)x = (– 0.101000)×2-101y = ( 0.111000)×2-100+83
  • 84. ② 尾数求和[Sx]补´ = 11. 101100[–Sy]补 = 11. 001000+110. 110100③ 右规[x+y]补 = 11, 100; 10. 110100[x+y]补 = 11, 101; 11. 011010(采用0舍1入方式,无进位。将其转换二进制真值后为:右规后∴ x – y = (–0.100110)×2-11= (– —)×2-3193284
  • 85. 例:求 =? 0舍1入后为 恒置1 例2:求 =? 0舍1入后为 恒置1 判断结果的正确性(即结果的阶码是否溢出)85
  • 86. 2、浮点数的乘、除法运算 一、运算规则 两浮点数相乘其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。 两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除以除数的尾数所得的商。 参加运算的两个数都为规格化浮点数,乘除运算都可能出现结果不满足规格化要求的问题,因此也必须进行规格化、舍入和判溢出等操作。规格化时要修改阶码。86
  • 87. 浮点乘除运算x = Sx · 2jxy = Sy · 2jy1. 乘法x · y = (Sx · Sy)×2jx+jy2. 除法xy=SxSy× 2jx – jy(1) 阶码采用 补码(或移码)定点加减运算(2) 尾数乘除同 定点 运算3. 步骤(3) 规格化(4)舍入87
  • 88. 例题3.47: 设:X=0.1110011* 2-5,Y= (-0.1110010)* 23 ,浮点数表示阶码4位(移码),尾数8位(补码),结果取8位尾数。运算过程中阶码取双符号位。 解:1.求乘积的阶码 (为两阶码之和) [-5]原=1.101 [-5]补=1.011 [-5]移=0.011 [EX+EY]移= [EX]移+ [EY]补=00011+00011=00110 2.两位数相乘 (运算过程略) [X*Y]补= 1.0011001 1001010 (尾数部分) 高位部分 低位部分 3.规格化处理88
  • 89. 4.舍入 根据0舍1法,尾数乘积低位部分的最高位为1,在乘积高位部分的最低位加1, 因此: [X*Y]补=1.0011010 (尾数部分) 5. 判溢出 阶码未溢出,故结果为正确。 X*Y : 0110 1001 1010 阶码(移码) 尾数(补码) X*Y= (-0.1100110)* 2-2 89
  • 90. 3.6 运算部件1.定点运算部件 定点运算部件由算术逻辑运算部件ALU、若干个寄存器、移位电路、计数器、门电路等组成。ALU部件主要完成加减法算术运算及逻辑运算(其功能可参考 2 4 2节),其中还应包含有快速进位电路。 2.浮点运算部件 通常由阶码运算部件和尾数运算部件两部分组成。 阶码运算器是一个定点运算部件。它的功能包含:阶码大小的比较、执行加减法运算、调整其增量或减量。 尾数部分是一个定点小数运算部件。它的功能包含:左移、右移、尾数加减乘除运算。为加速移位过程,有的机器设置了可移动多位的电路。90
  • 91. 浮点运算电路91
  • 92. 3.7 计算机中的数据校验方法 采用冗余校验方法: 即在基本的有效数据外,再扩充部分 位,增加部分(冗余部分)被称为校验位。 将校验位与数据位一起按某种规则编码, 写入存储器或向外发送。当从存储器读出或 接收到外部传入的代码时,再按相应的规则 进行判读。若约定的规则被破坏,则表示出 现错误。根据错误的特征进行修正恢复。92
  • 93. 几个名词概念: 码制:一种已经规定好的组合,如8421编码、余3编码等。 码字:由若干代码组成的一个字。 如8421码中6(0110),7(0111) 码距:一种码制中任意两个码字间的最小距离。 距离:两个码字之间不同的代码个数。 8421码中,最小的码字间的距离为1,如0000和 0001、0010和0011等;最大码字间的距离为4, 如0111和1000。所以8421码制的码距为1。 码距为1码制,即不能查错也不能纠错。 码距越大的码制,查错、纠错能力越强。93
  • 94. 3.7.1 奇偶校验法 奇偶校验法是计算机中广泛采用的检查传输数据准确性的方法。奇偶校验法的原理是: 在每组数据信息上附加一个校验位,校验位的取值(0或1)取决于这组信息中‘1’的个数和校验方式(奇或偶校验)。 如果采用奇校验,则这组数据加上校验码位后数据中‘1’的个数应为奇数个。奇校验位形成公式: C =X0 ⊕X1 ⊕…⊕Xn-1 如果采用偶校验,则这组数据加上校验码位后数据中‘1’的个数应为偶数个。偶校验位形成公式: C =X0 ⊕X1 ⊕…⊕Xn-194
  • 95. 例如:八位信息‘10101011’中共有5个‘1’,附加校验位后变为九位。 若采用奇校验,则附加的校验位应取‘0’值,保证1的个数为奇数个即 0 10101011 ; 若采用偶校验则附加的校验位应取‘1’值即 1 10101011 。 奇偶校验的特点: 1、奇偶校验法使数据的码距为2,因而可检出数据传送过程中奇数个数位出错的情况; 2、实际中两位同时出错的概率极低,奇偶校验法简便可靠易行,但它只能发现错误,却不知错在何处,因而不能自动纠正。95
  • 96. 奇校验 1出错偶校验 1出错偶形成奇形成D校为校验位 D校 D0 D1 D2 D3 D4 D5 D6 D7 8位数据的奇偶校验码形成电路及检码电路96
  • 97. 3.7.2 海明码校验方法海明码校验方法以奇偶校验法为基础,其校验位不是一个而是一组,故其码距大于2 。 海明码校验方法能够检测出具体错误并纠正。 原理是在数据中加入r个校验位,将数据的码距按照一定规则拉长。r个校验位可以表示2r个信息,除一个表示无误信息外,其余2r-1信息可以用来标明错误的具体位置,但由于校验位本身也可能在传送中出错,所以只有2r-1-r个信息可用,即r位校验码只可标明2r-1-r个错误信息。或2r≧k+r+1 k是被传送数据的位数。 例如:用4个校验位能可靠传输24-1-4=11位信息;而要校验32位数据则需至少6个校验位。97
  • 98. 如要能检测与自动校正一位错井发现两位错此时校验位的位数r和数据位的位数k应满足下述关系: 2r-1≧ k+r (3. 19) 按式(3.19),可计算出数据位k与校验位r的对应关系,如教材表3.8所示。98
  • 99. 一、编码方法(以四个校验位进行说明) 四个校验位最多可以校验11位数据。设: D10D9D8D7D6D5D4D3D2D1D0为11个数据位, P4P3P2P1分别为四个校验码,则编码规则是: 海明码的总位数等于数据位与校验位之和; 每个校验位Pi排放在2i-1的位置,例如P4排放 在第24-1=8位,其余数据位依序排列。即: D10D9D8D7D6D5D4P4D3D2D1P3D0P2P1 海明码的每一位用多个校验位一起进行校验, 被校验的位号等于校验它的各校验位位号和; 各校验位的值为它参与校验的数据位的异或。99
  • 100. 海明码校验表 海明码位号参与校验的校验位位号参与的校验位 H1 P1 1P1 H2 P2 2P2 H3 D0 2,1 (3=2+1)P2 P1 H4 P3 4P3 H5 D1 4,1 (5=4+1)P3,P1 H6 D2 4,2 (6=4+2),P3,P2 H7 D34,2,1 (7=4+2+1)P4,P3,P2,P1 H8 P48P4 H9 D48,1 (8=8+1)P4,P1 H10 D58,2 (10=8+2)P4,P2 H11 D68,2,1 (11=8+2+1)P4,P2,P1 H12 D7 8,4 (12=8+4)P4,P3 H13 D8 8,4,1 (13=8+4+1)P4,P3,P1 H14 D9 8,4,2 (14=8+4+2)P4,P3,P2 H15 D10 8,4,2,1 (15=8+4+2+1)P4,P3,P2,P1100
  • 101. 各校验位形成公式: P1=D0⊕D1⊕D3⊕D4⊕D6⊕D8⊕D10 (1) P2=D0⊕D2⊕D3⊕D5⊕D6⊕D9⊕D10 (2) P3=D1⊕D2⊕D3⊕D7⊕D8⊕D9⊕D10 (3) P4=D4⊕D5⊕D6⊕D7⊕D8⊕D9⊕D10 (4) 按上述方式Pi的取值是采用偶校验时的取值,当采用奇校验时,Pi则取反。这样Pi连同数据位一起形成了海明码的各位。 101
  • 102. 二、检查纠错(以四个校验位进行说明) 海明码数据传送到接收方后,再将各校验 位的值与它所参与校验的数据位的异或结果进 行异或运算。 运算结果称为校验和。校验和共 有四个。 对偶校验来说,如果校验和不为零则传输 过程中间有错误。而错误的具体位置则由四个 校验和依序排列后直接指明。如果四个校验和 S4S3S2S1 依序排列后等于(1001)2=(9)10 时,就 表明海明码的第九位也就是D4发生了错误,此 时只要将D4取反,也就纠正了错误。 102
  • 103. 校验和Si的表达式: S1 =D0⊕D1⊕D3⊕D4⊕D6⊕D8⊕D10 ⊕P1 S2 = D0⊕D2⊕D3⊕D5⊕D6⊕D9⊕D10 ⊕P2 S3 =D1⊕D2⊕D3⊕D7⊕D8⊕D9⊕D10 ⊕P3 S4 =D4⊕D5⊕D6⊕D7⊕D8⊕D9⊕D10 ⊕P4 当采用偶校验方式其传送数据正确时,校验和 S1 ~ S4的值分别都为0;当采用奇校验方式其传送数据正确时,校验和 S1 ~ S4的值分别都为1。当不为上述值时,传送就发生了错误。 103
  • 104. 解:已知D10D9D8D7D6D5D4D3D2D1D0=10110100110 由于被校验位的位号等于校验它的各校验位位号 之和以及各校验位的取值等于它参与校验的数据位取 值的异或。所以校验位的取值以及所求海明码为: P1=D0D1  D3  D4  D6  D8  D10=1 P2=D0  D2  D3  D5  D6  D9  D10=1 P3=D1  D2  D3  D7  D8  D9  D10=1 P4=D4  D5  D6  D7  D8  D9  D10=0 D10D9D8D7D6D5D4P4D3D2D1P3D0P2P1=101101000111011 传送正确时校验和的值为0,如果不等于0,则是几就是 第几位出错,是7则是第7位D3出错,此时将其取反即可 纠正错误。例题:采用4位校验位、偶校验方式, 写出10110100110的海明码。104
  • 105. 105
  • 106. 以上 图3.11是H=12,数据位k=8,校验位 r=4的海明校验线路,记作(l2.8)分组码。 图3.ll中的H12,H11,...,H1是被校验码,D8,D7,...,D1是纠正后的数据。在线路中,先用奇偶形成线路得到S4,S3,S2,S1,如果S4~S1为全“0”,说明代码无错,则D8D7...DI=H12H11H10H9H7H6H5H3。如果S4~S1不为全0,说明有错。若为1100或1011,则分别表示H12或Hll位错,对应这两种出错情况,相关的两条译码线之一为“l”,它与相应的数据使经异或线路,就把该位校正过来,得到正确编码输出。依此类推如S4S3S2S1为1010, 1001,0111,0110,0101或0011,分别表示H10,H9,H7,H6,H5或H3位错,用相同的方法予以纠正、如错误发生在校验位上。则相关的译码线(1000,0l00,0010,0001)之一为l,在图3 11中未画出。 如前所述,假如要进一步判别是1位错还是2位错,则再增加一个校验位、并用图 3.12来取代图3.11虚框中的内容,此时增加了一个奇偶形成线路S5。如为一位错,仍按图3.11来纠正数据位;如为两位错,则无法纠正错误。 106
  • 107. C1 C2 …... C K r 1 r 2 …… r i 3.7.3 循环冗余校验方法(CRC码) 环冗余校验方式:通过某种数学公式建立信息位和校验位之间的约定关系——能够校验传送信息的对错,并且能自动修正错误。广泛用于通信和磁介存储器中。 CRC编码格式是在k位信息后加r位检验码。 N N-1 2 1 信息位(k位) 校验位(r位)107
  • 108. 1、CRC码的编码方法 CRC整个编码长度为 n=k+r 位,故CRC码又叫(n,k)码。其编码方法如下: 假设被传送的k位二进制信息位用C(x)表示, 系统选定的生成多项式用G(X)表示,将C(x)左移 G(X)的最高次幂(即等于需要添加的校验位的位数r),写作 C(x) • 2 r 然后将其C(x) • 2 r除以生成多项式G(x),所得商用Q(x)表示,余数用R(x)表示。则: 两边同时乘以G(x)并左移 R(x) 得到:108
  • 109. 故有: 上式中,等式左边即为所求的n位CRC码, 其中余数表达式R(x)就是校验位(r位)。且等 式两边都是G(x)的倍数。 发送信息时将等式左边生成的n位CRC码 送给对方。当接收方接到n位编码后,同样除 以G(x),如果传输正确则余数为0,否则则可 以根据余数的数值确定是哪位数据出错。 由于CRC编码采用的加、减法是按位加 减法,即不考虑进位与借位,运算规则为: 00=0,01=1,10=1,11=0109
  • 110. 例:有一个(7,4)码(即CRC码为7位,信息码为4位),已确定生成多项式为: G(X)=X3+X+1= 1011 被传输的信息C(x)=1001,求C(x)的CRC码。解:C(x)左移 r = n–k = 3 位 即: 将上式模2采用除法 除以给定的 G(x)=1011:1001000/1011=1010+110/1011 得到余数表达式:R(x) =110 所求CRC码110
  • 111. (A)(B)111
  • 112. 2、CRC码的查错表 收到的CRC码除以约定的生成多项式G(x),如果余数为0则传输无误,否则传输错误,根据所得余数值就可找出错误并取反纠正。 上表详细说明了CRC码1001110在传送时某一位出 错后的判断与纠正方法 [C(X) = 1001、 G (x) =1011 ]。112
  • 113. 3、生成多项式G(x)的确定 G(x)是一个约定的除数,用来产生校验码。从检错和纠错的要求出发,它并不是随意选择的,它应满足下列要求: 任何一位发生错误都应使余数不为0 ; 不同位发生错误应使余数不同; 余数继续模2 除,应使余数循环。 在计算机和通信系统中,广泛使用下述两种标准: 国际电报电话咨询委员会CCITT推荐 G(X)=X16+X15+X2+1 美国电气和电子工程师协会IEEE推荐 G(X)=X16+X12+X5+1113
  • 114. 4、CRC的译码与纠错 将收到的循环校验码用约定的生成多项式G(x)去除,如果码字无误则余数应为0,如有某一位出错,则余数不为0,不同位数出错余数不同。 如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。如果对余数补1个0继续除下去,我们将发现一个现象。各次余数将按表3.10顺序循环、例如第七位出错,余数将为001,补0后再除,第二次余数为010,以后依次为100,011,...,反复循环,这是一个有价值的特点。如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检错的校验码字循环左移。114
  • 115. 表 3.10说明当出现余数(101)时,出错位也移到A1位置、对通过异或门将它纠正后在下一次移位时送回A1。继续移满一个循环(对7、4码共移七次),就得到一个纠正后的码字。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件、当位数增多时循环码校验能有效地降低硬件代价。115
  • 116. The End116