版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 运算方法及运算器,2.1 数据的表示方法 2.2 二进制数据的编码及加减运算 2.3 定点二进制乘法运算 2.4 定点除法运算 2.5 浮点运算 2.6 运算器的基本部件 2.7 数据校验码,2.1 数据的表示方法,在计算机系统中,数据的类型有多种多样。如文件、图、表、树、阵列、队列、链表、栈、向量、串、实数、整数、布尔数以及字符等。 数据表示研究的是计算机硬件能够直接识别、可以被指令系统直接调用的那些数据类型。数据表示是数据类型中最常用、也是相对比较简单、用硬件实现相对比较容易的几种,如定点数(小数和整数)、逻辑数(布尔数)、浮点数(实数)、十进制数、字符、字符串、堆栈以及向量等。
2、本节主要介绍数值型数据和字符型数据的表示方法。,在计算机中,广泛采用的是仅用“0”和“1”两个基本符号组成的二进制码。这是因为: (1)二进制码在物理上最容易实现,即可以容易找到具有两个稳定状态且能方便地控制状态转换的物理器件,可以用两个状态分别表示二进制码的基本符号“0”和“1”; (2)用二进制码表示的二进制数,其编码、记数和算术运算规则简单,容易用数字电路实现,为提高计算机的运算速度和降低实现成本奠定了基础; (3)二进制码的两个基本符号“0”和“1”,能方便地与逻辑命题的“否”和“是”,或者称为“假”和“真”相对应,为计算机中的逻辑运算和程序中的逻辑判断提供便利条件。,2.1.1 数值
3、型数据的表示方法,数值型数据是用于表示数量大小的。在使用数值数据时,经常用到数值范围和数据精度两个概念。数值范围是指一种类型的数据所能表示的最大值和最小值;数据精度是指通常用实数所能给出的有效数字的位数。这两个概念是不同的。在计算机中,它们的值与用多少个二进制位表示某种类型的数据,以及对这些位进行何种编码有关。机器中的二进制数据有三种表示方式:定点数(包括定点小数和定点整数)、浮点数,还有用4位二进制表示一个十进制数位的压缩数字串。,定点数 小数点位置固定的数称为定点数。按小数点的位置可以分为定点小数和定点整数。 (1)定点小数 定点小数,是指小数点准确固定在数据某个位置上的小数,从实用角度看
4、,都把小数点固定在最高数据位的左边,小数点前边再设置一位符号位。按此规则,任何一个小数都可以被写成: N =NS.N-1N-2N-m,定点小数表示法主要用在早期的计算机中,它最节省硬件。随着计算机硬件成本的大幅度降低,现代的通用计算机都被设计成能处理与计算多种类型数值数据的计算机。这里主要是通过定点小数说明数值数据有不同的编码方案。当然也应指出,定点小数也被用来表示浮点数的尾数部分。,(2)定点整数 整数表示的数据的最小单位为1,可认为它是小数点定在数值最低位右边的一种数据。整数又被分成为带符号和不带符号的两类。对带符号的整数来说,符号位被安排在最高位,任何一个带符号的整数都可以被写成: N
5、=NSNn-1.N2N1N0,浮点数 早期的计算机系统只有定点数据表示。这种计算机系统的优点是硬件结构比较简单,但有以下三个明显的缺点: (1)编程困难。程序设计人员必须首先确定机器小数点的位置,并把所有参与运算的数据的小数点都对齐到这个位置上,然后计算机才能正确进行运算。也就是说,编程人员首先要把参与运算的数据扩大或缩小某一个倍数后送入机器中,等运算结果出来后再恢复到正确的数值。,(2)是可表示数的范围小。例如,一台字长为16位的计算机所能表示的整数的范围是-32768到32767,字长为32位的计算机所能表示的整数的范围是-231到231-1。从另一个角度看,为了能表示两个大小相差很大的数
6、据,需要有很长的机器字长。 (3)数据存储单元的利用率往往很低。例如,为了把小数点的位置确定在数据最高位之前,必须把所有参与运算的数据至少都除以这些数据中的最大数,只有这样才能把所有数据都化成纯小数,因此造成很多数据有大量的前置零,从而浪费了许多数据存储单元。,与定点数相反,浮点数是指小数点位置不固定的数据。通常用以下形式表示: N = M RE 其中,M(mantissa)被称为浮点数的尾数,R(radix)被称为阶码的基数,E(exponent)被称为浮点数的阶码。计算机中一般规定 R 为 2、8 或 16,是一个确定的常数,不需要在浮点数中明确表示出来。因此,要表示浮点数,一是要给出尾数
7、 M 的值,通常用定点小数形式表示,它决定了浮点数的数据精度,即可以给出的有效数字的位数。二是要给出阶码,通常用整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。浮点数也要有符号位。,在计算机中,浮点数通常被表示成如下格式: MS是尾数的符号位,即浮点数的符号位,安排在最高一位; E是阶码,紧跟在符号位之后,占用m位,其中包含一位阶码的符号位; M是尾数,在低位部分,占用n位。,按国际电子电气工程师协会IEEE754标准,规定常用的浮点数的格式为 符号 符号位 阶码 尾数 总位数 单精度浮点数 1 8 23 32 双精度浮点数 1 11 52 64 临时浮点数 1 15 6
8、4 80,十进制数的编码与运算 十进制数的每一个数位的基为10,但到了计算机内部,出于存储与计算方便的目的,必须采用二进制码对每个十进制数位进行编码,所需要的最少的二进制码的位数为 log 210,取整数为 4。4 位二进制码有 16 种不同的组合,怎样从中选择出 10 个组合来表示十进制数位的 0 9,有非常多的可行方案,下面介绍其中最常用的几种。,(1)有权码 权是指表示一个十进制数位的4位二进制码的每一位有确定的位权。一般用8421码,即4个二进制码位的权从高向低分别为8、4、2和1,使用二进制码的 0000、0001、1001 这10个组合,分别表示0到9这10个数。这种编码的优点是这
9、4位二进制码之间满足二进制的进位规则,而十进制数位之间则是十进制规则,因此这种编码被称为以二进制编码的十进制(binary coded decimal)数,简称BCD码。另一个优点是在数字符的 ASCII码与这种编码之间的转换方便,即取每个数字符的 ASCII码的低4位的值便直接得到该数字的BCD码,输入输出操作非常简便。,在计算机内实现 BCD码之间的算术运算要复杂一些,在某些情况下,需要对加法运算的结果进行修正。修正规则是: 如果两个8421码数相加之和等于或小于1001,即十进制的9,不需要修正,如例2.1; 例2.1:1 +7 0 0 0 1 + 0 1 1 1 1 0 0 0 1 +
10、7 =8 的运算结果是正确的,不必修正。,如果相加之和在10到15之间,一方面应向高位产生一个进位,本位还要进行加6 修正,进位是在进行加 6 修正时产生的,如例2.2; 例2.2:3 +9 0 0 1 1 + 1 0 0 1 1 0 0 0 1 + 0 1 1 0 1 0 1 1 1 8+9的结果也必须用加 6 修正,进位是在相加过程中产生的。,另外几种有权码,如 2421、5211、4311 码(如表 2.1 所示),也都是用 4 位有权二进制码表示一个十进制数位,但这 4 位二进制码之间并不符合二进制规则。这几种有权码的特性表现如下所述。当采用 2421、5211 和 4311 编码时,
11、任何两个十进制数位相加产生 10 或大于 10 的结果,相应的二进制码相加会向高一位产生进位,有利于实现逢十进位的记数和加法规则。任何两个相加之和等于 9 的十进制数的二进制码,互为反码,即满足十进制数按 9 互补的关系,有利于简化减法处理。,表2.1 4位有权码,(2)无权码 无权是指表示一位十进制数的4位二进制码的每一位没有确定的位权。在采用的无权码的一些方案中,早期用的比较多的是余3码(Excess-3 Code),它是把原二进制的每个代码都加0011值得到的,其主要优点是执行十进制数相加时,能正确地产生进位信号,而且还给减法运算带来了方便。采用余3码执行加法运算的规则是: 当两个余3码
12、相加不产生进位时,应从所得结果中减去 0011; 产生进位时,一方面应将进位信号送入高位余3码,本位还应执行加0011的修正操作,高位应执行减0011的修正操作。,例2.4,(1) (21)10+(75)10=(96)10 0101 0100 +1010 1000 1111 1100 -0011 0011 减3修正 1100 1001 结果为余3码,(2)(28)10+(56)10=(84)10 0101 1011 +1000 1001 1101 1 0100 十进制数位之间产生进位, 1110 -0011 + 0011 两个数位分别执行减3和加3修正 1011 0111,格雷码是另外一种常用
13、的二-十进制编码,它是使任何两个相邻的编码之间只有一个二进制位的状态不同,其余 3 个二进制位必须有相同状态,因此格雷码有多种编码方法。这种编码方法的好处是,从一个编码变到下一个相邻编码时,只有一位的状态发生变化,有利于得到更好的译码波形,在模拟数字与数字模拟转换的电路中得到更好的运行结果。格雷码又被称为循环码。用 4 个二进制位的格雷码表示 1 位十进制数的 10 个状态的方案很多。表 2.2给出余3码和一种格雷码编码值。,表2.2 4位无权码,(3)数字串在计算机内的表示与存储 人们习惯使用十进制数,而在计算机内,采用二进制表示和处理数据更方便。因此,在计算机输入和输出数据时,要进行十进制
14、到二进制和二进制到十进制的进制转换处理,这是多数应用环境中的实际情况。而在某些特定的应用领域中,如商业统计,其特点是运算简单而数据量很大,这样使输入输出过程中的进制转换所占的时间比例很大。从提高机器的运行效率考虑,也可以采用在计算机内部直接用十进制方式表示和处理数据,这要求计算机内部增加少量硬件线路。目前,大多数通用性较强的计算机,都能直接处理十进制形式表示的数值。采用十进制表示数据的另一个目的,是提高数据的表示范围和运算精度。,十进制数串在计算机内主要有两种表示形式。 字符串形式。 一个字节存放一个十进制的数位或符号位,存放的是ASCII码值。 例,+132的编码为十六进制的2B 31 33
15、 32,在主存中占4个字节。 在主存中,这样的一个十进制数占用连续的多个字节,故为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。对用这种方式表示的数据进行算术运算是很不方便的,用这种方式表示的十进制字符串,主要用在非数值计算的有关应用领域中。,压缩的十进制数串形式。 一个字节存放两个十进制的数位,它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。用压缩的十进制数串表示一个数,要占用主存连续的多个字节,每个数位占用半个字节(即 4 个二进制位),其值可用二-十进制编码(BCD 码,数字符的 ASCII码的低 4 位)表示,符号位也占用
16、半个字节并存放在最低数字位之后,其值选用 4 位编码的 6 种冗余状态中的有关值,如用 1100 表示正号,用 1101 表示负号。在这种表示中,规定十进制数值的位数加符号位之和必须为偶数,当其和不为偶数时,应在最高数字位之前补一个 0,此时,表示一个数要占用该偶数值位的一半那么多个字节。,例如:+132 被表示成 13 2C,-12被表示成 01 2D,各占两个字节。要指明一个压缩的十进制数串,也需要给出它在主存中的首地址和它的数字位个数(不含符号位),又称位长,位长为 0 的数其值为 0。压缩的十进制数串表示方法的优点是位长可变,许多机器中规定该长度从 0 到 31,有的可能更长。,2.1
17、.2 字符数据的表示方法,字符数据是指字符、字符串、图形符号和汉字等各种数据。字符是计算机中使用最多的信息形式之一,是人与计算机通信、交互作用的重要媒介。字符数据一般不用来表示数值的大小,因此又被称为非数值数据。在计算机中,要为每个字符指定一个确定的编码,作为识别和使用这些字符的依据。这些编码的值,是用一定位数的二进制码的两个基本符号“1”和“0”进行编码给出的。,1.ASCII码和EBCDIC码 在计算机中使用得最多的、最普遍的是ASCII(American national Standard Code for Information Interchange,用于信息交换的美国标准代码)字符
18、编码,如表2.3所示。,表2.3 ASCII编码表,从表2.3中可以看到:每个字符是用7位二进制码表示的,其排列次序为b6b5b4b3b2b1b0,在表中的b6b5b4为高位部分,b3b2b1b0为低位部分。 ASCII字符编码是由128个字符组成的字符集,包括10个十进制数字(09)、52个英文大写和小写字母(AZ,az)、34个专用符号和32个控制符号。其中编码值031不对应任何可印刷(或称有字形)字符,通常称它们为控制字符,用于通信中的通信控制或对计算机设备的功能控制。编码值为 32 的是空格(或间隔)字符SP。编码值为127的是删除控制DEL码。其余的94个字符称为可印刷字符,有人把空
19、格也计入可印刷字符时,则称有95个可印刷字符。,用7位二进制表示一个字符的ASCII码简称为ASCII-7码,一个字符在计算机内实际上用 8 位表示。正常情况下,最高一位 b7为“0”。在需要奇偶校验时,这一位可用于存放奇偶校验位的值,此时称这一位为校验位。 ASCII-7码中有如下两个编码规律: 字符09这10个数字符的高3位编码为011,低4位为00001001。当去掉高3位的值时,低4位正好是二进制形式的09。这既满足正常的排序关系,又有利于完成ASCII码与二进制码之间的转换。, 英文字母的编码值满足正常的字母排序关系,且大、小写英文字母编码的对应关系相当简便,差别仅表现在b5一位的值
20、为0或1,有利于大、小写字母之间的编码变换。 另有一种字符编码,是主要用在 IBM 计算机中的 EBCDIC(Extended Binary Coded Decimal Interchange Code)编码。它采用 8 位编码,有 256 个编码状态,但只选用其中一部分。0 9 这 10 个数字字符的高 4 位编码为 1111,低 4 位仍为 0000 1001。大小写英文字母的编码同样满足正常的排序要求,而且有简单的对应关系,即同一个字母的大小写的编码值只有最高的第二位的值不同,易于识别与转换。,字符串 随着计算机在文字处理与信息管理中的广泛应用,字符串已成为最常用的数据类型之一。 字符串
21、是指连续的一串字符,通常方式下,它们在主存中占用连续的多个字节空间,每个字节存一个字符代码。当主存字由 2 个或 4 个字节组成时,在同一个主存字中,既有按从低位字节到高位字节的顺序存放字符串内容的,也有按从高位字节到低位字节的顺序存放字符串内容的。这两种存放方式都是常用方式,不同的计算机可以选用其中任何一种。例如,字符串 IF A B THEN READ(C)(最后一个字符是空格)就可以有两种不同的存放方式如图2.1 所示。,中文的编码表示 汉字处理技术是我国计算机推广工作中必须要解决的问题,与西文字符比较,汉字数量大,字形复杂,同音字多,这就给汉字在计算机内部的存储、传输、交换、输入和输出
22、等带来了一系列的问题。为了能直接使用西文标准键盘输入汉字,必须为汉字设计相应的编码,以适应计算机处理汉字的需要。 下面介绍三种汉字编码方法。,(1)国标码 1980年我国颁布了信息交换用汉字编码字符集基本集代号为(GB231280),是国家规定的用于汉字信息处理使用的代码依据,这种编码称为国标码。在国标码的字符集中共收录了6763个常用汉字和682个图形符号,其中一级汉字3755个,以汉语拼音为序排列,二级汉字3008个,以偏旁部首进行排列。,(2)机内码 汉字的机内码是计算机系统内部对汉字进行存储、处理和传输统一使用的代码,又称为汉字内码。机内码是根据GB2312-80进行编码的。在计算机中
23、,通常用两个字节表示一个汉字。由于汉字数量多,一般用2个字节来存放汉字的内码,其中一个字节用于表示汉字的区号,另一字节用于表示汉字的位号,但是这种简单的表示方法不能区分汉字字符与英文字符。为了在计算机内区分汉字字符和英文字符,以免造成混乱,一般将英文字符的机内码用一个字节来存放其ASCII码,并将其最高位置“0”,而汉字机内码中两个字节的最高位均置“1”。,(3)汉字的字形码 汉字的机内码只能表示汉字在码表中的位置编码,如果要输出汉字,仅仅知道汉字在码表中的位置编码是不够的,还必须知道汉字的字形。为了在计算机中输出汉字,每一个汉字的字形信息都必须预先存放在计算机内,例如GB2312国标汉字字符
24、集的所有字符的形状描述信息集合在一起,称为字形信息库,简称字库。通常分为点阵字库和矢量字库。目前汉字字形的产生方式大多是用点阵方式形成汉字,即是用点阵表示的汉字字形代码。根据汉字输出精度的要求,有不同密度点阵。,2.2 二进制数据的编码及加减运算,二进制数值型数据,包括二进制表示的定点(小数、整数)和浮点数。这里讲的二进制数据编码方法,主要是如何能方便统一地表示二进制数据正数、零和负数,并且尽可能地有利于简化对它们实现算术运算所用到的规则。很容易想到,数据符号的正与负,可用一位二进制的“0”和“1”两个状态加以表示,数据的数值用多个二进制位表示。最常用的二进制数据编码方法有原码表示、补码表示、
25、反码表示和移码表示四种。用定点小数引出二进制数值数据的 4 种编码(原码、补码、反码和移码)方法是最方便的,所以在下面的介绍中均以定点小数为例,之后再给出定点整数的4 种编码方法。,2.2.1 四种编码及其加减运算,原码表示法 机器数的最高位为符号位,0表示正数,1表示负数,数值位跟随其后,并以绝对值的形式给出。这是与真值最接近的一种表示形式。 下面给出原码的定义: 即X原=符号位+|X|。,例 2.5 X=+0.1001, X原=0.1001 X=-0.1001, X原=1.1001 由于定点小数的小数点位置已默认在符号位之后,书写时也可将其省略。如 X=+0.1011, X原=01011;
26、 X=-0.1011, X原=11011。 零的真值有 + 0和 - 0两种表示形式,在原码中,真值零有两种不同的表示形式: + 0原= 0.0000 ,- 0原= 1.0000。,补码的表示法 机器数的最高位为符号位,0表示正数,1表示负数,数值位跟随其后。补码的定义如下: 即X补=2*符号位+X (mod 2)。此处2是十进制数,即位二进制的10。 计算机中运算器、寄存器、计数器等都有一定的位数,不可能容纳无限大的任意数,当运算结果超出实际能表示的最大范围时,就会产生溢出,所产生的溢出量就是模(Module)。,例2.6 X=+0.1001, X补=0.1001; X=-0.1001, X
27、补=2+X=2+(-0.1001)=1. 0111 在补码中,真值零的表示形式是唯一的,即 0补=-0补=0.0000,当补码加法运算的结果不超出机器范围时,可得出以下重要结论: (1)参加运算的两个数均用补码表示; (2)符号位与数值位一起参与运算; (3)X + Y补= X补+ Y补 mod 2,即两个数的补码直接相加; (4)运算结果仍为补码。,例2.7 设X=0.1001,Y=0.0100,两个数均为正数: X+Y补=0.1001+0.0100补=0.1101补=0.1101 X补+Y补=0.1001+0.0100=0.1101 即 X+Y补=X补+Y补=0.1101 例2.8 设X=
28、0.1001,Y=-0.0100,X为正,Y为负: X+Y补=0.1001+(-0.0100)补=0.0101 X+Y补=0.1001-0.0100补=0.0101补=0.0101 X补+Y补=0.1001+-0.0100补=0.1001+(2-0.0100)=2+0.0101=0.0101mod 2 即X+Y补=X补+Y补=0.0101,例2.9 设X=-0.1001,Y=0.0100,X为负,Y为正: X+Y补=-0.1001+0.0100补=-0.0101补=1.1011 X补+Y补=-0.1001补+0.0100补=1.0111+0.0100=1.1011 即X+Y补=X补+Y补=1.
29、1011 例2.10 设X=-0.1001,Y=-0.0100,X,Y均为负数: X+Y补=-0.1001+(-0.0100)补=-0.1101补=1.0011 X补+Y补=1.0111+1.1100=10+1.0011=1.0011 mod 2 即:X+Y补=X补+Y补=1.0011,以上四个例子包括了X、Y各为正负数的各种组合,证实了当运算结果不超出机器所能表示的范围时,X+Y补=X补+Y补。 根据补码加法公式可推出: X-Y补=X+(-Y)补=X补+-Y补 只要求得-Y补,就可以把减法变为加法。,当补码减法运算的结果不超出机器范围时,可得出以下重要结论: (1)参加运算的两个数均用补码表
30、示; (2)符号位与数值位一起参与运算; (3)X - Y补= X补+ -Y补 mod 2,即被减数与减数的机器负数相加; (4)运算结果仍为补码。,反码表示法 机器码的最高位为符号位,0表示正数,1表示负数,数值位跟随其后。 反码的定义: 即:X反=(2-2)*符号位+X mod(2-2)。其中,n为小数点后的有效位数。当X为正数时,X反= X原;当X为负数时,保持X原符号位不变,而将数值部分取反。,例2.11 X=+0.0010 ,则X反=0.0010; X=-0.0010 ,X反=2-2+(-0.0010)=1.1101 例2. 12 X=0.1001, Y=-0.0101,则有: X反
31、=0.1001, Y反=1.1010 X+Y反=X反+Y反=0.1001+1.1010反=10.0011 最高位有进位1,所以1要丢掉,并要在最低位加1。,整数的原、反、补码 设整数X=XnX2X1X0,其中Xn为符号位。下面给出整数的3种编码的定义。 (1) 原码 X原= X0X2n 2n-X=2n+|X| -2nX0 (2) 补码 X补= X0X2n 2n+1+X=2n+1-|X|-2nX0 (3) 反码 X反= X0X2n (2n+1-1)+X-2nX0,原码、补码和反码之间的相互转换 原码、补码和反码三种编码既有相同点,又各自不同,主要体现在以下四点: 正数的三种编码都等于真值本身,而
32、负数各不相同。 符号位都放在最高位,补码和反码的符号位可作为数值位的一部分看待,与数值位一起参加运算,但是原码的符号位不允许和数值位一样看待,需分开处理。 真值零的原码和反码都有两种不同的表示形式,而补码的表示形式只有一种。 从表示范围来看,原码和反码的表示范围是对称的,而补码负数表示范围比正数表示范围多了一个数,表示定点小数时的最负的数是-1,表示定点整数时最负的数是-2n。,(1)将反码表示的数据转换成原码。转换方法:负数的符号位保持不变,数值部分逐位取反。 例 2.13 设X反= 0.1001,则X原= 0.1001,真值 X = + 0.1001;设X反= 1.0011,则X原= 1.
33、1100,真值 X = - 0.1100。 (2)将补码表示的数据转换成原码。转换方法:利用互补的道理对补码再次求补即得到 X 的原码。 例 2.14 设X补= 0.1011,则X原= 0.1011,真值 X = + 0.1011;设X补= 1.1011,则 X原= 1.0101,真值 X = -0.0101。,(3)将原码表示的数据转换成补码。转换方法:负数的符号位保持不变,数值部分逐位取反后,最低位加1便得到负数的补码。即 X补= X反+ 2- n 因为反码与补码的公式分别是: X反= 2- 2- n+ X X补= 2+ X 真值与补码或反码之间的转换通常通过原码实现,如果已经熟练掌握转换
34、方法的话,可以直接完成真值与补码或反码之间的转换。,移码表示法 移码通常用于表示浮点数的阶码。由于阶码是个n+1位的整数,所以假定定点整数移码形式为 Xn X2X1X0时,移码的定义是: X移= 2n+ X - 2n X 2n 当正数 X = + 10001 时,X移= 1.10001;当负数 X = - 10001 时,X移= 25- 10001= 0.01111。移码中的圆点不是小数点,而是表示左边一位是符号位。显然,移码中符号位Xn表示的规律与原码、补码、反码相反。,移码具有以下特点: (1)最高位为符号位,1表示正号,0表示负号。 (2)数据 0有惟一的编码,即+ 0移= - 0移=
35、100。当数据小于机器能表示的最小数时(移码0-2n),称为机器零,将阶码(移码)置为 000,且不管尾数值大小如何,都按浮点数下溢处理。 (3)在计算机中,移码(阶码)只执行加减法运算,且需要对得到的结果加以修正,修正量为 2n,即要对结果的符号位取反,得到X移。,在上面所述的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。由于补码表示对加减运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数据用补码表示、补码存储、补码运算;也有些机器,数据用原码进行存储和传送,运算时改用补码;还有些机器在做加减法时用补码进行运算,在做乘除法时用原码进行运算。,2.2.2 加减运算的溢
36、出判断,当运算结果超出机器数所能表示的范围时,称为溢出。如在定点小数机器中,数的原码表示范围为|X|1,在运算过程中如出现大于1的现象,就是溢出。 显然,两个异号数相加或两个同号数相减,其结果是不会溢出的。仅当两个同号数相加或者两个异号数相减时,才有可能发生溢出的情况,一旦溢出,运算结果就不正确了,因此必须将溢出的情况检查出来。 下面以定点数二进制补码和移码加法运算为例来说明加减运算的溢出判断:,补码加减运算的溢出判断 例2.15 :5位二进制补码数的加法运算,最高位为符号位,数值位4位。 (1)定点正数 8+6=14 (-8)+(-5)= -13 12+6=18 0 1 0 0 0 1 1
37、0 0 0 0 1 1 0 0 + 0 0 1 1 0 + 1 1 0 1 1 + 0 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 (-10)+(-8)= -18 1 0 1 1 0 + 1 1 0 0 0 1 0 1 1 1 0,在例2.15(1)中,和得出正确结果,是两个正数相加,结果为负,显然不正确。是两个负数相加,结果为正,也不正确。,(2)定点小数 0.1010+0.01010.1011+0.01010.1011+(-0.0101) 0.1010 0.1011 0.1011 + 0.0101 +0.0101 +1.1011 0.1111 1.000
38、0 10.0110 -0.1010+(-0.1001) 1.0110 +1.0111 10.1101,在例2.15(2)中,和得出正确结果,是两个正数相加,结果为负,显然不正确。是两个负数相加,结果为正,也不正确。 之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。,为了判断“溢出”是否发生,可采用两种检测方法。 (1)双符号位法 也称为变形补码法,正数的双符号位为00,负数的双符号位为11。变形补码的加法公式如下: X变形补+ Y变形补= X + Y变形补(mod 4) 为了得到两个数变
39、形补码之和等于两个数和的变形补码,同样必须:两个符号位都看做数码一样参加运算;两个数进行以 4为模的加法,即最高符号位上产生的进位要丢掉。,采用变形补码后,任何小于1的正数,两个符号位都是“0”,即 00.X1X2 Xn;任何大于- 1的负数,两个符号位都是“1”,即 11.X1X2Xn。如果两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。这是因为两个绝对值小于 1的数相加,其结果不会大于或等于 2,所以最高位永远表示结果的正确符号。,例 2.16 X = 0.1001,Y = 0.1101,求 X + Y。 X变形补= 00.1001,Y变形补= 00.1101
40、X + Y变形补=X变形补+ Y变形补=00.1001+00.1101= 01 .0110 两个符号位出现“01”,表示已溢出,且结果大于+1。 例 2.17 X = - 0.1101,Y = - 0.0110,求 X+Y。 X补= 1.0011,Y补= 1.1010 ,X变形补=11.0011,Y变形补=11.1010 X + Y变形补=X变形补+ Y变形补=11.0011+11.1010=10 .1101 两个符号位出现“10”,表示已溢出,且结果小于-1。,(2)单符号位法 当任意符号两个数相加时,如果C=Cf,运算结果正确,其中C为数值最高位的进位,Cf为符号位的进位。如果CCf,则为
41、溢出,所以溢出条件=CCf。其逻辑电路如图2.2。 图2.2 单符号位法判溢出的逻辑图,移码加减运算的溢出判断 移码加减运算的溢出判断一般也使用双符号位法,但跟补码的双符号位法不同。规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是结果的最高符号位为1,此时,当低位符号位为0时,表明结果上溢,为1时,表明结果下溢。当最高符号位为0时,表明没有溢出,低位符号位为1,表明结果为正,为0时,表明结果为负。,例 2.18 X=010,Y=110 X+Y移=X移+Y补=01010+00110=10000,结果上溢。 X-Y移=X移+-Y补=01010+11010=00100,结果正确,
42、即X-Y为-4。 例 2.19 X=-100,Y=-110 X+Y移=X移+Y补=00100+11010=11110,结果下溢。 X-Y移=X移+-Y补=00100+00110=01010,结果正确,即X-Y为2。,2.3 定点二进制乘法运算,乘除法运算是计算机的基本运算之一。由于乘除法运算需要更多的硬件支持,并不是所有的计算机都配置这种硬件,但是所有的计算机都能做乘除法运算。实现乘除法运算大致有三种方案: 采用软件实现乘除法运算。使用原有的运算器硬件,运用基本运算指令编写实现乘、除法运算的子程序。 在原有运算器的基础上增加一些硬件设备来实现乘、除法操作。 设置专用的乘、除法器,使运算处理设备
43、专用化,加快运算速度。,2.3.1 原码一位乘法,在定点计算机中,完成两个原码表示的数相乘是十分方便的。乘积的符号由两个数的符号位按位相异或得到,而乘积的数值部分则是两个正数(被乘数和乘数的绝对值)相乘之积。 即两个原码数相乘,乘积的符号为两数符号位的异或值,数值为两数绝对值之积。 假设被乘数X原=X0 X1X2 Xn,乘数Y原= Y0.Y1Y2 Yn,则 XY原 = X原 Y原 =(X0Y0)|(X1X2Xn)( Y1Y2Yn) 其中|表示把符号位和数值部分邻接起来。,人工计算X*Y,X = 0.1101,Y = 0.1011 0. 1 1 0 1 0. 1 0 1 1 1 1 0 1 1
44、1 0 1 0 0 0 0 1 1 0 1 0. 1 0 0 0 1 1 1 1 即X*Y=0.10001111,上述运算过程与十进制乘法类似:从乘数Y的最低位开始,若这一位为“1”,则将被乘数 X 写下;若这一位为“0”,则写下全 0。然后再对乘数 Y 的高一位进行乘法运算,其规则同上,不过这一位乘数的权与最低位乘数的权不一样,因此被乘数 X要左移一位。依此类推,直到乘数各位乘完为止。最后将它们加起来,便得到最后乘积Z。 我们所习惯的人工算法对机器并不完全适用,不能直接照搬。原因在于两个 n 位数相乘,乘积可能为 2n 位,用被乘数左移的方法,则需要 2n 位长的加法器,不仅不适于定点机的形
45、式,而且还必须设法将 n 个位积一次相加起来。为了简化结构,机器通常只有 n位长,并且只有两个操作数相加的加法器。为此,必须修改上述乘法的实现方法。,机器的原码一位乘法做了如下修改: 一般机器不能完成多个数据相加,只能同时进行两个数相加,因此得到一个相加数(相加数只有两种情况:0或被乘数)后与上次部分积相加。 观察计算过程很容易发现,在求本次部分积时,前一次部分积的最低位,不再参与运算,因此可将其右移一位,相加数可直送而不必偏移。 乘积的高位放在部分积寄存器中,低位放在乘数寄存器中,两个寄存器同时移位。由乘数寄存器的最低位来控制相加数。,例2.21 设X=0.1101,Y=0.1011,求X*
46、Y,部分积 乘数 被乘数: 1101 00 0000 1 0 1 1 +X 00 1101 00 1101 右移1位 00 0110 1 1 0 1 1 丢失 个位运算 +X 00 1101 01 0011 右移1位 00 1001 1 1 1 0 1 丢失 十位运算 +0 00 0000 00 1001 右移1位 00 0100 1 1 1 1 0 丢失 百位运算 +X 00 1101 01 0001 右移1位 00 1000 1 1 1 1 1 丢失 千位运算 乘积高位 乘积低位,X0 Y0 = 0 X*Y 原=0.10001111,+,原码一位乘法的控制流程图如图2.3所示。,图2.3原
47、码一位乘法流程图,图2.4为实现原码一位乘法的硬件逻辑原理图。有三个寄存器,其中:R0寄存器存放部分积Z,在乘法开始前R0初始状态应清零,保证Z0=0;R1寄存器存放乘数Y;R2寄存器存放被乘数X。由于乘法开始时先从乘数的最低位Yn开始,以后则使用Yn - 1,Yn - 2,Y1,因此乘数寄存器R1应当具有右移功能的移位寄存器。假定加法器不具备右移功能,那么由于部分积需要右移,R0也应当是具有右移功能的移位寄存器。,图2.4原码一位乘法的硬件逻辑原理图,除了需要三个寄存器以外,还需一个加法器和一个计数器,加法器完成部分积与被乘数的累加,计数器对移位的次数进行计数,以便判断乘法运算是否结束。乘法
48、开始时,“启动”信号使控制触发器 CX置“1”,于是开启时序脉冲 T。计数器的初值置为n。当乘数寄存器 R1最末位为“1”时,部分积 Z 和被乘数 X 在加法器中相加,其结果输出至 R0的输入端,一旦打入控制脉冲 T,控制信号 LDR0使部分积右移 1位,与此同时,乘数寄存器 R1也在控制信号 LDR1作用下右移一位,且计数器 i计数 1 次。当计数器 i= 0时,关闭时序脉冲 T,乘法操作结束。如果将 R0和 R1连接起来,乘法结束时乘积的高 n 位部分在 R0,低 n 位部分在 R1,R1中原来的乘数Y由于右移而全部丢失,乘积为2 n + 1位,其中包括1位符号位。,2.3.2 补码一位乘
49、法,原码一位乘法的主要问题是符号位不能参加运算,而是单独用一个异或门产生乘积的符号位。所以,很自然地会提出能否让符号数字化后也参加乘法运算,补码乘法就可以实现符号位直接参加运算。而有的机器中,数据以补码形式存放,采用补码乘法后可直接对机器中存储的数据进行乘法运算,不需要进行编码形式的转换。 为了得到补码一位乘法的算法,先从补码和真值的转换公式开始。,补码与真值的转换关系 X= - X0 + 0. X1 X2 Xn,补码的右移 在补码运算的机器中,不论数的正负,连同符号位将数右移一位,并保持符号位不变,相当于乘1/2(或除2)。其证明如下: 设X补 =X0.X1 X2 Xn,= - X0 + 0
50、. X0 X1 X2 Xn X/2补 =X0. X0 X1 X2 Xn,补码一位乘法 设被乘数X补=X0.X1X2Xn,乘数Y补=Y0.Y1Y2Yn,则有: 即XY补= X补 Y补,证明如下: (1)被乘数 X 符号任意,乘数 Y 符号为正。根据补码定义,可得 X补= 2 + X = 2n+1+ X(mod 2) Y补= Y 所以X补Y补= 2n+1 Y + XY = 2(Y1Y2 Yn)+ XY 其中 Y1Y2 Yn是大于 0的正整数。根据模运算性质有 2(Y1Y2 Yn)= 2(mod 2) 所以X补Y补= 2 + XY = XY补(mod 2) 即X补Y补= XY补(mod 2),(2)
51、被乘数 X 符号任意,乘数 Y 符号为负。 X补= X0.X1X2 Xn Y补= 1.Y1Y2 Y= 2 + Y(mod 2) 因为Y = Y补- 2 = 0.Y1Y2 Yn- 1 所以XY = X(0.Y1Y2 Yn)- X XY补= X(0.Y1Y2 Yn)补+ - X补 又(0.Y1Y2 Yn) 0 X(0.Y1Y2 Yn)补= X补(0.Y1Y2 Yn) 所以XY补= X补(0.Y1Y2 Yn)补+ - X补,(3)被乘数 X 和乘数 Y 符号任意。将(1)(2)两种情况综合起来,得到补码乘法的统一算式,即 XY补 =X补(0.Y1Y2 Yn)补- X补 Y0 = X补(- Y0+ 0
52、.Y1Y2 Yn),为了推导出逻辑实现的分步算法,将上式展开得到各项部分积累加的形式: XY补= X补- Y0+ Y12-1+ Y22-2+ + Yn2- n = X补- Y0+ (Y1- Y12-1)+ (Y22-1- Y22-2)+ +(Yn2-(n-1)- Yn2- n) = X补(Y1- Y0)+ (Y2- Y1)2-1+ +(Yn- Yn-1)2-(n-1)+ (0 - Yn)2- n,式中 Yn + 1是增设的附加位,初始值为 0。上式为部分积累加的形式。若定义Z0补为初始部分积,Z1补Zn补依次为各步求得的累加并右移后的部分积,则上式可改写为接近于分步运算逻辑实现的递推关系: Z
53、0补= 0 Z1补= 2-1Z0补+ (Yn+1- Yn)X补 Z2补= 2-1Z1补+ (Yn- Yn-1)X补 Zn补= 2-1Zn-1补+ (Y2- Y1)X补,这种根据相邻两位比较结果决定运算操作的方法称为“比较法”,也称 Booth算法。开始时,部分积为 0,即Z0补= 0,然后每一步都是在前次部分积的基础上,由(Yi+ 1- Yi)(i= 0,1,2,n)决定对X补的操作,再右移一位,得到新的部分积。如此重复 n + 1步,最后一步不移位,便得到XY补。,实现这种补码乘法规则时,在乘数最末位 Yn后面要增加一位补充位 Yn + 1。开始时 Yn + 1= 0,由 YnYn + 1判
54、断第一步该怎么操作;然后再由 Yn - 1Yn判断第二步该怎么操作。因为每做一步要右移一位,故做完第一步后 Yn - 1Yn正好移到原来 YnYn + 1的位置上。依此类推,所以每步都用 YnYn + 1位置进行判断,故 YnYn + 1两位称为判断位。 如果判断位 YnYn + 1= 01,则 Yi+ 1- Yi= 1,做加X补操作。如果判断位 YnYn + 1= 10,则 Yi+ 1- Yi= - 1,做减法,即做加- X补操作。如果判断位 YnYn + 1= 11或 00,则 Yi+ 1- Yi= 0,Zi加 0,即保持不变。,归纳布斯公式运算规则如下: 乘数补码末位补一个0 Yi+1Y
55、i =00或11,部分积加0,右移一位 Yi+1Yi =10,部分积加X补 ,右移一位 Yi+1Yi =01,部分积加-X补 ,右移一位 这样重复进行 n + 1 步,但最后一步不移位。包括一位符号位,所得乘积为2n + 1位,其中 n 为数值位数。,例2.22 X= - 0.1101,Y= 0.1011,用补码一位乘求X*Y。 解:X补 =11.0011, Y补 =0.1011,-X补 =00.1101,部 分 积 乘 数 注 释 0 0 0 0 0 0 0. 1 0 1 1 0 01,加-X补 + 0 0 1 1 0 1,0 0 1 1 0 1 0 0 0 1 1 0 1 0 1 0 1
56、1 11,加0 + 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 10,加X补 + 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 0 1 0 1 0 01,加-X补 + 0 0 1 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 10,加X补,0 0 0 1 0 0 0 0 0 1 0 1 + 1 1 0 0 1 1 1 1 0 1 1 1 0 0 0 1 结果: X*Y补=1.01110001 X*Y = - 0.10001111,2.3.3 原码两位乘法,根据乘数每两位的取值
57、情况,一次求出对应于该两位的部分积。此时,只需要增加少量逻辑电路,就可使乘法速度提高一倍。 两位乘数有以下四种组合: 00相当于0*X。部分积右移2位 01相当于1*X。部分积+X,右移2位 10相当于2*X。部分积+2X,右移2位 11相当于3*X。部分积+3X,右移2位,+3X一般不能一次完成,解决方法是:用4X X来代替+3X,本次运算 X,4X留到下一步执行,因为部分积已经右移了两位,到了下一步就变成了+X。 原码两位乘所需要的硬件支持是加一个触发器C来记录是否欠一个4X,如果欠下一个4X,则C=1,否则C=0 。 因此实际操作用Yi-1、Yi、C三位来控制,运算规则如表2.4所示。表
58、2.4中Zi为部分积。,表2.4 原码两位乘法规则,例2.23 X = 0.100111,Y= 0.100111用原码两位乘计算X*Y 解: -X补= 1.011001,部 分 积 乘 数 欠位,0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 + -X补 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 0 0 1 1 + 2X 0 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 + 2X 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0,X0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心肌炎护理中的静脉输液管理与护理要点
- 水痘患儿的日常活动管理
- 疼痛护理中的疼痛缓解
- 生态沟渠施工设计方案
- 护理妆容健康妆容理念
- 2026年长护险待遇按护理服务实际天数计发规则
- 2026年现代化首都都市圈空间协同规划核心要点解析
- 2026年工厂数字化设计与数字孪生交付
- 2026年智慧交通边缘RSU车路协同信号优先绿波通行
- 2026年虚拟电厂参与电力交易:充电运营商新利润增长点
- 地下车库消防系统施工方案
- 山东港口集团招聘笔试题
- 螺蛳粉行业技术环境分析报告
- 实物期权理论视角下汽车产业并购的价值评估与策略优化研究
- 2024北师大版七年级生物上册期末复习全册必背知识清单
- (新教材)2026年人教版一年级下册数学 第二单元 20以内的退位减法 整 理和复习 课件
- 新型能源体系建设形势和展望-
- 2025年公务员多省联考《申论》(云南县乡卷)题及参考答案(网友回忆版)
- (完整)24个专业105个病种中医临床路径
- 高职院校学生学业规划模板
- 机械制造技术题库含参考答案
评论
0/150
提交评论