1、1,计算机组成技术,第 3章,计算机中的数及其运算方连众,2,第3章 计算机中的数及其运算,3.1 计数制 不讲留作业 3.2 不同计数制之间的转换 不讲留作业 3.3 机器数的浮点与定点表示法 3.4 数的各种编码 3.5 数的逻辑运算,3,3.1 计数制,3.1.1 十进制(Decimal) 3.1.2 二进制(Binary) 3.1.3 八进制(Octal System)和十六进制(Hexadecimal System),基数:基本数字集合 基值:集合的大小 数码:基本数字 数位:该数码在数中的位置 进位制: 权:基值的幂,形式:N=dn-1rn-1+dn-2rn-2+d1r1+d0r0
2、+d-1r-1+d-mr-m,4,3.1.1 十进制(Decimal),十进制是由十个数码:0、1、2、3、4、5、6、7、8、9及数码的位置位权两者来决定其数值的。 例如:(245.25)10210241015100210-1510-2 ,其中 2、4、5、2、5称为系数;10称为基();102、101、100、称为权。 十进制的特点是“逢十进一,借一当十”。 一个十进制表示的数其数值为数值数码位权,5,3.1.2 二进制(Binary) ,二进制只有两个数码:0和1,基为2。 其特点是“逢二进一,借一当二”。,二进制数与十进制数的对应关系,从上表可以看出, 表示同一数值, 十进制的位数少,
3、 二进制的位数多, 且数值越大, 用十进制和二进制表 示数相差也越多。,计算机之所以采用二进制表示信息,原因可以归纳为以下4点: 1. 二进制是最节省的计数制之一 2. 二进制数便于物理元件的实现 3. 二进制数运算简单 4. 便于实现逻辑运算,6,3.1.3八进制和十六进制,二进制的缺点是书写冗长,不便阅读。于是便引出了八进制和十六进制。对于汇编语言程序员来说,最常用的数字编码是十六进制码。无论存储器地址还是存储器内容中的数据或指令,多是用十六进制码表示的。,由于一个数可有多种进制表示,我们用下标来加以区别,正如上述例子中所采纳的(F5.4) 16、(245.25) 10、(365.2)8、
4、(11110101.01)2 等。也可以用D表示十进制数,H表示十六进制数,O表示八进制数,B表示二进制数。,7,3.2 不同计数制之间的转换 ,3.2.1 各种数制转换成十进制 3.2.2 将十进制转换成其它数制 3.2.3 二进制、八进制、十六进制之间的转换,8,3.2.1 各种数制转换成十进制,1.1按“权”转换法,例1 (11001.11) 212412302202112012-112-216810.50.25(25.75)10 例2(746.3) 8 78248168038-1 4483260.375 (486.375) 10 例3(A5B.8)1610162516111160816
5、-1256080110.5(2651.5) 10,1.2基值重复相乘相除法,整数部分用基值重复相乘法 设Ndnrndn-1rn-1d1r1d0r0,则 N(dnrdn-1)rd1)rd0 例1 (746)8 (784)86 6086 (486)10,小数部分用基值重复相除法 设Nd-1r-1d-2r-2d-mr-m,则 Nr-1(d-1r-1(d-2r-1d-m 例1 (0.11)2 (121)2 1.52 (0.75)10,9,3.2.2 将十进制转换成其它数制,将整数和小数部分分开处理。,整数部分用基值重复相除 的方法(简称除基取余法),小数部分用基值重复相乘 的方法(简称乘基取整法),1
6、0,3.2.3二进制.八进制.十六进制之间的转换,因为有8i 23i,16i 24i,所以一位八进制相当于 三位二进制,一位十六进制相当于四位二进制。,11,3.3 机器数的浮点与定点表示法,机器数 把一个数(计算机中的数是用二进制来表示的,数的符号也是用二进制表示的)连同其符号在机器中的表示加以数值化的数.,3.3.1 数的符号和小数点的表示 3.3.2 原码、补码和反码 3.3.3 BCD码 3.3.3 奇偶校验码 3.3.4 ASCII码,根据不同的用途,计算机可以采用不同的码制来表示。 表示数字:原码、补码、反码; 人机交互:二-十进制编码(BCD); 校验功能:奇偶校验码; 纠错功能
7、:汉明码 表示字符:ASCII码; 表示汉字:汉字编码,12,3.3.1 数的符号和小数点的表示,计算机中的有符号数的符号一般用数的最高位来表示;0-正、1-负。 符号数码化的数称为机器数;其所代表的数本身称为真值。特点如下:,0,0101011和1,0101011,1、字长决定数的表示范围;,2、符号数字化,参与运算;,3、小数点按约定方式标出;,1)有符号数与无符号数 2)定点数表示 3)浮点数表示 4)规格化数与溢出,13,1)有符号数与无符号数,无符号数:机器字长所有位都表示数值。 设:N=8 0000000011111111 表示 0255;0X255 有符号数:机器字长的最高位表示
8、符号,其它位表示数值。设:N=8位 正数:01111111 00000000表示+127+0 负数:1000000011111111表示-0-127 有符号数的范围:-127+127(包含有-0,+0) -127 X+127,14,2)定点数表示,定点数指小数点位数保持固定不变。 常有两种表示: 纯小数:1.1010101,所有数均为小数。小数点左边为符号位纯整数:11110111.,所有数均为整数。最高位为符号位,0111111111111111 表示+1-2-7 -1+2-7,0111111111111111 表示+127 -127,15,3)浮点数表示 (小数点是个移动),由阶码和尾数组
9、成。 任意一个有符号的二进制数N的表示形式:N=S2J,尾数,底数,阶码,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 01 0 0 0 1 0 1 1 0 1 0 1 1 0 1 0,阶符,阶值,尾数值,尾符,可以看出:尾数位数越多精度越高; 阶码位数越多数表示的范围越大。,16,4)规格化数与溢出,规格化数:如果尾数的第一位有效数字为1,该数是规格化的;反之是非规格化的。 1.1001011; 0.1010011; 1.0100101; 0.0100101 溢出 下溢:阶码超过机器能表示的最小数,将此数当作0; 上溢:阶码超过机器能表示的最大的绝对值,溢出处理。,
10、17,3.3.1 原码、补码和反码,原码,补码,反码,为了表示数的符号,可在数的最高位之前增设一位符号位,符号位为0表示正数,为1表示负数。这样规定的二进制码,我们称为原码。例如:x1 1011010 则 x1原 0,1011010, x2 -1011010则 x2原 1,1011010,补码的特点 : 正数的补码,即真值的最前面加一符号位“0”; 负数的补码,即真值逐位求反最低位加1,最前面加一符号位“1”。,小结 机器数的最高位是符号位,0为正,1为负; 正数,其原码、补码、反码表示形式相同; 负数: x原:符号位为1,数值部分与真值绝对值相同; x补:符号位为1,数值部分为将真值尾数逐位
11、取反,最低位加1; x反:符号位为1,尾数部分为将真值的尾数按位取反。,反码的数学定义:设真值为x,机器字长位n位,则整数的反码:x反=x 0 x2n-1(2n-20)+x -2n-1x 0 小数的反码: x反=x 0 x1(2-2-n+1)+x -1x 0,18,3.3.2 BCD码,BCD码(即Binary Coded Decimal), 意为二进制码表示的十进制数。,常用的BCD码为8421BCD码,即每位十进制数码均用四位二进制数来表示,四位二进制数从高到低的权值分别为23、22、21、20,即8421。由于它们与二进制数位权一样,故又称为自然的BCD码.,BCD码的用途如下: 在以二
12、进制工作的机器内,数从十进制到二进制或从二进制到十进制转换时,BCD码用作中间表示。 它可以表示数,并可在计算机内直接进行运算。,19,3.3.3 奇偶校验码,必须强调,奇(偶)校验码只能发现单数(奇数)个错误,而不能检查出偶数个错误,也不能查出出错的位是哪一位,因此,它不具有纠正错误码的能力。但它却很常用,因为它占用的位数少,只需一位,编码简单,控制亦方便。虽然它不具备纠错的能力,但计算机只要发现数据或指令有误,可直接丢弃它,重新去获取或计算即可。所以奇偶校验码被计算机存储、传送等广泛使用。,20,3.3.4 ASCII码,发明ASCII码(American Standard Code fo
13、r Infoemation Interchange, 美国标准信息交换码), 就是为了代表我们与打字机 键盘相联系的所有的符号。,21,3.3.5 其它编码,汉字编码汉明码循环校验码,计算机内部,由外到内,由内到外,输入方式:大键盘、手写、语音、小键盘 输入编码:拼音、字形、数字 内部表示:国标码、机器内码。 输出显示:字模点阵码 字模点阵码与机器内码是多对一关系,具有检测能力和纠错能力 信息位n;检测位k;总长度k+n位。,又称CRC码(Cyclic Redudancy Check),检测和纠错能力强。 设计思想:让校验码(有效信息位加上校验位)除以某一事先约定好的代码。若能除尽则表明校验正
14、确,否则校验出错,出错位由余数指出。,22,3.4 数的各种编码,8086 能够处理 三种类型的 数据,无符号二进制数,有符号二进制数,无符号十进制数,3.4.0 数据类型 3.4.1 无符号二进制数 3.4.2 有符号二进制数 3.4.3 无符号十进制数(BCD码),23,3.4.0 数据类型,整数表示实数表示十进制数的表示,字符型整数:长度8bit,表示范围:有符号-128-+127;无符号:0-255 单字整数:16bit,表示范围: -32768-+32767;0-65535 双字整数:32bit,表示范围:-2*109-+2*109-1;0-4*109-1,短实数(浮点数):32位=
15、符号位(1)+偏移阶码(8)+有效位( 23 ) 长实数(双精度数): 64位=符号位(1)+偏移阶码(11)+有效位( 52 ) 偏移阶码=真实阶码+偏移量(短127;长1023)=0,非组合(非压缩)编码 组合编码(压缩),24,3.4.1 无符号二进制数,无符号二进制数 有两种字长, 即8位及16位.,八位最 小值0,八位最 大值255,十六位最 小值0,十六位最 大值65535,25,3.4.2 有符号二进制数,无符号二进制数 有两种字长, 即8位及16位.,八位最 小值-128,八位最 大值127,十六位最 小值-32768,十六位最 大值32767,26,3.4.3 无符号十进制数
16、(BCD码),无符号十进制数是每位数用4位二进制码来表示。在8086中,它的存放有两种形式:一种是压缩格式的,一种是非压缩格式的。,压缩型,非压缩型,无符号压缩十进制数是每4位存放一位十进制数,一个字节存放两位十进制数。字节的十进制数范围是099。无符号非压缩十进制数是一个字节存放一位十进制数,数值放在低4位中,高4位一般清零,尤其对乘除法运算时,高4位必须是零。双字节表示的非压缩格式的十进制数,其取值范围是099.,27,3.5数的逻辑运算,数的运算可分为两类,一类为算术运算,一类为逻辑运算.逻辑运算的特点是按位进行,每位得出一个独立的结果,对其他位无影响。因此逻辑运算不存在进位、借位、溢出
17、等问题。,3.5.1 逻辑非(求反)NOT 3.5.2 逻辑加OR 3.5.3 逻辑乘( 即逻辑与)AND 3.5.4 逻辑异或(按位加)XOR,28,3.5.1 逻辑非(求反)NOT,逻辑非可用逻辑电路来实现。通常,我们称实现求反的逻辑电路 为inverse gate(非门),其电路图的国标符号及国际表示符号如图,例10110101,01100010,求其非。解 01001010, 10011101,29,3.5.2 逻辑加OR,A、B两个变量中,只要有一个变量取值为1,则它们“或”运算的结果就是1。若有两数X xnxn-1x1x0,Y ynyn-1y1y0, 则 X、Y两个数的逻辑加 Z
18、X OR Y znzn-1z1z0,且zi xiyi ( i 0, 1, , n )。,例 若X 10110101,Y 01100010,求 X OR Y ? 解 X OR Y 10110101 OR 01100010 11110111,30,3.5.3 逻辑乘( 即逻辑与)AND,与门(AND gate)电路符号由图所示,其运算规则,31,3.5.4 逻辑异或(按位加)XOR,逻辑异或又称“按位加”,可用符号“”来表示。其(Exclusive OR gate)门电路符号如图所示,32,3.6数的算术运算,逻辑运算按位进行运算 算术运算“加、减、乘、除”,各位之间互相关联有借位、进位。 3.6
19、.1 定点加减运算及溢出判断3.6.2 定点乘除运算,33,3.6.1 定点加减运算及溢出判断,定点加法运算 计算机中的书的加减法是以补码形式进行的。 小数和整数原理相同,以小数为例。 计算公式:,模取4 ,1X-1, 1Y -1 X补+Y补=X+Y补(mod 4),模为什么取4 ?,采用双符号位 11.001101,34,证明公式: 若模取4 ,1X-1, 1Y-1;则 X补+Y补=X+Y补(mod 4),证明: 分三种情况: 当 1X0, 1Y0 时 当 1X0, 0Y-1 (或 0X-1 , 1Y0)时 当 0X-1, 0Y-1 时,35,当 1X0, 1Y0 时, 1X0, 1Y0 2
20、X+Y0又由补码定义可知X补=X; Y补=Y。 X补+ Y补=X+Y=X+Y补,36,当1X0, 0Y-1 (或0X-1 , 1Y0 )时, 1X0, 0Y-1 X补=X; Y补=4+Y X补+ Y补=X+4+Y=X+Y补 -若 X+Y0则 X+Y+4=X+Y (mod 4) X补+ Y补= X+Y=X+Y补(mod 4) -若-1X+YX-1 , 1Y0 同上证。,37,当 0X-1, 0Y-1 时, 0X-1, 0Y-1 0X+Y-2则可知X补=4+X; Y补=4+Y。 X补+ Y补=8+X+Y=4+X+Y补=X+Y补(mod 4),在模4的意义下,任意两个数的补码之和等于此二数和的补码,
21、38,例题,例1 已知 X=0.101010,Y=-0.001001,求X+Y=?例2 已知 X=-010101,Y=-000110,求X+Y=?,39,2.定点数减法运算 转化减法运算公式:X-Y补=X+(-Y)补=X补+-Y补(mod 4);例1 已知 X=0.101100,Y=-0.100111,求X-Y=?例2 已知 X=-010101,Y=-011010,求X-Y=?,40,3. 溢出判断,当两个正数相加为负数,则结果出错,即产生了溢出。例5 已知 X=0.1010101,Y=0.0110010,求X+Y=?解:x补=0.1010101, y补=0. 0110010。0.101010
22、1+ 0.01100101.0000111,产生溢出!, X+Y补= 1.0000111 X+Y=-0.1111001,41,双符号位溢出判断,采用双符号位,即模4补码时,判断溢出的法则为:“两符号位不同,为溢出”。 运算结果: 如:00.xxxxxx为正数; 如:11.xxxxxx为负数; 如:01.xxxxxx为正溢出; 如:10.xxxxxx为负溢出;,首位符号决定:结果的正负。,42,例6:已知(1) X=0.1001, Y=0.1101(2) X=-1110, Y=-1110判断相加后有没有溢出。,双符号位溢出判断,43,单符号位溢出判断,溢出判断法则:相同符号相加得异号为溢出。 两
23、个符号相反的数相加,不会产生溢出。 两个符号相同的数相加: 正数相加结果为1.XXXXXXX,为正溢出; 负数相加结果为0.XXXXXXX,为负溢出。上面例6:已知:(1) X=0.1001, Y=0.1101(2) X=-1110, Y=-1110判断相加后有没有溢出。,双符号位溢出判断相对简单,44,3.6.2 定点乘除运算,乘除法运算 = 加法 + 移位原码一位乘法原码一位除法,45,原码一位乘法,十进制手算: 二进制乘法口诀:一一得一,其它为零。 符号为:同号为正,异号为负。 乘数逐位乘与被乘数,部分积乘权累加。 数学表示:X=XSX*; Y=YSY*;Z=ZSZ*= X Y=(XS
24、YS)(X*Y*),例7 已知X=+0101,Y=-1101, 求 Z=XY,46,计算机运算与手算的区别:解决办法: 累加部分积 左移改为右移演示,手算: 有足够的纸张,没有足够的寄存器,中间结果,47,机器中实现步骤,部分积初始值: 0000,已知X=+0101,Y=-1101,求 Z=XY。,+) 0101,0101,00101 SHR 1 bit,+) 0000,00101,000101 SHR 1 bit,+) 0101,011001,0011001 SHR 1 bit,+) 0101,1000001,01000001 SHR 1 bit,Z= (XS YS)(X*Y*)=11000
25、001,根据此例总结出原码乘法法则: 从乘数最低位开始,逐位乘与被乘数; 每做完一次乘运算,即累加部分积; 每累加一次后,部分积右移一位; N位乘数进行n次乘、累加、移位运算; 最后得到乘积的绝对值。 符号为两数的符号异或运算值。,48,原码一位除法,原码一位除法与乘法相似X=XSX*; Y=YSY*;Z=XY=ZSZ*ZS=(XS YS), Z*=(X*Y*) 下面我们只讨论正数原码的除法问题 常用的原码除法运算方法: 恢复余数法 加减交替法,49,恢复余数法1,X=1011,Y=1101,求 Z=X/Y 手算形式:,50,恢复余数法2,判断够减否,人来完成。,做减法,判断余数的符号。,规则
26、: 被除数(或余数)与除数做减法; IF余数为零 OR 满足精度 THEN 商为“1”,结束ELSE IF 余数为正 THEN 商为“1”ELSE 商为“0”,余数再加上除数; 左移一位; 转 I 注:减法用加补码来实现。,51,恢复余数法3,例: X=1011,Y=1101,求 Z=X/Y。 解:-Y补=110011(双符号位)。,恢复余数法缺点:需要不断回溯, 影响机器速度。,结果:Z=0.1101;R=0.0111。,52,加减交替法1,加减交替法是从恢复余数法中的余数规律总结出来的。 被除数(或余数)做减法,余数为R1; 若R1为正,则商上“1”, 余数R1 左移一位后,减除数得R2(
27、R2=2R1-Y); 若R2 为正,商上“1”, R3=(2R2-Y); 若R2 为负,商上“0”, R3=2(2R1-Y+Y)-Y=4R1-Y; 修改:当R2 为负时,不加除数,而将R2直接左移一位,再加上除数,结果为: R3=2R2+Y=2(2R1-Y)+Y=4R1-2Y+Y=4R1-Y,53,加减交替法2,余数为正,商取“1”,余数左移一位, 减去除数,求得新的余数;,余数为负,商取“0”,余数左移一位, 加上除数,求得新的余数;,规则,54,加减交替法3,X=1011,Y=1101,求 Z=X/Y。 解: -Y补=110011(双符号位)。001011 +) 110011111110 0 SHL1 111100+) 001101001001 1 SHL1 010010+) 110011,000101 1 SHL1 001010 +) 110011111101 0 SHL1 111010+) 001101000111 1结果:Z=0.1101;R=0.0111。,55,