计算机原理第二章 数码系统——数据表示方法、机器数的编码格式

发布时间:2024-02-22 13:02:43浏览次数:36
计算机原理辅导资料二主 题:第二章 数码系统数据表示方法、机器数的编码格式(原码表示法、补码表示法、反码表示法)一、学习要求1.了解数据格式、字符与字符串的表示方法;2.掌握补码加减法运算;3. 掌握基本的二进制加减法。二、主要内容(一)数据表示方法1.符号数据符号数据是指各种符号,包括 26 个英文字母,10 个数字,标点符号,专用符号(+、-、×、/、=、%、……)最常用的符号数据是字符和字符串。字符:目前广泛采用 ASCII 码ASCII 码(American Standard Code for Informaon Interchange,ASCII)美国标准信息交换码。该编码已被国际标准化组织 ISO 采纳,作为国际通用的信息标准交换代码。ASCII 码表示与非压缩 BCD 码表示很相似,低 4 位完全相同,都是用 0000-1001 表示 0-9;差别仅在高 4 位,ASCII 码不是 0000,而是0011。ASCII 码包含 52 个大、小写英文字母,10 个十进制数字字符,32 个标点符号、运算符号、特殊号,还有 34 个不可显示打印的控制字符编码,一共是 128 个编码。高端增设一位奇偶校验位,所以每个字符用 8 位二进制码表示,不用奇偶校验时,b7=0。ASCⅡ 码表于表 2-1 所示。表 2-1 ASCII 码编码字符串:字符串由一连串的字符构成,每个字符在 M 中占用一个字节。高级语言中的任何一个语句 都是一个字符串。汉字:汉字也是符号数据,是由于汉字数目多,无法用几位二进制码来简单的表示出来,汉字编码比较复杂,通常汉字的输入,存储和输出采用不同的编码。例如:目标码、字形码、机内码等多种表示方式。2.数值数据的表示方法在计算机中的数据有定点数和浮点数两种表示方式。① 定点数定点数是指小数点固定在某个位置上的数据,一般有小数和整数两种表示形式。定点整数是指所有机器数的小数的小数点位置隐含在机器数的最低位之后,如 小数点位置定点小数是指所有机器数的小数点隐含在符号位之后、有效部分最高位之前,如: 小数点位置定点整数和定点小数在计算机中的表示形式没什么区别,其小数点完全靠事先约定而隐含在不同位置。定点整数的表示范围: ;定点小数的表示范围: 。② 浮点数当要处理的数是既有整数又有小数的混合小数时,采用定点数格式很不方便。为此,人们一般都采用浮点数进行运算。浮点数与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分:E――N 的阶码,是有符号的整数;S--N 的尾数,是数值的有效数字部分,一般规定取二进制定点小数形式。浮点数的格式如下: 浮点数由阶码和尾数两部分组成,底数 2 在机器数中不出现,是隐含的。其中,阶码一般用补码 定点整数表示,尾数一般用补码或原码定点小数表示。浮点数的表示范围: 非 0 值;浮点数可表示的正数范围: ;浮点数可表示的负数范围: 。 阶码愈长,所能表示数的范围愈大;尾数愈长,所能表示数的精度愈高。为了提高数据的表示精度,当尾数的值不为 0 时,尾数域的最高有效位应为 1,这称为浮点数的规格化表示。一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择。而单片机中多采用定点表示。(二)机器数的编码格式1.原码表示法将真值的符号位数值化。定点小数原码的定义: 原= ;定点整数原码的定义: 原= 。结论:正数的原码是它本身,负数的原码是真值取绝对值后,在最高位(左端)补“1”。原码的缺点:进行加减法运算非常麻烦。2.补码表示法定点小数补码的定义: 补= ;定点整数补码的定义: 补= 。结论:正数的补码等于正数本身,负数的补码等于模减去它的绝对值,即符号位 1 不变,数值部分 是原码的数值部分按位取反并加 1。对于正数: 补= 原= 。当 为 0 时, 补= 补= 补= 。3.反码表示法保持原码的符号位不变,各数码位变反。定点小数反码的定义: 反= ;定点整数反码的定义: 反= 。结论:正数的反码与其原码相同,负数的反码是符号位不变,其余各位按位取反。对于正数: 反= 补= 原= 对于负数: 补= 反+1 指末位(三)补码加减法运算在计算机中,通常总是用补码完成算术的加减法运算。其规则是:[X+Y]补= [X]补 + [Y]补 ,[X-Y]补= [X]补 - [Y]补 = [X]补 + [-Y]补 这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号位和数值位同时为正确值。此外,还可以看到,实现减运算时,用的仍是加法器线路,把减数的负数的补码送加法器即可。在有了一个数的补码之后,求这个数的负数的补码,是简单地把这个数的补码逐位取反再在最低位加 1 即可得到。例如,[Y]补=101101,则[-Y]补=010011,这大大简化了加减运算所用的线路和加减运算的实现算法。下面的问题是如何检查加减运算中的溢出问题。通常有三种表述方式(说法):(1) 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减, 差的符号与减数的符号相同,都属于运算结果溢出。这种判别方法比较复杂,要区别加还是减两种不同运算情况,还要检查结果的符号与其中一个操作数的符号的同异,故很少使用;(2) 两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出。(3) 在采用双符号位(如定点小数的模 4 补码)运算时,若两个符号位的得值不同(01 或 10)则是溢出。01 表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10 表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢";双符号位的高位符号位,不管结果溢出否,均是运算结果正确的符号位,这个结论在乘法运算过程中是很有实际意义的。请注意,在采用双符号位的方案中,在寄存器和内存储器存储数据时,只需存一位符号,双符号位仅用在加法器线路部分。再次强调,这三种不同说法是对同一个事实的略有区别的表述,实现时用到的线路可以有所区别,但问题的实质是完全一样的。请看 [X]补 + [Y]补 的运算情况:  01011        10101       10100      + 01000       + 11000      + 11001            10011       101101      101101       (1)       (2)       (3)   10111       001011      110111 + 10101      + 001000     + 110101      101000       010011      1101100  (4)       (5)       (6) 这全都是溢出情况,前 4 个使用一个符号位,后 2 个使用二个符号位。用前面说的任何一种表述解释这里的溢出都是可以的。例如,对于(1),从正加正的得负,或数据位向符号位送的进位值为1,而符号位送向更高位的进位值却为 0,二者不相同,或在(5)中使用双符号位方案时,其双符号位结果为 01,都是运算结果溢出。凡补码加减运算其结果不属于上述情况的,均不是溢出,结果的符号位和数值位均正确。这里虽然讨论的都是加法运算,对减运算亦适用。正减负等同正加正,正减正等同正加负,正如前面说过的, 减运算也是用加法器完成的。例如:    01011      11101      001011     111101 + 00100     + 11010     + 000100    + 111010     01111      10111      001111     110111  (1)      (2)       (3)      (4)(1)、(2)使用一位符号位,(3)、(4)使用二位符号位,符号位送向更高位的进位值,不论其值为 0 或为 1 一律在取模后丢弃。运算前,X、Y 寄存器分别存储被加(减)数 和 加(减)数,计算结果存回 X 寄存器;F 为加法器,能在命令 X→F 和 Y→F 信号的控制下接收两个寄存器中的数据并完成加法运算,运算结果在 F→X 命令信号的控制下接收回 X 寄存器中。为实现减运算,应将 Y 寄存器中补码数据的负数表示送到加法器 F,这可以通过送 Y 寄存器中每位数据的反码并在 F 的最低位给出进位 1 输入信号变通完成,用/Y→F 和 1→F 控制命令实现。 (四)二进制加减法 1.加法运算步骤如下:(1)首先是最右数码位相加。这里加数和被加数的最后一位分别为“0”和“1”,根据加法原则可以知道,相加后为“1”。(2)再进行倒数第二位相加。这里加数和被加数的倒数第二位都为“1”,根据加法原则可以知道,相加后为“(10)2”,此时把后面的“0”留下,而把第一位的“1”向高一位进“1”。(3)再进行倒数第三位相加。这里加数和被加数的倒数第二位都为“0”,根据加法原则可以知道,本来结果应为“0”,但倒数第二位已向这位进“1”了,相当于要加“被加数”、“加数”和“进位”这三个数的这个数码位,所以结果应为 0+1=1。(4)最后最高位相加。这里加数和被加数的最高位都为“1”,根据加法原则可以知道,相加后为“(10)2”。一位只能有一个数字,所以需要再向前进“1”,本身位置留下“0”,这样该位相加后就得到“0”,而新的最高位为“1”。通过以上运算,可以得到(1101)2+(1010)2=10101。 2.减法运算步骤(1)首先最后一位向倒数第二位借“1”,相当于得到了(10)2,也就是相当于十进制数中的“2”,用 2 减去 1 得 1。(2)再计算倒数第二位,因为该位同样为“0”,不及减数“1”大,需要继续向倒数第三位借“1”(同样是借“1”当“2”),但因为它在上一步中已借给了最后一位“1”(此时是真实的“1”),则倒数第二位目前为 1,与减数“1”相减后得到“0”。(3)用同样的方法倒数第三位要向它们的上一位借“1”(同样是当“2”),但同样已向它的下一位(倒数第二位)借给“1”(此时也是真实的“1”),所以最终得值也为“0”。(4)被减数的倒数第四位尽管与前面的几位一样,也为“0”,但它所对应的减数倒数第四位却为“0”,而不是前面几位中对应的“1”,它向它的高位(倒数第五位)借“1”(相当于“2”)后,在借给了倒数第四位“1”(真实的“1”)后,仍有“1”余,1–0=1,所以该位结果为“1”。(5)被减数的倒数第五位原来为“1”,但它借给了倒数第四位,所以最后为“0”,而此时减数的倒数第五位却为“1”,这样被减数需要继续向它的高位(倒数第六位)借“1”(相当于“2”),2–1=1。(6)被减数的最后一位本来为“1”,可是借给倒数第五位后就为“0”了,而减数没有这个位,这样结果也就是被减数的相应位值大小,此处为“0”。这样(110000)2–(10111)2 最终的结果应该是:011001,最高位的“0”可以舍掉,就得到了11001 这个结果。在二进制数的加、减法运算中一定要联系上十进制数的加、减法运算方法,其实它们的道理是一样的,也是一一对应的。在十进制数的加法中,进“1”仍就当“1”,在二进制数中也是进“1”当“1”。在十进制数减法中我们向高位借“1”当“10”,在二进制数中就是借“1”当“2”。而被借的数仍然只是减少了“1”,这与十进制数一样。三、习题(一)选择题 1.浮点数的表示范围和精度取决于( )A.阶码的位数和尾数的位数B.阶码采用的编码和尾数的位数C.阶码采用的编码和尾数采用的编码D.阶码的位数和尾数采用的编码答案:A2. 字符型编码是用( )的形状来进行的编码。A.汉字 B.英文字母 C.阿拉伯数字 D.大写英文字母答案:A(二)计算题1.已知 X=+122,Y=-122,求 X 与 Y 的原码,反码和补码。答案:X 原码=01111010,X 反码=01111010,X 补码=01111010Y 原码=11111010,Y 反码=10000101,Y 补码=100001102.已知 X=+1001,Y=+0101,求 X+Y。答案:X+Y=+1110
文档格式: docx,价格: 5下载文档
返回顶部