计算机原理第二章数码系统——数据表示方法、机器数的编码格式(原码表示法、补码表示法、反码表示法)
主题:第二章数码系统——数据表示方法、机器数的编码格式(原码表示法、补码表示法、反码表示法)
学习时间:2016年10月10日--10月16日
内容:
我们这周主要学习第二章第一—三节“数据表示方法”、“定点加法、减法运算、定点乘法运算”的相关内容。希望通过这两节内容的学习能使同学们进一步掌握计算机运算原理的相关知识。
一、学习要求
1.了解数据格式、字符与字符串的表示方法;
2.掌握补码加减法运算;
3. 掌握基本的二进制加减法。
二、主要内容
(一)数据表示方法
1.符号数据
符号数据是指各种符号,包括26个英文字母,10个数字,标点符号,专用符号(+、-、×、/、=、%、……)
最常用的符号数据是字符和字符串。
字符:目前广泛采用ASCII码
ASCII码(American Standard Code for Information Interchange,ASCI I)美国标准信息交换码。该编码已被国际标准化组织ISO采纳,作为国际通用的信息标准交换代码。ASCII码表示与非压缩BCD码表示很相似,低4位完全相同,都是用0000-1001表示0-9;差别仅在高4位,ASCII码不是0000,而是0 011。
ASCII码包含52个大、小写英文字母,10个十进制数字字符,32个标点符号、运算符号、特殊号,还有34个不可显示打印的控制字符编码,一共是128个编码。高端增设一位奇偶校验位,所以每个字符用8位二进制码表示,不用奇
偶校验时,b7=0。
ASCⅡ码表于表2-1所示。
表2-1  ASCII 码编码
字符串:字符串由一连串的字符构成,每个字符在M 中占用一个字节。高级语言中的任何一个语句都是一个字符串。
汉字:汉字也是符号数据,是由于汉字数目多,无法用几位二进制码来简单的表示出来,汉字编码比较复杂,通常汉字的输入,存储和输出采用不同的编码。例如:目标码、字形码、机内码等多种表示方式。
2.数值数据的表示方法
在计算机中的数据有定点数和浮点数两种表示方式。
① 定点数
定点数是指小数点固定在某个位置上的数据,一般有小数和整数两种表示形式。 定点整数是指所有机器数的小数的小数点位置隐含在机器数的最低位之后,如
小数点位置
定点小数是指所有机器数的小数点隐含在符号位之后、有效部分最高位之前,如:
小数点位置
定点整数和定点小数在计算机中的表示形式没什么区别,其小数点完全靠事先约定而隐含在不同位置。
定点整数的表示范围:021n x ≤≤- ;
定点小数的表示范围:012n x -≤≤- 。
②浮点数
当要处理的数是既有整数又有小数的混合小数时,采用定点数格式很不方便。为此,人们一般都采用浮点数进行运算。浮点数与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分:
E ――N 的阶码,是有符号的整数;
S --N 的尾数,是数值的有效数字部分,一般规定取二进制定点小数形式。 浮点数的格式如下:
浮点数由阶码和尾数两部分组成,底数2在机器数中不出现,是隐含的。其中,阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。
浮点数的表示范围: 非0值;
浮点数可表示的正数范围: (2
1)(21)22(12)2m m n n x ----+-+⋅≤+≤+-⋅; 浮点数可表示的负数范围: (21)(21)
(12)222m m n n x -+------⋅≤-≤-⋅。    阶码愈长,所能表示数的范围愈大;尾数愈长,所能表示数的精度愈高。
为了提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1,这称为浮点数的规格化表示。
一台计算机中究竟采用定点表示还是浮点表示,要根据计算机的使用条件来确定。一般在高档微机以上的计算机中同时采用定点、浮点表示,由使用者进行选择。而单片机中多采用定点表示。
(二)机器数的编码格式
1.原码表示法
将真值的符号位数值化。
定点小数原码的定义:
[]X 原=010X X X X ≥⎧⎨-<⎩
; 定点整数原码的定义:
[]X 原=020n X X X
X ≥⎧⎨-<⎩ 。 结论:正数的原码是它本身,负数的原码是真值取绝对值后,在最高位(左端)补“1”。
原码的缺点:进行加减法运算非常麻烦。
2.补码表示法
定点小数补码的定义:
[]X 补=020X X X X ≥⎧⎨+<⎩
定点整数补码的定义:
[]X 补=1020n X X X
X +≥⎧⎨+<⎩ 。 结论:正数的补码等于正数本身,负数的补码等于模减去它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并加1。
对于正数:[]X 补=[]X 原=X 。
当X 为0时,[]X 补=[0]+补=[0]-补=0。
3.反码表示法
保持原码的符号位不变,各数码位变反。
ascii是几位二进制编码定点小数反码的定义:
[]X 反=0220n X X X
X -≥⎧⎨-+<⎩ ; 定点整数反码的定义:
[]X 反=10210n X X X X +≥⎧⎨-+<⎩
。 结论:正数的反码与其原码相同,负数的反码是符号位不变,其余各位按位取反。
对于正数:[]X 反=[]X 补=[]X 原=X
对于负数:[]X 补=[]X 反+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,这可以

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。