计算机组成原理第六章
- 格式:pps
- 大小:2.62 MB
- 文档页数:111
第六章计算机的运算方法6.1 无符号数和有符号数6.2 数的定点表示和浮点表示6.3 定点运算6.4 浮点四则运算6.5 算术逻辑单元6.1 无符号数和有符号数一、无符号数寄存器的位数反映无符号数的表示范围8 位0 ~ 25516 位0 ~ 65535二、有符号数 6.11. 机器数与真值真值机器数带符号的数符号数字化的数+0.101101011小数点的位置–0.101111011小数点的位置+11000 1100小数点的位置–110011100小数点的位置2. 原码表示法带符号的绝对值表示(1) 定义整数x 为真值n 为整数的位数如x = +1110[x ]原= 0 , 1110[x ]原= 24 + 1110 = 1 , 1110x = 1110[x ]原=0,x 2n>x ≥ 02nx0 ≥x >2n用逗号将符号位和数值位隔开6.1小数x 为真值如x = + 0.1101[x ]原= 0 . 1101x = 0.1101[x ]原= 1 ( 0.1101) = 1 . 1101 x 1 >x ≥0[x ]原=1–x0 ≥x >1x = 0.1000000[x ]原= 1 ( 0.1000000) = 1 . 1000000x =+ 0.1000000[x ]原= 0 . 1000000用小数点将符号位和数值位隔开用小数点将符号位和数值位隔开6.1(2) 举例例6.1 已知[x ]原= 1.0011 求x 解:例6.2 已知[x ]原= 1,1100 求x 解:x = 1[x ]原= 1 1.0011 = 0.0011x = 24[x ]原= 10000 1,1100 = 1100––0.00111100由定义得由定义得6.1例6.4 求x = 0 的原码解:设x = +0.0000例6.3 已知[x ]原= 0.1101 求x解:∴x = + 0.1101同理,对于整数[+ 0]原= 0,0000[+0.0000]原= 0.0000x = 0.0000[ 0.0000]原= 1.0000[ 0]原= 1,0000∴[+0]原≠[ 0]原根据定义∵[x ]原= 0.11016.1原码的特点:简单、直观但是用原码做加法时,会出现如下问题:能否只做加法?找到一个与负数等价的正数来代替这个负数就可使减加加法正正加加法正负加法负正加法负负减减加要求数1 数2实际操作结果符号正可正可负可正可负负6.1(1) 补的概念•时钟逆时针-363顺时针+ 9615-1233. 补码表示法可见 3 可用+ 9 代替记作 3 ≡ + 9 (mod 12)同理 4 ≡ + 8 (mod 12)5 ≡ + 7 (mod 12)时钟以12为模减法加法称+ 9 是–3 以12 为模的补数6.1结论一个负数加上“模”即得该负数的补数两个互为补数的数它们绝对值之和即为模数•计数器(模16)–1011 1011 0000+ 0101 1011 100001011 0000 ?可见1011 可用+ 0101 代替记作1011≡ + 0101 (mod 24)同理011≡ + 101 (mod 23)0.1001≡ + 1.0111 (mod 2)自然去掉6.1+0101(mod24)≡1011(2) 正数的补数即为其本身+10000+10000两个互为补数的数+ 0101+ 10101≡分别加上模结果仍互为补数∴+ 0101 ≡ + 0101+ 010124+1–10111,0101用逗号将符号位和数值位隔开丢掉10110 , 1 ,??1011(mod24)可见?+ 01010101010110110101+(mod24+1)6.1100000=(3) 补码定义整数x 为真值n 为整数的位数[x ]补=0,x 2n>x ≥02n +1+ x0 >x ≥2n(mod 2n +1)如x = +1010[x ]补= 27+1+( 1011000 )= 1000000001011000[x ]补= 0,1010x = 10110001,0101000用逗号将符号位和数值位隔开6.1小数x 为真值x = + 0.1110[x ]补=x 1 >x ≥02 +x0 >x ≥1(mod 2)如[x ]补= 0.1110x = 0.11000001.0100000[x ]补= 2+( 0.1100000 )= 10.00000000.1100000用小数点将符号位和数值位隔开6.1(4) 求补码的快捷方式= 100000= 1,011010101 + 1= 1,0110又[x ]原= 1,1010则[x ]补= 24+11010= 11111 + 1 1010= 1111110101010当真值为负时,补码可用原码除符号位外每位取反,末位加1 求得6.1+ 1设x = 1010 时(5) 举例解:x= + 0.0001解:由定义得x= [x]补–2= 1.0001 –10.0000[x]原= 1.1111例6.6 已知[x]补= 1.0001求x [x]补[x]原?由定义得6.1例6.5 已知[x]补= 0.0001求x∴x= 0.1111–= 0.1111–例6.7解:x = [x ]补–24+1= 1,1110 –100000[x ]原= 1,0010当真值为负时,原码可用补码除符号位外每位取反,末位加1 求得[x ]补[x ]原?∴x = 0010= 0010求x已知[x ]补= 1,1110由定义得6.1真值0, 10001101, 01110100.11101.00100.00000.00001.00000,10001101,10001100.11101.11100.00001.0000不能表示练习求下列真值的补码x = + 70x = 0.1110x = 0.0000x = –70x = 0.1110x = 0.0000x = 1.0000[ 1]补= 2 + x = 10.0000 1.0000 = 1.0000[+ 0]补= [ 0]补由小数补码定义[x ]补=x 1 >x ≥02+x0 >x ≥–1(mod 2)= 1000110= –1000110[x ]补[x ]原6.14. 反码表示法(1) 定义整数[x ]反=0,x2n>x ≥ 0( 2n +1–1) + x0 ≥ x >2n(mod 2n +11)如x = +1101[x ]反= 0,1101= 1,0010x = 1101[x ]反= (24+11) 1101= 11111 1101用逗号将符号位和数值位隔开x 为真值n 为整数的位数6.1小数x = +0.1101[x ]反= 0.1101x = 0.1010[x ]反= (2 2-4) 0.1010= 1.1111 0.1010= 1.0101如[x ]反= x1 >x ≥ 0( 2–2-n) +x0 ≥ x >1(mod 2 2-n)用小数点将符号位和数值位隔开x 为真值 6.1(2) 举例例6.10 求0 的反码设x = +0.0000x = –0.0000[+0.0000]反= 0.0000[–0.0000]反= 1.1111∴[+ 0]反≠ [–0]反解:同理,对于整数[+0]反= 0,0000[–0]反= 1,1111例6.9 已知[x ]反= 1,1110 求x由定义得x = [x ]反–(24+1–1)= 1,1110 –11111= –0001例6.8 已知[x ]反= 0,1110 求x 解:由定义得x = + 1110解: 6.1三种机器数的小结对于正数,原码= 补码= 反码对于负数,符号位为1,其数值部分原码除符号位外每位取反末位加1补码原码除符号位外每位取反反码最高位为符号位,书写上用“,”(整数)或“.”(小数)将数值部分和符号位隔开6.1例6.11 000000000000000100000010…011111111000000010000001111111011111111011111111 (128129)-0-1-128-127-127-126二进制代码无符号数对应的真值原码对应的真值补码对应的真值反码对应的真值012127 (253254255)…-125-126-127…-3-2-1…-2-1-0…+0+1+2+127…+0+1+2+127…+0+1+2+127… 6.1设机器数字长为8 位(其中一位为符号位)对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围各为多少?例6.12 解:已知[y ]补求[ y ]补<Ⅰ> [y ]补= 0. y 1y 2y n…y = 0.y 1 y 2y n…y = 0. y 1y 2y n…[ y ]补= 1.y 1y 2y n + 2-n…<Ⅱ> [y ]补= 1. y 1y 2y n…[ y ]原= 1.y 1 y 2y n + 2-n …y = (0. y 1 y 2y n + 2-n )…y = 0. y 1 y 2y n + 2-n……[ y ]补= 0. y 1y 2y n + 2-n 设[y ]补= y 0. y 1y 2y n… 6.1每位取反,即得[ y ]补[y ]补连同符号位在内,末位加1每位取反,即得[ y ]补[y ]补连同符号位在内,末位加15. 移码表示法补码表示很难直接判断其真值大小如十进制x = +21x = –21x = +31x = –31x + 25+10101 + 100000+11111 + 10000010101 + 10000011111 + 100000大大错错大大正确正确0,101011,010110,111111,00001+10101–10101+11111–11111= 110101= 001011= 111111= 000001二进制补码 6.1(1) 移码定义x 为真值,n 为整数的位数移码在数轴上的表示[x ]移码2n +1–12n2n–1–2n00真值如x = 10100[x ]移= 25+ 10100用逗号将符号位和数值位隔开x = –10100[x ]移= 25–10100[x ]移= 2n+ x (2n>x ≥2n)= 1,10100= 0,011006.1(2) 移码和补码的比较设x = +1100100[x ]移= 27+ 1100100[x ]补= 0,1100100设x = –1100100[x ]移= 27–1100100[x ]补= 1,0011100补码与移码只差一个符号位= 1,1100100= 0,001110010016.1- 1 1 1 1 1- 1 1 1 1 0-0 0 0 0 1+ 0 0 0 0 1+ 0 0 0 1 0+ 1 1 1 1 0……真值x ( n =5 )[x ]补[x ]移[x ] 移对应的十进制整数(3) 真值、补码和移码的对照表……012313233346263……0 0 0 0 1 00 0 0 0 0 10 1 1 1 1 11 0 0 0 0 11 0 0 0 1 01 1 1 1 1 0……0 1 1 1 1 10 1 1 1 1 00 0 0 0 1 00 0 0 0 0 11 1 1 1 1 11 0 0 0 1 01 0 0 0 0 11 0 0 0 0 0-1 0 0 0 0 0±0 0 0 0 0+ 1 1 1 1 10 0 0 0 0 01 1 1 1 1 10 0 0 0 0 0 1 0 0 0 0 0 6.1当x = 0 时[+0]移= 25+ 0[–0]移= 25–0∴[+0]移= [–0]移当n = 5 时最小的真值为–25[–100000]移可见,最小真值的移码为全0(4) 移码的特点用移码表示浮点数的阶码能方便地判断浮点数的阶码大小= 1,00000= 1,00000= –100000= 000000= 25–100000 6.16.2 数的定点表示和浮点表示小数点按约定方式标出一、定点表示S f S1S2S n…数符数值部分小数点位置S f S1S2S n…数符数值部分小数点位置或定点机小数定点机整数定点机原码补码反码–(1 –2-n) ~ +(1 –2-n)–(2n–1) ~ +( 2n–1)–1~ +(1 –2-n)–2n~ +( 2n–1)–(1 –2-n) ~ +(1 –2-n)–(2n–1) ~ +( 2n–1)二、浮点表示N= S ×rj 浮点数的一般形式S 尾数j 阶码r 基数(基值)计算机中r 取2、4、8、16等当r = 2N = 11.0101= 0.110101×210 = 1.10101×21= 1101.01×2-10= 0.00110101×2100计算机中S 小数、可正可负j 整数、可正可负✓✓规格化数二进制表示6.21. 浮点数的表示形式j f j1j2jmSfS1S2S n … …j阶码S尾数阶符数符阶码的数值部分尾数的数值部分S f代表浮点数的符号n其位数反映浮点数的精度m其位数反映浮点数的表示范围j f和m共同表示小数点的实际位置6.22. 浮点数的表示范围–2( 2m –1)×( 1–2–n )–2–( 2m –1)×2–n 2( 2m –1)×( 1–2–n)2–( 2m –1)×2–n 最小负数最大负数最大正数最小正数负数区正数区下溢0上溢上溢–215×( 1–2-10)–2-15×2-102-15×2-10215×( 1–2-10)设m = 4n =10上溢阶码> 最大阶玛下溢阶码< 最小阶码按机器零处理6.2练习设机器数字长为24 位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1 位外,阶码、尾数各取几位?满足最大精度可取m = 4,n = 18解:215×0.×××……××15位…m = 4、5、615位二进制数可反映±3 万之间的十进制数∴215= 32768214= 16384∵6.23. 浮点数的规格化形式r = 2尾数最高位为1r = 4尾数最高2 位不全为0r = 8尾数最高3 位不全为04. 浮点数的规格化r = 2左规尾数左移1 位,阶码减1右规尾数右移1 位,阶码加1r = 4左规尾数左移2 位,阶码减1右规尾数右移2 位,阶码加1r = 8左规尾数左移3 位,阶码减1右规尾数右移3 位,阶码加1基数r 越大,可表示的浮点数的范围越大基数不同,浮点数的规格化形式不同基数r 越大,浮点数的精度降低6.2例如:最大正数= 215×( 1–2–10) 2+1111×0.111111111110 个1最小正数最大负数最小负数= 2–15×2–1= –215×( 1–2–10)= 2–16= –2–15×2–1= –2–16 2-1111×0.10000000009 个02-1111×(–0.1000000000)9 个02+1111×(–0.1111111111)10 个1设m= 4,n= 10尾数规格化后的浮点数表示范围6.2三、举例例6.13 将+ 写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。