1.93k likes | 2.03k Views
第二章 运算方法和运算器. 一、数据和文字的表示 二、定点加法、减法运算 三、定点乘法运算 四、定点除法运算 五、逻辑运算 六、定点运算器的组成和结构. 2 .1 数据与文字的表示方法 -------------------------------------------------------------------------------- 2.1.1 数据格式 2.1.2 数的机器码表示 2.1.3 字符与字符串的表示方法 2.1.4 汉字的表示方法 2.1.5 校验码. 2.1.1 数据格式. 计算机中常用的数据表示格式有两种 :
E N D
第二章 运算方法和运算器 一、数据和文字的表示 二、定点加法、减法运算 三、定点乘法运算 四、定点除法运算 五、逻辑运算 六、定点运算器的组成和结构
2.1 数据与文字的表示方法 -------------------------------------------------------------------------------- 2.1.1 数据格式 2.1.2 数的机器码表示 2.1.3 字符与字符串的表示方法 2.1.4 汉字的表示方法 2.1.5 校验码
2.1.1 数据格式 计算机中常用的数据表示格式有两种: 一是定点格式,二是浮点格式 定点格式容许的数值范围有限,但要求的处理硬件比较简单。 浮点格式容许的数值范围很大,但要求的处理硬件比较复杂。
1、定点表示法 定点格式:小数点位置固定的数。计算机中的定点数一般只采用纯整数或者纯小数形式,分别称为定点整数和定点小数。 问题:(1)n +1位纯小数或纯整数的表示范围?(最高位为符号位) (2)定点格式表示有什么缺点?
定点数x=x0x1x2…xn在定点机中表示如下(x0:符号位,0代表正号,1代表负号):定点数x=x0x1x2…xn在定点机中表示如下(x0:符号位,0代表正号,1代表负号): 纯小数的表示范围为(x0x1x2…xn各位均为0时最小;各位均为1时最大) 0≤|x|≤1-2-n(2.1) 纯整数的表示范围为 0≤|x|≤2n-1(2.2) X0 X1X2...Xn
目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。
2、浮点表示法 浮点格式:小数点位置不固定的数。把一个数的有效数字和数的表示范围在计算机中分别表示。 (1)浮点数格式 一个任意进制的数N可以写成: N = RE · M M:浮点数的尾数(mantissa),一般用定点小数表示 N:浮点数的阶码(exponent),一般用定点整数表示 R: 基数(radix),一般为2,8或16。 机器中,浮点数的格式如下: Es E1E2……Em Ms M1M2……Mn 阶符 阶码 数符 尾数
或: Es Ms E1E2……Em M1M2……Mn 阶符 数符 阶码 尾数 或: Ms E1E2……Em M1M2……Mn 数符 阶码 尾数 问题:.浮点数的表示精度和表示范围如何决定?
为便于软件移植,按照 IEEE754 的标准,32位浮点数和64位浮点数的标准格式为: 31 30 23 22 0 32位浮点数 S E M 63 62 52 51 0 64位浮点数 S E M E:阶码,采用移码方式来表示正负指数。采用这种方式时,将浮点数的指数真值e 变成阶码E 时,应将指数 e 加上一个固定的偏移值127(01111111),即 E=e+127.
一个规格化的32位浮点数x的真值可表示为 x=(-1)s×(1.M)×2E-127e=E-127(2.5) 一个规格化的64位浮点数x的真值为 x=(-1)s×(1.M)×2E-1023 e=E-1023 (2.6) (2)浮点数的规格化 当尾数的值不为0时,其绝对值应大于等于0.5 ,否则要以修改阶码同时左右移小数点的办法,使其变成这一要求的表示形式。
规格化规定: 如果阶码以2为基,则应满足: 1/2〈=|M|〈1 对于正数,规格化浮点数的尾数(补码)最高位是S1=1 对于负数,规格化浮点数的尾数(补码)最高位是S1=0 问题: 1 . 如何进行规格化? 修改阶码,左右移尾数
问题2:规格化浮点数为什么提高了数据的表示精度?问题2:规格化浮点数为什么提高了数据的表示精度? 充分利用了有效位数。 可以证明(下去自己证明)
(3)机器零 当一个浮点数的尾数为0,不论其阶码为何值;或阶码的值遇到它能表示的最小值还小时,不管其尾数为何值,计算机都把该浮点数看成零值,称机器零。 3、定点表示与浮点表示的比较 从以下两个方面: 数值表示范围 浮点数的运算比定点数的运算复杂 问题:在选择计算机中的数的表示方式时,应全面考虑哪些因素?
1.要表示的数的类型 2.可能遇到的数值范围 3.数值精确度 4.数据存储和处理所需要的硬件代价
3.十进制数串的表示方法 十进制数串在计算机内主要有两种表示形式: 1.字符串形式 字符串形式:一个字节存放一个十进制的数位或符号位。为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。 2.压缩的十进制数串形式 压缩的十进制数串形式:一个字节存放两个十进制的数位。它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。
用压缩的十进制数串表示一个数,每个数位占用半个字节,其值BCD码或数字符的ASCII码的低4位表示。用压缩的十进制数串表示一个数,每个数位占用半个字节,其值BCD码或数字符的ASCII码的低4位表示。 符号位也占半个字节并放在最低数字位之后,其值选用四位编码中的六种冗余状态中的有关值,如用12(c)表示正号用13(d)表示负号。 在这种表示中,规定数位加符号位之和必须为偶数,当和不为偶数时,应在最高数字位之前补一个0。例如 +123 和-12分别被表示成: 1 2 3 C 0 1 2 D 要指明一个压缩的十进制数串,也得给出它在主存中的首地址和数字位个数(不含符号位),又称位长,位长为0的数其值为0。
4. 自定义数据表示 在传统的计算机体系结构中,用指令本身来说明操作数据的类型。 自定义数据表示则用数据本身来说明数据类型。表示形式有两种,即标志符数据表示和描述符数据表示。
标志符数据表示要求对每一个数据都附加标志符,其格式如下: 标志符 数据 其中标志符指明后面的数据所具有的类型,如整数、浮点数、BCD数、字符串等。 标志符数据表示的优点:能简化指令系统,便于程序调试和查错。 缺点:数据区域占用的存储空间增加,并使指令执行的速度减慢。
描述符数据表示主要用来描述多维结构的数据类型,如向量、矩阵、记录等。其格式为:描述符数据表示主要用来描述多维结构的数据类型,如向量、矩阵、记录等。其格式为: 描述符标志位部分指明这是一个数据描述符;特征标记部分指明数据的各种特征;长度部分指明数组中元素个数;起始地址部分指明数据块的首地址。 描述符标志位 特征标记 数据块长度 数据块起始地址
标志符与描述符表示的区别是: (1)标志符与每个数据相连,二者合起来存放在一个存储单元,而描述符要和数据分开存放。 (2)描述符表示中,先访问描述符,后访问数据,至少增加一次访存。 (3)描述符是程序的一部分,而不是数据的一部分。
2.1.2数的机器码表示 机器数:计算机中表示的带符号的二进制数。把符号位和数字位一起编码来表示相应的数的各种表示方法。 机器数有四种表示方法即原码、补码、反码和移码。
1.原码表示法 原码表示法用“0”表示正号,用“1”表示负号, 有效值部分用二进制的绝对值表示。
定点小数: X 1>x≥0 [X]原 = 1-X=1+|X| 0≥x>-1 完成下列数的真 值到原码的转换 X1 = + 0.1011011 X2 = - 0.1011011 [X1]原=0.1011011 [X2] 原=1.1011011
对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式:对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式: [+0]原=0.000...0 [-0]原=1.000...0
原码小数的表示范围: • 最大值 :1- 2-n • 最小值:-(1- 2-n) 例:若二进制原码小数的位数分别是8、16位,求其该数表示的最大值、最小值及所能表示数的个数? 8位: 127/128,-127/128,255 16位: 32767/32768 , -32767/32768 , 65535
定点整数: X 2n>X≥0 [X]原 = 2n-X=2n+|X| 0≥X>-2n 完成下列数的真值到原码的转换 X1 = + 0 1011011 X2 = - 0 1011011 [X1] 原 =01011011 [X2] 原 =11011011
原码整数的表示范围: [+0]原=00000000 ; [-0]原=10000000 • 最大值 : 2n-1 • 最小值:-(2n-1) 例:若二进制的位数分别是8、16,求其表示的最大值、最小值及表示数的个数 8位: 127,-127,255 16位: 32767 , -32767 , 65535
原码特点: • 表示简单,易于同真值之间进行转换,实现乘除运算规则简单。 • 进行加减运算十分麻烦。
2.补码表示法 模:计量器具的容量,或称为模数。4位字长的机器表示的二进制整数为: 0000~1111 共16种状态,模为16= 24。 整数N位字长的模值为 2n,一位符号位的纯小数的模值为2。 补码的定义:正数的补码就是正数的本身,负数的补码是原负数加上模。
定点小数: X 1>x≥0 [x]补= 2+X=2-|X| 0 ≥ X≥-1 完成下列数的真值到补码的转换 X1 = + 0.1011011 X2 = - 0.1011011 [X1]补=01011011 [X2]补=10100101
定点整数: X 2n>X≥0 [x]补= 2n+1+X=2n+1-|X| 0≥X≥- 2n 完成下列数的真值到补码的转换 X1 = + 0 1011011 X2 = - 0 1011011 [X1]补=01011011 [X2]补=10100101
补码的表示范围: • n+1位纯整数: 2n -1~ -2n • n+1位纯小数: 1- 2-n ~ - 1 对于0,[+0]补=[-0]补=0.0000 注意,0的补码表示只有一种形式。
原码与补码之间的转换 • 原码求补码 正数 [X]补=[X]原 负数 符号除外,各位取反,末位加1 例:X= -01001001 [X]原=11001001 , [X]补=10110110+1=10110111 [X]补= 28 +X=100000000-1001001= 10110111 10 0 0 0 0 0 0 0 - 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1
3 反码表示法 正数的表示与原、补码相同,负数的补码符号位为1,数值位是将原码的数值按位取反,就得到该数的反码表示
定点小数: X 1> X ≥ 0 [X]反= (2- 2-n )+X 0 ≥ X > -1 X1=+0.1011011 , [X1] 反 =0.1011011 X2= -0.1011011 , [X2] 反 =1.0100100
定点整数: X 2n > X ≥ 0 [X]反= (2n+1 -1)+X 0 ≥ X > -2n X3=+1011011 , [X3] 反 =01011011 X4= -1011011 , [X4] 反 =10100100 对于0: [+0]反=00000000 ; [-0]反 =11111111
4.移码表示法 [X]移= 2n + X 2n >X≥-2n X1 = 0101 0101 [X1]补=0101 0101 [X1]移=1101 0101 X2 = -0101 0101 [X2]补=1010 1011 [X2]移=0010 1011
码制表示法小结 • [X]原、[X]反 、[X]补用“0”表示正号,用“1”表示负号; [X]移用“1”表示正号,用“0”表示负号。 • 如果X为正数,则[X]原=[X]反 =[X]补。 • 如果X为0,则 [X]补 、[X]移有唯一 编码, [X]原、[X]反 有两种编码。 • 移码与补码的形式相同,只是符号位相反。
上面的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。上面的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。 • 由于补码表示对加减法运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数用补码表示,补码存储,补码运算。也有些机器,数用原码进行存储和传送,运算时改用补码。 • 还有些机器在做加减法时用补码运算,在做乘除法时用原码运算。
[例5]设机器字长16位,定点表示,尾数15位,数符1位,问:[例5]设机器字长16位,定点表示,尾数15位,数符1位,问: (1)定点原码整数表示时,最大正数是多少?最小负数是多少? (2)定点原码小数表示时,最大正数是多少?最小负数是多少?; [解:] (1)定点原码整数表示 最大正数值=(215-1)10=(+32767)10 0 111 111 111 111 111 最小负数值=-(215-1)10=(-32767)10 1 111 111 111 111 111 (2)定点原码小数表示 最大正数值=(1-2-15)10=(+0.111...11)2 最小负数值=-(1-2-15)10=(-0.111..11)2
[例6]假设由S,E,M三个域组成的一个32位二进制字所表示的非零规格化浮点数x,真值表示为:[例6]假设由S,E,M三个域组成的一个32位二进制字所表示的非零规格化浮点数x,真值表示为: x=(-1)s×(1.M)×2E-128 问:它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少? [解:] (1)最大正数: 0 11 111 111 111 111 111 111 111 111 111 11 x=[1+(1-2-23)]×2127 (2)最小正数 : 0 00 000 000 000 000 000 000 000 000 000 00 x=1.0×2-128 (3)最小负数: 1 11 111 111 111 111 111 111 111 111 111 11 x=-[1+(1-2-23)]×2127 (4)最大负数: 1 00 000 000 000 000 000 000 000 000 000 00 x=-1.0×2-128
2.1.3 字符与字符串的表示方法 1.字符的表示方法 国际上普遍采用的字符系统是七单位的ASCII码(美国国家信息交换标准字符码,共128个元素。 其中95个编码,对应着计算机终端能敲入并且可以显示的95个字符,打印机设备也能打印这95个字符,另外的33个字符,其编码值为0—31和127,则不对应任何一个可以显示或打印的实际字符,它们被用作控制码,控制计算机某些外围设备的工作特性和某些计算机软件的运行情况。
2.字符串 字符串是指连续的一串字符,通常方式下,它们占用主存中连续的多个字节,每个字节存一个字符。 当主存字由2个或4个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的次序顺序存放字符串的内容。
2.1.4 汉字的表示方法 1.汉字的输入编码 为了能直接使用西文标准键盘把汉字输入到计算机,就必须为汉字设计相应的输入编码方法。当前采用的方法主要有以下三类: 数字编码:常用的是国标区位码,用数字串代表一个汉字输入。 拼音码 :拼音码是以汉字拼音为基础的输入方法。 字形编码:字形编码是用汉字的形状来进行的编码。
2.汉字内码 汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。 英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别, 汉字机内代码中两个字节的最高位均规定为“1”。
3.汉字字模码 字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。 根据汉字输出的要求不同,点阵的多少也不同。字模点阵的信息量很大,所占存储空间也很大。因此字模点阵只能用来构成汉字库,而不能用于机内存储。字库中存储了每个汉字的点阵代码。当显示输出或打印输出时才检索字库,输出字模点阵,得到字形。
汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同 用途的编码,不要混为一谈。
2.1.5 校验码 元件故障、噪声干扰等各种因素常常导致计算机在处理信息过程中会出现错误。 为了防止错误,可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。 通常的方法是,在每个字上添加一些校验位,用来确定字中出现错误的位置。
奇偶校验 设x=(x0x1…xn-1)是一个n位字,则奇校验位C定义为 C=x0⊕x1⊕…⊕xn-1 (2.15) 式中⊕代表按位加,表明只有当x中包含有奇数个1时,才使C=1,即C=0。 偶校验位C定义为 C=x0⊕x1⊕…⊕xn-1 (2.16) 即x中包含偶数个1时,才使C=0。
假设一个字x从部件 A 传送到部件 B。在源点 A,校验位C可用上面公式算出来,并合在一起将(x0x1…xn-1C)送到B。假设在B点真正接收到的是x=(x'0x'1…x'n-1C '),然后计算 F=x'0⊕x'1⊕…⊕x'n-1⊕C ' 若F=1,意味着收到的信息有错,若F=0,表明x字传送正确。奇偶校验可提供单个错误检测,但无法检测多个错误,更无法识别错误信息的位置。