《计算机中的数制和码.ppt》由会员分享,可在线阅读,更多相关《计算机中的数制和码.ppt(41页珍藏版)》请在三一办公上搜索。
1、第二章 计算机中的数制和码制,引言二进制数及编码是所有微型计算机的基本语言,用十六进制数表示和处理二进制数极为方便。因此,建立这些数和编码的雄厚基础,对于深入学习微型计算机是非常重要的。,本章任务,1.给定一个十进制数,能够把它转换成相应的二进制数、十六进制数和BCD(Binary Coded Decimal)数。2.给定一个二进制数,能够把它转换成相应的十进制数、十六进制数和BCD数。3.给定一个十六进制数,能够把它转换成相应的二进制数、十进制数。4.给定一个BCD数,能够把它转换成相应的十进制数、二进制数。5.能够将字母或数字转换成ASCII(American Standard Code
2、for Information Interchange)码,反之亦然。,冯.诺伊曼结构:,(1)由运算器、控制器、存储器、输入设备 和输出设备五大部分组成。(2)数据和程序以二进制代码形式不加区别 的存放在存储器中,存放位置由地址指 定,地址码也为二进制数。(3)控制器是根据存放在存储器中的指令序 列即程序来工作的,并由一个程序计数 器(即指令地址计数器)控制指令的执 行。控制器具有判断能力,能以计算结 果为基础,选择不同的动作流程。,2.1 计算机中的数制一、十进制数制区别一种数制的基本特征是底数或基数。底数表示所用的字符或数码的数目,这些字符表示数制中量的大小。十进制数引用09十个数码表示
3、量的大小,故底数为10。1.按位计数法:十进制是有位、数的数制。即一个数中的每位都有特定的权,此权决定其数值的大小,每个位权由底数的n次幂确定。,100=1 105=100000101=10102=100 106=1000000103=1000 107=10000000104=10000 108=100000000例如:十进制数 4603 按位计数表示为 4*103+6*102+0*101+3*100=4000+600+00+3=46032.小数十进制小数也是具有位权的数。它们的权都是10的负n次幂。,10-1=0.1 10-5=0.00001 10-2=0.01 10-6=0.000001
4、10-3=0.001 10-7=0.0000001 10-4=0.0001 10-8=0.00000001小数点把一个数分为整数和小数两部分。如十进制数278.94,用按位计数法表示为:2*102+7*101+8*100+9*10-1+4*10-2=200+70+8+0.9+0.04=278.94也就是说每位数字乘以它所在的权,相加则得所求的数值。,二、二进制数制 按位计数法中最简单的是二进制。它只包括两个元素或状态,即1和0。1.按位计数法 和十进制数一样,二进制数的每一位所在的位置均带有一个确定数值大小的特定权。20=1224=10000221=102 25=1000002 22=1002
5、26=10000002 23=1000227=100000002,例如,二进制数1101012 按位计数为:1*25+1*24+0*23+1*22+0*21+1*20=100000+10000+000+100+00+1=11010122.二进制小数 把二进制小数表示为2 的负n次幂。2-1=0.122-2=0.012 2-3=0.00122-4=0.00012 2-5=0.0000122-6=0.0000012 2-7=0.000000122-8=0.000000012,例如,二进制数 0.1101 按位表示为:1*2-1+1*2-2+0*2-3+1*2-4=1*0.12+1*0.012+0*
6、0.0012+1*0.00012=0.12+0.012+0.0002+0.00012=0.110123.二进制数和十进制数的转换(1)二-十进制转换 把二进制数转换成相应的十进制数,只要将二进制中出现1的所在位权(转换为十进制)相加即可。整数和小数位权如下:整数 小数,.,例如,把二进制数101101.11转换成相应的十进制数:二进制数 1 0 1 1 0 1.1 1 位权 25 24 23 22 21 20 2-1 2-2十进制数 32+0+8+4+0+1+0.5+0.25=45.75(2)十进制二进制转换 把一个十进制的整数依次除以所需要的底数,就能够转换成不同底数的数。如:把十进制的数转
7、换成相应的二进制数,只要把十进制数依次除以 2 并记下每次所得的余数(余数总是 1 或 0),所得的余数即为相应的二进制数。,例如,把十进制数25转换成二进制数:25/2=12 余数 1 LSB(least significant bit)12/2=6 0 6/2=3 0 3/2=1 1 1/2=0 1 MSB(most significant bit)收集余数,得到110012=2510 要将一个十进制小数转换成不同底数或基数的数时,则应把所需的底数或基数连续不断地乘以该十进制小数,并且记录所得的溢出数(即整数部分),直到小数得 0 为止。,例如,将十进制数0.3125转换成相应的二进制数。
8、0.3125*2=0.625=0.625 溢出 0 MSB 0.6250*2=1.250=0.250 溢出 1 0.2500*2=0.500=0.500 溢出 0 0.5000*2=1.000=0 溢出 1 LSB 即 0.3125=0.01012 如果十进制数包含整数和小数两部分,则必须将小数点两边的整数和小数分开,分别完成相应的转换,再把二进制整数和小数部分组合在一起。,例如,将十进制数14.375转换成相应的二进制数:14.375=14+0.37514/2=7 余数 0 LSM 0.375*2=0.75 溢出 0 MSB 7/2=3 1 0.750*2=1.50 1 3/2=1 1 0.
9、500*2=1.0 1 LSB 1/2=0 1 MSB即:14=11102 即:0.375=0.0112所以,14.375=14+0.375=11102+0.0112=1110.0112,三、十六进制数制 由于二进制数书写和阅读均不方便,所以采用十六进制数来缩写相应的二进制数。顾名思义,十六进制以1610为底,用数字09和字母AF表示。十进制数与十六进制数、二进制数的关系:,2.2 计算机中的码制 十进制数使用很方便,因为人们熟悉它。而人们不熟悉二进制,所以使用不方便。1.二进制编码的十进制(BCD 披着二进制皮的十进制数)尽管用二进制工作有很多硬件设备方面的优点,但转换和认出二进制的大小还是
10、要花费相当多的时间,这是一个明显的缺点。BCD(Binary Coded Decimal)编码使用四位二进制码表示09个十进制数。它采用标准的8421的纯二进制码的位权值,也称为8421BCD编码。因许多数字设备、仪器仪表均用十进制输入输出,故BCD码被广泛使用。,用BCD码表示十进制数,只要把每个十进制数用适当的二进制4位码代替即可。例如,834用BCD码表示为:1000 0011 0100 BCD例如,0.764 0.0111 0110 0100 BCD例如,将BCD数转换成相应的十进制数。0110 0010 1000.1001 0101 0111BCD=628.957,1.1 压缩型BC
11、D码:压缩型BCD码是用一个字节表示两位十进制数。例如:29 0010 1001BCD 86 1000 0110BCD1.2 非压缩型BCD码:非压缩型BCD码用一个字节表示一位十进制数。高4位总是0000,低4位用00001001中的一种组合来表示09中的某一个十进制数。例如:9 0000 1001BCD,1.3 BCD码运算的修正:a.如果两个对应位BCD数相加的结果向高位无进位,且结果小于或等于9,则该位不需要修正;若结果大于9小于16,则该位需要加6修正。b.如果两个对应位BCD数相加的结果向高位有进位(结果大于或等于16),则该位需要进行加6修正。因此,两个数进行运算时,首先按二进制
12、数进行运算,然后必须用相应的调整指令进行调整,从而得到正确的BCD码结果。1.4 总结:a.BCD码的一个优点就是十个BCD码的组合格式容易记忆。一旦你能用二进制数工作,对BCD码就可以像十进制数一样迅速自如地读出。同理,也可以很快地得出以BCD码表示的十进制数。例如:0110 0010 1000.1001 0101 0100BCD=628.95410,BCD码可以简化人机联系,但比纯二进制码效率低。对同一个给定的十进制数,用BCD码表示的位数比纯二进制码表示的位数要多。例如:83,纯二进制码表示为1010011,只需七位。用BCD码表示时,为1000 0011,需八位。BCD码效率低,原因是
13、每位数据都需要某些数字电路和他对应,这使得与BCD码连接的附加电路成本提高,设备的复杂性增加,功率消耗较大。用BCD码进行的运算所花的时间比纯二进制码要多,而且复杂。用二进制四位可以表示24=16中不同状态的数,即:015个十进制数。而BCD数制,1015中有六个状态被浪费掉。所以,采用BCD数之后,为了改善数字设备与操作者间的通信,而损失了某些效率代价。,e.十进制BCD码的转换是简单和直接的。但二进制BCD码的转换就不能直接实现。必须先将二进制转换成十进制,然后再转换成BCD码。例如:将二进制1011.01转换成相应的BCD码。首先,将二进制数转换成十进制数1011.01=1*23+0*2
14、2+1*21+1*20+0*2-1+1*2-2=11.25 然后,将十进制结果转换成BCD码:0001 0001.0010 0101BCD将BCD码转换成二进制数,则完成上述运算的逆运算即可。例如:将BCD码1001 0110.0110 0010 0101转换成相应的二进制数。首先,将BCD码转换成十进制数:1001 0110.0110 0010 0101=96.625,然后,将十进制结果转换成二进制数96.625=96+62596/2=48余数 00.625*2=1.25 溢出148/2=24 00.25*2=0.50 024/2=12 00.50*2=1.0 112/2=6 06/2=3
15、03/2=1 11/2=0 11001 0110.0110 0010 0101BCD=1100000.1012,2.ASCII码(American Standard Code for Information Interchange),2.3 计算机的运算,一、二进制运算1.二进制加法 加法的四条规则 例如,100011112 加 101101012(1)0+0=0(2)0+1=1 1 0 1 1 1 1 1 1(进位)(3)1+1=0 进位1 1 0 1 1 0 1 0 1(4)1+1+1=1 进位1+1 0 0 0 1 1 1 1 1 0 1 0 0 0 1 0 0,2.二进制减法 二进制减
16、法的四条规则(1)0-0=0(2)1-1=0(3)1-0=1(4)0-1=1 借位1 例如,110001002 减 001001012 1 0 1 1 1 10 1 10(借位以后的被减数)1 1 0 0 0 1 0 0-0 0 1 0 0 1 0 1 1 0 0 1 1 1 1 1,3.二进制乘法 二进制乘法规则(1)0*0=0(2)0*1=0(3)1*0=0(4)1*1=1,例如,11112乘11012 1 1 1 1*1 1 0 1*1 1 1 1 0 0 0 0 0 0 0 0(进位)1 1 1 1 1 1 1 1 1 1 1 1 0 0(进位)1 0 0 1 0 1 1 1 1 1
17、11 1 1 1 0 0 0(进位)1 1 0 0 0 0 1 1,4.二进制除法 除法是乘法的逆运算。因此,它是确定一个数可以从另一个数中减多少次的过程。例如,1000112 被 1012 除。0 0 0 1 1 1 商 1 0 1 1 0 0 0 1 1 被除数 1 0 1 1 1 1 余数 1 0 1 1 0 1 余数 1 0 1 0 余数,5.符号数表示法(1)原码 采用这种方法时,一个二进制数同时包含有符号(+或-)和数量。因此正值和负值表示如下:+4510=0 0 1 0 1 1 0 1 2 符号 数量-4510=1 0 1 0 1 1 0 1 2(2)反码 用这种方法时,正数表示
18、法与原码的表示方法一样。如+4 10=0 0 0 0 0 1 0 0 2+12710=0 1 1 1 1 1 1 1 2 负数表示为正数的反码。一个数的反码是把所有0变成1,所有1变成0而形成的。如上所示,-410=1 1 1 1 1 0 1 1 2-12710=1 0 0 0 0 0 0 0 2,(2)反码:,(3)补码 用这种方法,正数与原码以及反码法一样表示,也就是说,它对+12710以下的所有正值使用同样的位组合格式,而负数则表示为正数的补码。一个数的补码是把这个数的反码再加1形成的。例如,-4为+4(00000100)的补码。1 1 1 1 1 0 1 1 2+1 1 1 1 1 1
19、 1 0 0 2注意:8位补码数的范围是从-12810到+12710。还要注意对于0 只有一种表示法。,(3)补码:,二、补码的运算,补码表示法的特征是用同一个电路即可以用于无符号数相加,也可以用于有符号数相加。例如,无符号数132和14相加 1 0 0 0 0 1 0 0 2 132 0 0 0 0 1 1 1 0 2+14 1 0 0 1 0 0 1 0 2 146 看上面给出的例子,如果假定输入是有符号的补码数,则为:1 0 0 0 0 1 0 0 2-124 0 0 0 0 1 1 1 0 2+14 1 0 0 1 0 0 1 0 2-110,1.带符号数的运算(1)正数相加(2)正数
20、和负数相加(3)负数相加(4)溢出的判断(1)正数相加 例如,+7加+3 0 0 0 0 0 1 1 1+7+0 0 0 0 0 0 1 1+3 0 0 0 0 1 0 1 0+10 注意:能表示为补码形式的最大8位正数是+127,如果超过这个值便产生错误。例如,+65加+67 0 1 0 0 0 0 0 1+0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0,(2)正数和负数相加 例如,+7加-3 0 0 0 0 0 1 1 1(+7)+1 1 1 1 1 1 0 1+(-3)1 0 0 0 0 0 1 0 0(+4)丢掉最后的进位 注意:如果忽略进位位,则和是正确的。请记住MP
21、U相加两个数时,是把它们看作无符号的二进制数。例如,-9加+8 1 1 1 1 0 1 1 1(-9)0 0 0 0 1 0 0 0+(+8)1 1 1 1 1 1 1 1(-1)注意:和是-1的补码表示法,(3)负数相加。例如,-3与-4相加 1 1 1 1 1 1 0 1(-3)+1 1 1 1 1 1 0 0+(-4)1 1 1 1 1 1 0 0 1(-7)丢掉最后的进位 注意:能用8位表示的最大负数是-128。例如,-120加-18 1 0 0 0 1 0 0 0(-120)+1 1 1 0 1 1 1 0(-18)1 0 1 1 1 0 1 1 0-138 注意:和的符号位是0。,
22、(4)溢出的判断:1.进位与溢出:进位是指运算结果的最高位向更高位的进位,用来判断无符号数运算结果是否超出了计算机所能表示的最大无符号数的范围。溢出是指带符号数的补码运算的溢出,用来判断带符号数补码运算结果是否超出了补码所能表示的范围。2.溢出的判断:OF=CF V DF 若OF=1,结果溢出。若OF=0,则结果未溢出。,CF,DF,2.无符号二进制数减法运算 例如,69减26 0 1 0 0 0 1 0 1 69-0 0 0 1 1 0 1 0-26 0 0 1 0 1 0 1 1 43 0 1 0 0 0 1 0 1+1 1 1 0 0 1 1 0 1 0 0 1 0 1 0 1 1 丢掉
23、最后的进位,三、逻辑运算(1)“与”运算(AND)“与”函数产生两个或两个以上逻辑变量的逻辑积。A*B=C 即:如果所有输入变量是逻辑1,则其“与”运算的逻辑积是逻辑1。如果输入变量中任意一个是逻辑0,则逻辑积是0。全1为1,有0出0。,例:把10011101和11000110相“与”。1*1=1 MSB 0*1=0 0*0=0 1*0=0 1*0=0 1*1=1 0*1=0 1*0=0 LSB可应用:清零 判别、屏蔽高字节。,(2)“或”运算(OR)“或”函数产生两个或两个以上逻辑变量的逻辑和。即有1出1,全0为0。A+B=C A、B表示输入变量,而C表示输出或者“或”运算的逻辑和。不要把此
24、“+”号和 数学的“+”号弄混。,例:把10011101和11000101相“或”。1+1=1 MSB 0+1=1 0+0=0 1+0=1 1+0=1 1+1=1 0+0=0 1+1=1 LSB可应用:OR指令组装字节或字。,(3)“异或”运算(EOR或XOR)“异或”函数执行一种两个逻辑(不是“以上”)变量之间“不相等”的逻辑测试。即:如果两个逻辑变量相等(都是1或0),“异或”运算的输出或者结果等于逻辑0,如果输入不等(一个1,另一个0),则输出是逻辑1。A V B=C,例:把100111012和110001012相“异或”。1 V 1=0 MSB 0 V 1=1 0 V 0=0 1 V 0=1 1 V 0=1 1 V 1=0 0 V 0=0 1 V 1=0 LSB 应用:求反 A=01101001 所以,XOR A,B B=11111111 C=10010110反,(4)“反”运算 反运算对单一的输入变量进行直接求反。即逻辑1输入产生一个逻辑0输出。,注意A的反码是。A上面一横表示对A求反。并读作“A反”(A非)。,