1.3k likes | 1.44k Vues
第二章 微型计算机基础知识 本章学习目标 掌握微型计算机中的数制及其编码 掌握布尔代数和常见逻辑电路 了解微型计算机的常用技术术语和技术. §1 微型机中的数制及其编码. 一、数与数制 进位计数制,简称数制。 十进制: 人们习惯采用的计数制是十进制。 0—9 十个不同的基数,逢十进一。 用 D 表示或省略。 二进制: 计算机所采用的计数制是二进制。 只有 0 、 1 两个不同的基数,逢二进一。 用 B 表示。 因为计算机用晶体管截止、饱和两个状态下的输出电平 1 、 0 表示数字。.
E N D
第二章 微型计算机基础知识 本章学习目标 • 掌握微型计算机中的数制及其编码 • 掌握布尔代数和常见逻辑电路 • 了解微型计算机的常用技术术语和技术
§1微型机中的数制及其编码 一、数与数制 进位计数制,简称数制。 • 十进制:人们习惯采用的计数制是十进制。 0—9 十个不同的基数,逢十进一。 用D表示或省略。 • 二进制:计算机所采用的计数制是二进制。 只有0、1两个不同的基数,逢二进一。 用B表示。 因为计算机用晶体管截止、饱和两个状态下的输出电平1、0表示数字。
十进制与二进制转换 • 人机交互时采用十进制,计算机内数据存储、计算、处理用二进制,需要需要进行转换。在计算机中的解决方法是,利用接口技术作转换。 如:用键盘输入数据时使用十进制数,即输入电路使用的键盘是十进制数,输入接口电路将十进制数转换为二进制数后送到机器内部;
二、不同数制之间的转换 1、十进制数转换为二进制数 • 十进制数转换为二进制数的方法 • 整数部分转换方法:除以2取余,直到商为0为止。最后将所有余数倒序排列,得到转换结果。 • 小数部分转换方法:乘以2取整,直到满足精度要求为止。
例1:将十进制数100转换为二进制数 • (100)10=(01100100)2 • 或者表示为: • 100D=01100100B
例2:将十进制数45.613转换成二进制数 45.613≈(101101.100111)2 或45.613D≈101101.100111B
2、二进制数转换为十进制数 • 转换方法:按权展开相加。 例如,一个8位的二进制数的各位的权值依次是27 、26 、 25、… 、20。 如将10110110B转换为十进制数的方法是: 即,(10110110)2 =(182)10或者表示为: 10110110B=182D
3、十六进制数 • 优点:二进制数位数较多时,读写不方便。而使用十六进制表示简明。 • 十六进制数表示: 0~9、A、B、C、D、E、F十六个不同的基数 逢十六进一 用H表示。
二进制数转换为十六进制数 原理:四位二进制数对应一位十六进制,所以二进制整数转换为16进制时,从最低位开始,每四位一组(不足四位时高位补0)转换成一位十六进制数据即可。 例如:1011 0110B=B6H。
十六进制数转换为二进制数 • 十六进制数据转换为二进制数据时,把每一位十六进制数据直接写成四位二进制数。 • 例如:64H=0110 0100B
4位二进制数和一位十六进制数具有一一对应的关系。4位二进制数和一位十六进制数具有一一对应的关系。 表2-1 4位二进制数和一位十六进制数的对应关系
十六进制数据和十进制数据之间的转换 • 通过二进制转换; • 将十进制整数除以十六取余,小数部分乘以十六取整,可直接转换为十六进制数; • 将十六进制数按权展开相加得到十进制数。 n+1位十六进制数的权值分别为16n、16n-1、…、162、161、160
三、数制数据的编码及其运算 在计算机中,数据分无符号数和带符号数。 • 无符号数用整个机器字长的全部二进制位表示数值位, 无符号位; • 带符号数用最高位表示该数的符号位。 带符号数又有原码、补码和反码三种形式。
1、原码表示法 • 由于计算机中只能有0、1两种数,不仅数的数值部分在计算机中用0、1编码的形式表示,正、负号也只能用0、1编码表示。 • 一般用数的最高位(Most Significant Bit,MSB)表示数的正负符号。 • 原码表示法:一个数连同它的符号在机器中使用0、1进行编码。
例如,若用5位二进制数表示数据时,最高位表示符号,0表示正数,1表示负数,余下的四位表示数据:例如,若用5位二进制数表示数据时,最高位表示符号,0表示正数,1表示负数,余下的四位表示数据: MSB=0表示正数,如+1011B表示为01011B; MSB=1表示负数,如-1011B表示为11011B。
机器数和真值 • 把一个数在机器内的二进制形式称为机器数。 • 把这个数本身称为该机器数的真值。 上例的“01011B”和“11011B”就是两个机 器数。 它们的真值分别为+1011B和-1011B。
真值为纯小数时,其原码形式为XSX1X2…Xn,其中XS表示符号位。例如,真值为纯小数时,其原码形式为XSX1X2…Xn,其中XS表示符号位。例如, 若X=0.0110,则[X]原=X=0.0110; 若X=-0.0110,则[X]原=1.0110 • 真值为纯整数时,其原码形式为 XSXnXn-1…X2X1,其中XS表示符号位。
8位二进制原码的表示范围为: -127~ -0 ~ +0~+127 16位二进制原码的表示范围为: -32767~ -0 ~ +0~+32767 原码表示中,真值0有两种不同的表示形式: [+0]原=00000, [-0]原=10000
无符号数 没有符号位的数,称为无符号数。 无符号数的最大值比有符号数大一倍。 如字长为8位时,能表示的无符号数的最大值为11111111B,即255,而8位有符号数的最大值是01111111B,即+127。
8位二进制无符号数的表示范围为:0~255 16位二进制无符号数的表示范围为:0~65535 • 原码的优点是直观易懂,机器数和真值间的转换很容易,用原码实现乘、除运算的规则简单。缺点是加、减运算规则较复杂。
原码计算存在的问题 直接用0、1表示正、负,运算时带来的问题:有符号数和无符号数的表示形式并没有任何区别,所以,CPU在进行运算时,并不知道参与运算的数是有符号数还是无符号数,在进行有符号数的运算时,会将符号也当作是数值进行运算,因而有时会出现错误的结果。
两个正数相加时,符号位也同时相加 • 若两个数之和不超出其所能表示的最大值127时,符号位相加:0+0=0,即和仍然为正数,结果正确。 • 若两个数之和超出了其所能表示的最大值127时,就会产生数字位向符号位的进位,两个符号位相加0+0=0,再加上低位进上来的1,则符号位为1,作为有符号数,表示两个正数相加的和为负数,显然是不对的。
例1,两个有符号正数01010111B(87D) 和00010110B(22D)相加。 其和为1101101B,即十进制的109<127, 符号位为0,表示和为正数,结果正确。
例2,两个有符号正数00110111B(55D)和01011101B(93D)相加。例2,两个有符号正数00110111B(55D)和01011101B(93D)相加。 和应为+148,但符号位为1,表示和是负数,错误。 产生错误的原因是:相加的和是148>127, 超出了8位有符号正数所能 表示的最大值,对于有 符号数,这种数值运算 侵入到符号位造成结果 错误的情况,称为溢出。
一个正数与一个负数相加,和的符号位不应是两个符号位直接运算的值:0+1=1。一个正数与一个负数相加,和的符号位不应是两个符号位直接运算的值:0+1=1。 和的符号位应由两数中绝对值大的数所决定。 • 两个负数相加时,由于1+1=10,符号位只表示0,因此和的符号也不应是由两符号位直接运算的结果所决定。 • 为解决机器内有符号数的符号位参加运算的问题,引入了反码和补码。
2、反码表示法 • 对正数来说,其反码和原码相同。 即[X]原=[X]反。 • 对负数来说,反码为其原码的符号位不变,数值部分的各位取反。 • 在反码表示中,真值0也有两种不同的表示 形式: [+0]反=00000B [-0]反=11111B
真值、原码、反码的不同表示 X [X]原[X]反 +1101B01101B01101B -1101B11101B10010B
反码运算要注意以下三个问题: • 符号位可与数值位一样参加运算。 • 符号位运算后如有进位产生,则把这个进位送回到最低位去相加,这叫循环进位。 • 反码运算具有性质:[X]反+[Y]反=[X+Y]反
3、补码表示法 • 同余的概念 两整数A和B除以同一正整数M,所得余数相 同,则称A和B对M同余。 可写成:A=B(mod M) 例如:对钟表来说,其模M=12,故4点和16 点、5点和17点…均是同余的。 4=16(mod 12),5=17(mod 12)
指针式钟表的校准(快两个小时) • 方法一:往回拨两个小时 • 方法二:往前拨10个小时,结果相同。 钟表按照12小时循环计数,一旦加到大于12小时时,就会将12舍弃,计为0点。
这种按照周期循环的数的周期叫做模,这里模是12,数一旦大于或等于其模,就会被自动舍弃。这种按照周期循环的数的周期叫做模,这里模是12,数一旦大于或等于其模,就会被自动舍弃。 • 所以,5+10-12=3,而5-2=5+10-12=5+(10-12),10可看作-2的补码。 即以12为模时,-2和10同余。同余的两个数具有互补关系, -2与10对模12互补,即-2的补码是10。
可见,只要确定了“模”,就可找到一个与负数等价的正数( 该正数是负数的补码 )来代替此负数,这个正数可用模加上负数本身求得,这样就可把减法运算用加法实现了。
补码的概念: • 知道模的大小,求某个负数的补码时,只要将该负数加上其模,就得到它的补码。 • 如以“10”为模,“-7”的补码为 (-7)+10= 3 (mod 10) 这时“3”就是“-7”的补码。
某一正数加上一个负数时,实际上是做一次减法。引入补码概念之后,可将该正数加上这个负数的补码,最高位产生的进位会自然丢失,所以得到的结果同样是正确的。某一正数加上一个负数时,实际上是做一次减法。引入补码概念之后,可将该正数加上这个负数的补码,最高位产生的进位会自然丢失,所以得到的结果同样是正确的。 例如,当模为10时, 7+(-7)= 7+(-7+10)=7+3 =10=10-10 = 0(mod 10) 又如, 7+(-4)=7+(-4+10)=7+6=13=13-10=3 (mod 10)
以2n为模的补码 在计算机中,带符号的数用二进制补码表示。存放数据的存储器的位数都是确定的。如每个存数单元的字长为n位,则它的模就是2n。 2n是n+l位的二进制数100…0B(1后面有n个0),由于机器只能表示n位数,因此数2n在机器中仅能以n个0来表示,而该数最高位的数字1就被自动舍弃了。则以2n为模时2n和0在机器中的表示形式是完全一样的。
如果将n位字长的二进制数的最高位留做符号 位,则数字只剩下n-1位,下标从n-2到0,数 字X 的补码(以2n为模)的表示形式为: • 当X为正数时,即X=+Xn-2Xn-3…X1X0时, [X]补=2n+X =0 Xn-2Xn-3…X1X0 (mod2n) =[X]原
例如,n=8时,28=100000000B,则 -1010111B的补码为: [-1010111B]补=100000000B-1010111B =10101001B 或[-1010111B]补=[-1010111B]反+1 =10101000B+1 =10101001B
正数:补码和原码的形式相同: [X]原=[X]补; • 负数:补码为其反码(数值部分各位变反)加1。 例如: X [X]原[X]反[X]补 正数 +0001101B 00001101B 00001101B 00001101B 负数 -0001101B 10001101B 11110010B 11110011B
不论是正数,还是负数,反码与补码具有 下列相似的性质: [[X]反]反=[X]原 [[X]补]补=[X]原
【例2-1】+13和-13的原码、反码、补码以及反码的反码和补码的补码如下:【例2-1】+13和-13的原码、反码、补码以及反码的反码和补码的补码如下: X[X]原 [X]反 [X]补 [[X]反]反 [[X]补]补 +0001101B 00001101B 00001101B 00001101B 00001101B 00001101B -0001101B 10001101B 11110010B 11110011B 10001101B 10001101B
可见, 8位字长,原码、反码表示的数的 范围为+127~-127,而补码表示的数的范围为+127~-128。 下面对两个特殊的数的补码作进一步说明: • 0的补码 [+0]补=00000000B [-0]原=10000000B,经求反加1,得00000000B, 所以,[-0]补=00000000B。 即,对补码, [+0]补= [-0]补=00000000B
-128的补码 根据补码的定义, [-128]补= 28+(-128) = 28+(-127)-1 =100000000B-1111111B-1 =100000001B-1 =10000000B
数值数据的运算 采用补码进行加减运算时要注意以下几个问题: • 溢出 补码运算时,其符号位与数值部分一样参加运算,但 结果不能超出其所能表示的数的范围,否则会出现溢出错 误。 无符号数的加减运算结果超出数的范围的情况叫做进位 或借位,计算机中有专用的标志位作记录,只要适当处理 这些标志,结果就不会出错,所以在多字节数的加减运算 时必须考虑进位和借位的处理。
采用了补码以后,符号运算后如出现进位,则把这个进位舍去不要,不影响运算结果,运算后的符号就是结果的符号。采用了补码以后,符号运算后如出现进位,则把这个进位舍去不要,不影响运算结果,运算后的符号就是结果的符号。 • 补码运算的性质: [X]补+[Y]补=[X+Y]补 [X]补-[Y]补=[X-Y]补 • 以上运算性质,与数的位数n无关。
下面以二进制数的补码运算为例,说明有符号数的下面以二进制数的补码运算为例,说明有符号数的 运算性质 【例2-2】已知:X=+0101101B Y=-0000001B 求X+Y=? 解: [X]补= 00101101 +[Y]补= 11111111 [X+Y]补 = 100101100 进位舍去不要 X+Y=[[X+Y]补]补=0101100B=[X]补+[Y]补
【例2-3】 已知:X=-0001101B Y=-0000001B 求:X+Y=? 解: [X]补 = 11110011 +[Y]补 = 11111111 [X+Y]补 = 111110010 进位舍去不要 所以,X+Y=[[X+Y]补]补=-0001110B
【例2-4】 已知:X=+1 Y=-128 求:X+Y=? 解: [X]补=00000001 +[Y]补=10000000 [X+Y]补=10000001 所以,X+Y=[[X+Y]补]补=11111111B =-127
加法器就能完成所有的算术运算 • 加法算减法:因为减去一个正数的减法运算可以看作是加上一个负数的加法运算,所以在计算机中,求得补码之后,就把减一个正数的运算转变为加上该负数的补码的加法运算。 • 加法算乘法:可以采用移位相加的方法完成。 • 加法算除法:采用移位相减的方法完成,这样只用加法器就能完成所有的算术运算。