版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章绪论1.1计算机的发展史1.2计算机的基本组成1.3计算机的层次概念1.4计算机的分类及性能描述
1.1计算机的发展史
1.1.1发展历史
1.第0代:机械计算器
2.第1代:电子管计算机(1945-1955年)
3.第2代:晶体管计算机(1955-1965年)
4.第3代:集成电路计算机(1965-1980年)
5.第4代:超大规模集成电路计算机(1980年-)
6.第5代:高性能智能计算机1.1.2摩尔定律
1.摩尔定律的由来
2.摩尔定律的未来
1.2计算机的基本组成
1.2.1硬件系统
1.硬件组成
图1.1所示的计算机结构是在1946年由冯·诺依曼提出的。在此硬件结构的基础上,提出了计算机是依据存储程序、执行程序并实现控制的方式工作的,这就是冯·诺依曼计算机的设计思想。图1.1早期计算机(硬件)的组成
2.冯·诺依曼计算机的特点
冯·诺依曼计算机工作的基本思想,就是将计算机要处理的问题用指令编成程序,并将程序存放在存储器中,在控制器的控制下,从存储器中逐条取出指令并执行,通过执行程序最终解决计算机所要处理的问题。尽管经历了几十年的发展,也出现了新的设计思想,但冯·诺依曼的这种设计思想直到今天仍然还在广泛地应用。1.2.2软件系统
1.系统软件
系统软件是一系列保障计算机很好运行的程序集合。它们的功能是对系统的各种资源(硬件和软件)进行管理和调度,使计算机能有条不紊地工作,为用户提供有效的服务,充分发挥其效能。系统软件包括:
(1)操作系统。
(2)语言处理程序。
(3)通用程序。
(4)各种服务支持软件。
2.应用软件
应用软件是指用户在各自的应用中,为解决自己的任务而编写的程序。这是一类直接以用户的需求为目标的程序。由于用户的多样性(各行各业、各种部门)和用户需求的多样
性,使得这类软件也具有多样性。例如,用于科学计算、信息管理、过程控制、武器装备等方面的应用软件。
1.3计算机的层次概念
1.3.1计算机系统的层次结构
计算机系统的层次结构可用图1.2来表示。图1.2计算机系统的层次结构1.3.2计算机系统结构、组成与实现
1.计算机系统结构
今天的计算机系统结构所指的计算机的属性主要包括:
·
数据的表示形式;
·
寻址方式;
·
内部寄存器组;
·
指令集;
·
中断系统;
·
处理器工作状态及其切换;
·
存储系统;
·
输入/输出结构;
·
信息保护及特权;
·
高性能设计等。
2.计算机组成
计算机组成的设计主要包括:
·
数据通路的宽度;
·
专用部件的设置(如乘除法专用部件、浮点运算专用部件等);
·
各功能部件的并行程度;
·
各种操作的相容性与互斥性;
·
控制机构的组成方式;
·
缓冲与排队技术的应用;
·
预估、预判方法;
·
高可靠性技术等。
3.计算机实现
计算机实现就是指计算机组成的物理实现。
在上面计算机系统结构及计算机组成的基础上,利用具体的集成电路芯片、电子元器件、部件、插头、插座等,根据计算机组成的逻辑设计,实现物理计算机。
1.4计算机的分类及性能描述
1.4.1计算机的分类
1.早期的计算机分类方法
在20世纪80年代前,人们根据计算机的字长、规模、价格等指标,将计算机分为微型机、小型机、中型机、大型机和巨型机。随着计算机的发展,现在它们之间的界限已十分模糊。
2.按用途分类
1)通用计算机
(1)个人计算机。
(2)服务器。
2)嵌入式计算机
嵌入式计算机系统的定义可表述为:以应用为目标,以计算机技术为基础,软硬件可裁剪,对功能、实时性、可靠性、安全、体积、重量、成本、功耗、环境、安装方式等方面有严格要求的专用计算机系统。
3.Flynn分类法
Flynn将计算机分为四类,如图1.3所示。
1)单指令流单数据流(SISD)计算机
2)单指令流多数据流(SIMD)计算机
3)多指令流单数据流(MISD)计算机
4)多指令流多数据流(MIMD)计算机图1.3
Flynn分类法各类计算机示意图1.4.2计算机系统性能描述
1.计算机系统配置
1)个人计算机的配置
个人计算机最常见的是台式(桌面)计算机和笔记本(便携式)计算机,它们包括多个厂家和多种型号。这里列出一种台式机的配置,从中可以了解该机的大致性能。
·
处理器:英特尔酷睿TM2双核处理器E6300(处理器主频1.86GHz,2MB二级高速缓存,1.066GHz前端总线,硬件防病毒,65nm,节能技术);
·WindowsVistaHomePremium简体中文版;
·
支持英特尔64位内存扩展技术;·
采用英特尔LGA775封装技术;
·
内存:2GBDDRⅡ533;
·
硬盘:SATA250GB(7200转);
·
显卡:NV7950256MBPCI-E高性能显卡;
·19英寸宽屏液晶显示器;
·SATADVDRW光驱;
·
集成100M网卡;
·
集成5.1声卡;
·
防水抗菌键盘;
·
光电鼠标;
·MTBF6万小时。
2)服务器的配置
不同用途服务器的性能相差非常多,最简单的服务器用一台一般的PC配上相应的应用软件就可以实现,功能强的服务器可能需要成百上千个处理器构成集群系统来实现。表1.1列出的是某服务器的配置,从中可以了解该服务器的大致性能。
3)高性能计算机
不同时期,对高性能计算机有不同的解释。目前,一般认为性能达到或超过万亿次/秒的计算机为高性能计算机。
2.计算机系统性能计算
在许多实际的计算机中,减少执行时间通常会改善吞吐量。对多处理机系统而言,虽然每个任务的完成并没有加快,但增加了吞吐量。在计算机系统中使用更快的CPU,可以改善执行时间和吞吐量。
如果用时间来定义计算机系统的性能,则有
(1-1)
这意味着,如果计算机X的性能好于计算机Y,则有
PX>PY或TY>TX也即如果计算机X比计算机Y速度快,则在Y上的执行时间比X的长。从上述定义也可得到:
也即计算机的性能与其吞吐率成正比。在设计计算机时经常要进行计算机性能比较,相对性能(RelativePerformance)或性能比(PerformanceRatio)被定义为
(1-2)
这意味着,计算机X比计算机Y快n倍,或在Y上的执行时间比X的长n倍。
例1.1计算机A的性能比计算机B的性能好4倍,B完成一个指定的任务用时20s,那么A完成该任务用时多长?
解因为
所以
TA=5s
即A完成该任务用时5s。
3.用测试程序来测评计算机系统性能
1)基准测试程序
以往对计算机的测试采用过如下几种程序:
①实际应用程序,即计算机工作的真实程序。
②修正的实际应用程序,即对真实程序进行其些修改构成测试程序。
③核心程序,即提取真实程序中的核心部分构成测试程序。
④小测试程序,即具有特定目的的、100行以内的测试程序。
⑤合成测试程序,即选择具有各种代表性的一系列测试程序,将它们组合在一起。这种测试程序的集合称为测试程序组件,或者称为合成测试程序或基准测试程序。利用基准测试程序的优点是可以避免单个测试程序的片面性,更加全面地测试计算机的性能。因此,目前利用合成测试程序进行计算机性能评估已被广泛采用。目前常见的基准测试程序有:
①TPC-C:对系统在线处理事务的能力进行评价。以每分钟处理新订单个数为单位。
②TPC-H:对系统在线数据库资料的查询能力进行评价。以每小时完成查询的数量为单位。
③SPECWeb2005:用于评价系统同时响应http连接的最大数量。
④SPECjAppServer2004:用于评价系统基于Java平台每秒所完成的Java操作的最大数量。
⑤SPECCPU2000:用于对特定程序包执行时的评估。
⑥Linpack:在每秒内,利用高斯消元法求解一元n次线性方程组的次数来评价系统的性能。
⑦HPCC:利用双精度矩阵乘法、傅立叶变换、并行矩阵转置等七个子项全面评价系统的性能。
⑧SAPSD:测试系统的响应时间及每小时完成的订单数,用以衡量系统同时执行应用程序及数据库的能力。
2)SPECCPU2000基准测试程序
SPEC成立于1988年,其全称最初是SystemPerformanceEvaluationCooperative(系统性能评估合作社),现在已经更名为StandardPerformanceEvaluationCorporation(系统性能评估
公司),先后开发出一系列的测试程序,其主要版本有SPECCPU89、SPECCPU92、SPECCPU95、SPECCPU2000等。
3)PC性能测试
(1)CPU基本性能测试。对CPU基本性能测试采用如下两种程序:
①PCMark2002:整机综合性能测试软件,其中包含对CPU、内存、硬盘等子系统的性能测试。
②Superpi:将圆周率计算到104万位,要求较高时可以选择419万位的运算,最高可设3355万位。这一科学计算软件不但对CPU处理能力要求很高,而且测试结果受内存带宽和处理速度的影响很大,是检验CPU、内存和主板北桥芯片内存控制器的常用基准测试工具。
(2)基准测试软件测试。
①办公应用:BusinessWinstone2001。
②网络/多媒体创作:CCWinstone2002。
③3D游戏处理性能:
·3DMark2001SE(330版)。
·Quake31.17版。
·SeriousSam-secondEncounter。
④3D图形性能:Cinema4DXLV6.103。
(3)实际应用软件测试。
①MPEG4编码:FlasKMPEG0.594+DivX5.0.2。
②MP3编码:Lame3.89alpha。
③文件压缩:Winzip8.1。
4.Amdahl定律
Amdahl定律是20世纪60年代由IBM360系列计算机的主要设计者Amdahl提出的。其内容为:计算机系统中某一部件由于采用某种更快的执行方式后,整个系统性能的提高与这种执行方式的使用频率或占总执行时间的比例有关。Amdahl定律给出了加速比的定义如下:
(1-3)从Amdahl定律所描述的内容可以看到,通过对计算机某一部分的改进,计算机总执行时间比改进前快出的倍数即为加速比。计算机系统的加速比取决于下面两个因素:
(1)可改进部分在原系统总执行时间中所占的比例,称为可改进比例,用fe表示。例如,程序的总执行时间为100s,可改进的部分是其中的20s,则fe=0.2。可见,fe总是小于或等于1的。
(2)可改进部分改进后性能提高的程度,通常用部件加速比re来表示某部件改进后性能提高的比例。例如,某部件改进后,执行时间由原来的20s减少到5s,则部件加速比re=20/5=4。可见,re一般是大于1的。根据上述分析,若假设改进前的系统总执行时间为T0,可以得出改进后的系统总执行时间Tn为
(1-4)
若加速比用Sp表示,根据式(1-3)和式(1-4),则加速比Sp可表示为
(1-5)
例1.2某计算机系统的某一部件的处理时间为总处理时间的40%,该部件改进后的加速比为10,试计算改进后系统的加速比Sp为多少。
解由题意可知,fe=0.4,re=10,则
由计算可见,即使某一部件的加速比已达10倍,但若该部件仅影响到总执行时间的小部分,对整个计算机系统的贡献也是有限的。所以,改进后系统的加速比只有1.5倍左右。
例1.3若计算机系统有三个部件a、b、c是可改进的,它们的部件加速比分别为30、30、20。它们在总执行时间中所占的比例分别是30%、30%、20%。试计算这三个部件同时改进后系统的加速比。
解在多个部件可同时改进的情况下,Amdahl定律可表示为
(1-6)
将已知条件代入式(1-6),计算出Sp≈4.35。第2章计算机系统中的数据表示2.1数据编码2.2非数值数据的编码2.3检错与纠错码
2.1数据编码
2.1.1数值数据的编码
1.概述
1)进位计数制及其转换
常见的进位计数制有十进制、二进制、八进制和十六进制。
十进制数中共有0~9十个数码,其计数特点及进位原则为“逢十进一”。十进制的基数为10,位权为10i(i是整数)。十进制数的后面常用字母D标记或不加标识。
计算机中常用的计数制还有二进制、八进制和十六进制。二进制数中只有0和1两个数码,其计数特点及进位原则为“逢二进一”。二进制的基数为2,位权为2i(i是整数)。二进制数的后面常用字母B标记。
八进制数中共有0~7八个数码,其计数特点及进位原则为“逢八进一”。八进制的基数为8,位权为8i(i是整数)。八进制数的后面常用字母O标记。
十六进制数中共有0~9、A、B、C、D、E、F十六个数码,其计数特点及进位原则为“逢十六进一”。十六进制的基数为16,位权为16i(i是整数)。十六进制数的后面常用字母H标记。任何一种进位计数制表示的数都可以写成按权展开的多项式之和,即任意一个r进制数N可表示为
(2-1)
其中,Di为该数制采用的基本数符,ri是权,r是基数。
数值数据是表示数量多少和数值大小的数据,即在数轴上能找到其对应点的数据。
各种数值数据在计算机中表示的形式称为机器数。机器数对应的实际数值称为数的真值。
2)无符号数与有符号数
(1)无符号数。
所谓无符号数即没有符号的数,数中的每一位均用来表示数值。所以,8位二进制无符号数所表示的数值范围是0~255。而16位无符号数的表示范围为0~65535。
(2)有符号数。由于机器是无法直接识别“+”(正)、“-”(负)符号,而“正”、“负”恰好是两种截然不同的状态,若用“0”表示“正”,用“1”表示“负”,则符号也被数字化了,再按规定将符号放在有效数字的前面就组成了有符号数。
3)定点数与浮点数
(1)定点数。
在机器数表示中,若约定小数点的位置固定不变,则称为定点数。有两种形式的定点数:定点整数(纯整数,小数点定在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)。具体表示形式如图2.1所示。图2.1有符号定点数的表示形式
(2)浮点数。基数为2的数F的浮点表示为
F=M×2E
(2-2)
其中M称为尾数,E称为阶码。
尾数为带符号的纯小数,阶码为带符号的纯整数。计算机中浮点数的一般表示格式如图2.2所示,其中数符(即数据的符号)就是尾符(即尾数的符号)。图2.2浮点数的一般表示格式
2.原码
原码是机器数中最简单的一种表示形式,其符号位为0表示正数,符号位为1表示负数,数值位即真值的绝对值。
(1)整数原码的定义。根据图2.1(a),若整数用二进制n位表示,则整数原码的定义为
(2-3)
式中X为真值,n-1为整数数值位的位数。
例2.1当X=+35时,若采用8位二进制编码,其原码表示为
[X]原=00100011
若X=-35,同样用8位编码表示,则
[X]原=10100011
从本例可以看到,符号位总是放在最高位。同时,原码表示又称作带符号的绝对值表示,即在符号的后面跟着的就是该数据的绝对值。
(2)小数原码的定义。根据图2.1(b),若小数用二进制n位表示,则小数原码的定义为
(2-4)根据式(2-4),纯小数的原码可以表示为
对于正数:
[X]原=0.x1x2…xn-1
对于负数:
[X]原=1.x1x2…xn-1
例2.2若纯小数X=0.46875,用包括符号位在内的8位定点原码表示为
[X]原=0.0111100
若纯小数X=-0.46875,用包括符号位的8位定点原码表示为
[X]原=1.0111100数值原码表示法简单直观,但加减运算却很麻烦。同时,对于数值0,用原码表示则不是唯一的,有两种表示形式,以8位原码表示的0为
[+0]原=0.0000000或[+0]原=00000000
[-0]原=1.0000000或[-0]原=10000000
可见[+0]原不等于[-0]原,即原码中的“零”有两种表示形式。
利用上述定义,原码n位(包括一位符号位)整数及纯小
数所能表示的数值范围分别为-(2n-1-1)~+(2n-1-1)和
-(1-2-(n-1))~+(1-2-(n-1))。
3.补码
1)补数的概念
在日常生活中,常会遇到“补数”的概念。如时钟指示6点,欲使它指示3点,既可按顺时针方向将分针转9圈,也可按逆时针方向将分针转3圈,结果是一致的。假设顺时针方向转为正,逆时针方向转为负,则有
6-3=3
6+9=15
由于时钟的时针转一圈能指示12个小时,这“12”在时钟里是不被显示而自动丢失的,即15-12=3,故15点和3点均显示3点。这样-3和+9对时钟而言其作用是一致的。在数学上称12为模,写作mod12,而称+9是-3以12为模的补数。
2)补码的定义
(1)整数补码的定义。同样根据图2.1(a),若整数用二进制n位表示,则整数补码的定义为
(2-5)
由式(2-5)可以看到,对正数来说,补码与原码的定义完全一样。同样的例子,假定X=+35时,若用8位二进制编码的补码表示,则
[X]补=00100011但是,对负数而言,两者是不同的。现仍以X=-35为例,可以利用式(2-5)来求得该数的8位补码表示。但这种方法相对比较麻烦。简单的方法有如下几种:
①将X=+35的原码表示,包括符号位在内各位取反,再在最低位上加1。
②将X=-35的原码表示,不包括符号位各位取反,再在最低位上加1。
③将X=+35的原码表示,从最低位逐位向高位寻找,找到第一个1不变,以后各位1变0、0变1直至符号位。
(2)小数补码的定义。小数用二进制n位表示,则小数补码的定义为
(2-6)
根据式(2-6),纯小数的补码同样可以表示为
对于正数:
[X]补=0.x1x2…xn-1
对于负数:
[X]补=1.x1x2…xn-1
同样,小数点是隐含的。
例2.3若纯小数X=0.46875,用包括符号位的8位定点补码表示为
[X]补=0.0111100
可以看到,对于正数,补码纯小数表示与原码是一样的。对于负数纯小数,构成其补码表示形式所采用的方法与整数一样。因此,当X=-0.46875时,包括符号位在内的8位定点补码可表示为
[X]补=1.1000100
n位补码表示的整数数值范围为-2n-1~+(2n-1-1)。n位补码表示的小数数值范围为-1~+(1-2-n+1)。
3)补码的特点
(1)0的表示是唯一的。
[+0]补=0.0000000
[-0]补=2+(-0.0000000)=10.0000000-0.0000000
=0.0000000
显然[+0]补=[-0]补=0.0000000,即补码中的“零”只有一种表示形式。
(2)变形码。当模数为4时,形成了双符号位的补码。如X=-0.1001,对mod22而言,有
[X]补=22+X=100.0000000-0.1001000=11.0111000
这种双符号位的补码又叫做变形补码,它在阶码运算和溢出判断中,有其特殊作用。
(3)求补运算。在许多处理器中都设置了求补指令,即对操作数求其补码。具体运算就是将操作数(包括符号位在内)各位取反再在最低位上加1。对一个正数求补,其结果就会变做负数。例如,对+68求补,其结果必为-68,就如同上面对+35求补就得到-35的结果一样。同样,对-68求补,其结果必为+68。
求补运算可用上述的对负数进行补码编码的四种方法的任一种来实现,当然以简单快速为好,第3章中将有具体的实现方案。
(4)简化加减法。利用补码实现两数相加是很方便的,补码加法的运算法则为
[X+Y]补=[X]补+[Y]补
(2-7)
由式(2-7)可以看到,两数和的补码就等于两数补码之和。对于减法,正如上面所描述的,对补码求补就相当于在其前面加了一个负号。也就是说[[X]补]求补=[-X]补;[[-X]补]求补=[X]补。有了这样的特性,就使得减法运算完全可以用加法来实现,即
[X-Y]补=[X]补+[-Y]补
=[X]补+[[Y]补]求补
(2-8)
可见,利用补码,减法运算可用加法来实现。这也是所有常见的处理器中只设置加法器而不设置减法器的原因,这样就简化了处理器的结构。现举例说明。
例2.4求68-35=?
解可以将上式写作68+(-35)=Z,则
[Z]补=[68]补+[(-35)]补=01000100+11011101
=00100001
所获得的结果正是33。
(5)算术或逻辑左移。对于用补码表示的数据,只要没有超出所规定的数值范围,每算术或逻辑左移一次,即各位顺序向左移一位,最高位移出,最低位补进一个0,相当于该数据乘以2。但必须注意前提条件。
(6)算术右移。算术右移规定保持最高位(符号位)不变,并将包括最高位的数据顺序右移一位,最低位移出。补码表示的数据,每算术右移一位相当于除以2。
4.反码
反码通常用来作为由原码求补码或者由补码求原码的中间过渡。
1)反码的定义
(1)整数反码的定义。整数反码定义为
(2-9)
例2.5若X=35,则其8位反码表示为
[X]反=00100011
若X=-35,则其反码表示为
[X]反=11011100
(2)小数反码的定义。小数反码定义为
(2-10)
2)特点
(1)0的表示。
在数值的反码表示中,0同样有两种表示形式,用8位表示如下:
[+0]反=0.0000000=00000000
[-0]反=1.1111111=11111111
(2)负数反码与补码的关系。
从负数反码及补码的小数定义可以看到:
[X]反=2-2-n+1+X
[X]补=2+X可见,
[X]补=[X]反+2-n+1
(2-11)
式(2-11)进一步验证了前面的结论:只要在某负数的反码的最低位加1即可获得该数值的补码。该结论对整数同样成立。
(3)数值范围。n位反码表示的整数数值范围为-(2n-1-1)
~+(2n-1-1);n位反码表示的小数数值范围为-(1-2-(n-1))~+(1-2-(n-1))。
5.移码
1)移码的由来
带符号数在计算机中除了用原码、补码和反码表示外,还用另一种机器数——移码表示,由于它的一些突出的优点,目前已被广泛采用。当真值用补码表示时,由于符号位和数值部分一起编码,与习惯上的表示法不同,因此人们很难从补码的形式上直接判断其真值的大小。例如:
十进制数X=+31,对应的二进制数为+11111,若用8位表示,则[X]补=00011111;
十进制数X=-31,对应的二进制数为-11111,若用8位表示,则[X]补=11100001。
上述补码表示中,从代码形式看,符号位也是一位二进制数。如果按这8位二进制代码比较其大小,会得出11100001>00011111,其实恰恰相反。如果对每个真值加上一个2m(m为整数的数值位数,此处可为7,即8-1),情况就发生了变化,如:
X=00011111加上27可得10011111;
X=11100001加上27可得01100001。
比较它们的结果可见,10011111>01100001。这样一来,从8位代码本身就可看出真值的实际大小。
在原来补码表示的编码上加上一个偏移量,就构成了新的编码,即移码。上述例子中,由于编码长度为8位,故使用的偏移量为27
。这或许就是移码名称的由来。
2)移码的定义
由于移码多用于浮点数中表示阶码,均为整数,因此这里只介绍定点整数的移码表示。当用包括符号位在内的n位字长时,整数移码定义为
[X]移=2n-1+X
(-2n-1≤X<2n-1)
(mod2n)
(2-12)
要获得整数的移码表示,可以利用定义来实现,也可以先求出该数的补码表示,而后将符号位取反。仍用前面的例子,当X=35时,其8位字长移码求解如下:
先求出[X]补=00100011,再将其符号位取反,即
[X]移=10100011。或用定义求解,此时2n-1表示为二进制数10000000,X=00100011,则
[X]移=2n-1+X=10100011
若X=-35,先求出[X]补=11011101,则[X]移=01011101。或用定义求解,则
[X]移=2n-1+X=10000000-00100011
=01011101
3)特点
(1)移码就是在真值上加一个常数2n-1
。在数轴上移码所表示的范围恰好对应于真值在数轴上的范围向轴的正方向移动2n-1
个单元,如图2.3所示。图2.3移码在数轴上的表示
(2)移码与补码的关系。
移码与补码的关系可用图2.4表示。
由图2.4可以看到,移码与补码间的关系十分密切,只要将补码的符号位取反,则补码就转换成了相应的移码;同样,只要将移码的符号位取反,则移码就转换成了相应的补码。
(3)移码码值的大小反映了数值的大小,因此,正数移码的码值一定大于负数移码的码值。也就是说,大码值所表示的数值一定大于小码值所表示的数值。图2.4移码与补码的关系
6.不同编码的比较
原码表示很直观。若采用原码做乘除运算,可取其绝对值(原码的数值部分)直接运算,并按同号相乘除取正、异号相乘除取负的原则,单独处理符号位,比较方便。但原码加减运算时,其运算比较复杂。
表2.1列出了8位字长中所有二进制代码组合与无符号数及定点整数原码、补码、反码和移码所代表真值的对应关系。2.1.2数据的浮点表示
1.浮点数的表示方法
1)概述
实际上,计算机中处理的数不一定是纯小数或纯整数,而且有些数据的数值范围相差很大(如电子的质量为9×10-28g,太阳的质量为2×1033g),它们都不能直接用定点小数或定点整数表示,但均可用浮点数表示。浮点数即小数点的位置可以浮动的数,例如:
352.47=3.5247×102=3524.7×10-1=0.35247×103
显然,这里小数点的位置是变化的,但因为分别乘上了不同的10的方幂,故其值不变。浮点数表示的一般形式为
F=M×RE
(2-13)
式中,M为尾数(可正可负),E为阶码(可正可负),R是基数(或基值)。在计算机中,基数可取2、4、8或16等。
当基数R=2时,式(2-13)就变成了式(2-2)。此时,数F可写成下列不同形式:
F=11.0101=0.110101×210=1.10101×21
=1101.01×2-10=0.00110101×2100=…
式中,尾数与阶码用二进制数表示,基数用十进制数表示。
2)浮点数的表示
浮点数在机器中的形式有两种:图2.2所示的形式和图2.5所示的形式。至于采用哪种形式,是由计算机的设计人员决定的。图2.5浮点数的另一种表示形式
2.浮点数所表示的数值范围
浮点数可分为非规格化浮点数和规格化浮点数,它们有一些不同,下面分别讨论。
1)非规格化浮点数
由浮点数的表示式可以看到,当基数确定时,浮点数由阶码E和尾数M两部分确定。需要强调的是:①阶码是整数,阶码的位数k决定浮点数表示的数值范围,也就是决定了所表示
的数值的大小,阶符决定阶码的正负;②尾数是小数,其位数n主要用于决定浮点数的精度;③尾数的符号表示浮点数的正负。非规格化浮点数的表示范围有多大?以通式F=M×RE为例,设浮点数的基值R=2;阶码的数值位取k位,阶符1位且采用补码表示;尾数的数值位取n位,尾符1位,同样采用补码表示。当浮点数为非规格化数时,可先分别求出阶码和尾数的表示范围:
阶码的最小值为-2k
,阶码的最大值为(2k
-1);
尾数的最小负值为-1,尾数的最大负值为-2-n;
尾数的最小正值为+2-n,尾数的最大正值为+(1-2-n)。
根据上面的分析,此非规格化浮点数在数轴上的表示范围如图2.6所示。图2.6非规格化浮点数的数值范围
2)规格化浮点数
在计算机中,为了充分利用尾数的二进制编码表示更多的有效数字,同时使浮点数有统一的表示形式,通常,浮点数采用规格化形式来表示。
浮点数的规格化就是将尾数的绝对值限定在一个规定的数值范围内。当基值为2时,规格化浮点数尾数的绝对值应在1/2~1之间。要使尾数的绝对值在此范围内,通过改变小数点的位置(相应地改变阶码)便可以做到。若尾数M用补码表示,当M≥0时,则规格化尾数的形式必须为
M=0.1××××…×
(2-14)
式(2-14)中,×为任意二进制值,0或1皆可。
当M<0时,规格化尾数的形式必须为
M=1.0××××…×
(2-15)
同样,式(2-15)中,×为任意二进制值,0或1皆可。根据规格化浮点数的定义,可以得到规格化尾数的数值范围如下:
尾数的最小负值为-1,尾数的最大负值为-(1/2+2-n);
尾数的最小正值为+1/2,尾数的最大正值为+(1-2-n)。
对于规格化浮点数来说,其阶码所表示的数值范围与非规格化浮点数是一样的。因此,可以确定规格化浮点数所能表示的数值范围如图2.7所示。图2.7规格化浮点数的数值范围比较图2.6和2.7,可以发现非规格化浮点数和规格化浮点数所能表示的数值范围主要不同是绝对值最小的有效数值。由图2.7可见,规格化浮点数的数值范围如下:对于浮点数,可有多种表示方案。假定阶码为7位(含阶符1位)并用移码表示,尾数为9位(含数符1位)并用补码表示,则该浮点数所能表示的数值范围是:
-263
~+(1-2-8)×263
3)规格化
浮点数在进行运算前和运算后,必须对其尾数规格化,使其成为规格化数。当尾数不是规格化数时,就要通过修改阶码并同时左右移尾数使其变成规格化数。将非规格化数转换成规格化数的过程叫做规格化。对于基数不同的浮点数,因其规格化数的形式不同,规格化过程也不同。
4)定点数和浮点数的比较
(1)当浮点计算机和定点计算机中数据的位数相同时,浮点数的表示范围比定点数大得多。
(2)当浮点数为规格化数时,其精度远比定点数高。
(3)浮点数运算要分阶码部分和尾数部分,而且运算结果要求规格化,故浮点运算步骤比定点运算步骤多,运算速度比定点低,运算电路比定点复杂。
(4)在溢出的判断方法上,浮点数是对规格化数的阶码进行判断,而定点数是对数值本身进行判断。
例2.6将十进制数X=+13/128写成二进制定点数和浮点数(尾数数值部分取7位,阶码数值部分取7位,阶符和数符各取1位,阶码采用移码,尾数用补码表示),分别写出该数的定点数和浮点数的表示形式。
解令x=+13/128,
其二进制形式:
X=0.0001101;
定点数真值表示:
X=0.0001101;
规格化浮点数真值表示:
X=0.1101000×2-11;
定点数编码表示:[X]原=[X]补=[X]反=0.00011011;
规格化浮点数编码表示如图2.8所示。图2.8例2.6中浮点数的表示形式
例2.7设浮点数字长为16位,其中阶码为6位(含1位阶符),尾数为10位(含1位数符),阶码用移码,尾数用补码,写出X=-(53/512)对应的规格化浮点数。
解
X=-(53/512)=-0.000110101=2-11×(-0.110101000)
尾数的规格化补码编码为1.001011000,阶码的移码编码为011101。
该数的另一种浮点数表示形式如图2.9所示。图2.9例2.7中浮点数的表示形式
3.IEEE-754标准
1)工业标准754概述
IEEE-754规定了单精度和双精度两种基本的浮点格式以及双精度扩展等多种浮点格式。常用的IEEE-754格式参数如表2.2所示。
IEEE-754标准的表示形式如下:
(2-16)
2)单精度格式
(1)格式。这里仅介绍最基本的IEEE-754标准的单精度格式,如图2.10所示。图2.10
IEEE-754单精度浮点数的格式值得强调的是,IEEE-754中阶码采用移码,正如表2.2所示,对单精度浮点数来说,移码的偏移量不是前面所提到的27(+128)而是(27-1)即+127。同时,规定尾数用原码表示,规格化编码时b0必须为1而且应隐去。有关IEEE-754标准的单精度格式的详细规定见表2.3。
(2)说明。根据上述描述,可以得到IEEE-754标准的单精度浮点数的结论:
①由于规定E=e-127,并且0<e<255(即规定e在+1~+254内为正规数),故阶码E的正常值应为真值-126~+127。
②规格化数为
N=(-1)s×2e-127×(1.f)
(2-17)
③所能表示的正数范围:
+2+127×(1+1-2-23)~+2-126×(1+0);
所能表示的负数范围:
-2+127×(1+1-2-23)~-2-126×(1+0)。
④当e=0或e=255时,在IEEE-754标准中表示特殊的数。
(3)举例。为了说明IEEE-754浮点数的应用,现举例如下。
例2.8利用IEEE-754标准将十进制数176.0625表示为单精度浮点数。
解首先将该十进制数转换成二进制数:
(176.0625)10=(10110000.0001)2
对二进制数规格化:
10110000.0001=1◆01100000001×27
这就保证了使b0为1,而且小数点在◆位置上。将b0去掉并扩展为单精度浮点数所规定的23位尾数:
01100000001000000000000。再来求阶码。现指数为7即真值,而单精度浮点数规定指数的偏移量为127(请注意不是2.1.1节移码编码描述中所提到的128),即在指数7上加127,也就是
e=7+127=134
即指数的移码表示为
[e]移=00000111+01111111=10000110
最后,将(176.0625)10表示为IEEE-754标准的单精度浮点数:
0
10000110
01100000001000000000000
3)双精度浮点数的说明
这里简要说明IEEE-754标准双精度浮点数。
①阶码e的正常值应为真值-1022~+1023,偏移+1023,即e为+1~+2046。
②规格化数为
N=(-1)s×2e-1023×(1.f)
(2-18)
③所能表示的正数范围:
+2+1023×(1+1-2-52)~+2-1022×(1+0);
所能表示的负数范围:
-2+1023×(1+1-2-52)~-2-1022×(1+0)。
④当e=0或e=2047时,在IEEE-754标准中表示特殊的数。2.1.3
BCD码
1.有权码
1)定义
含确定权值的BCD编码有多种方案,列于表2.4中。
2)运算
计算机是以二进制进行运算的,当进行BCD数运算时,运算的结果有可能出现未定义的非法数据,这必然导致结果的错误。要保证结果正确,则需要对运算的结果进行校正。
例2.9求两个8421BCD数49+24=?
解在计算机中,处理器是用二进制加法器对两个8421BCD码进行相加的,相加过程列式如下:
2.无权码
在1位十进制数对应的4位二进制编码中,二进制各位没有确定的权值,这种BCD码称为无权码。常见的无权码如表2.5所示。
2.2非数值数据的编码
2.2.1
ASCII码
ASCII码采用7个二进制位对字符进行编码,低4位组
d3d2d1d0用作行编码,高3位组d6d5d4用作列编码,可表示128个符号,其格式如图2.11所示,编码见表2.6。图2.11
ASCII码的构成格式2.2.2汉字编码
1.汉字输入编码
汉字输入编码是研究最多的,方案有数百种之多。根据其特点,这些方案可以归结为下列几种类型。
1)汉字拼音编码
2)汉字字形编码
3)汉字直接数字编码
4)整字编码
5)手写输入
6)语音输入
2.国标码和汉字内码
1)国标码
2)汉字内码
3)汉字区位码
4)编码间的关系
5)其他标准
3.汉字字模码
当汉字需要在屏幕上显示或需要在打印机上打印时,需要将机内码转换成汉字字形码。它是表示汉字字形的字模数据,通常用点阵、矢量函数等方式表示。
1)点阵字模
2)矢量字模
2.3检错与纠错码
2.3.1奇偶校验码
最简单且应用广泛的检错码是采用一位校验位的奇偶校验。
1.水平奇偶校验
水平奇偶校验就是对每一个数据的编码添加校验位,使信息位与校验位处于同一编码中。
1)水平奇校验
设数据X=x0x1…xn-1是一个n位字,若在其高位前增加1位奇校验位c,则包括奇校验位的数据就变成了X′=cx0x1…xn-1。奇校验定义为
(2-19)
式中⊕代表按位加。之所以称为奇校验,是因为必须保证数据(包括奇校验位在内)的n+1位中,1的个数为奇数。奇校验位c可按如下运算获得:
(2-20)
也就是说,奇校验位应为数据X=x0x1…xn-1各位模2加的结果取反。
2)水平偶校验
偶校验的概念与奇校验是一样的,就是加上偶校验后,必须保证数据(包括偶校验位在内)的n+1位中,1的个数为偶数。也即必须保证:
(2-21)
在将数据X=x0x1…xn-1加上偶校验时,可利用下式求出偶校验位c:
(2-22)
也就是说,偶校验位等于数据各位的模2加。
2.垂直奇偶校验码
这种校验码把数据分成若干组,一组数据占一行,排列整齐,针对每一列采用奇校验或偶校验,再加一行校验码。
例2.10对于32位数据10100101001101101100110010101011,其垂直奇校验和垂直偶校验如表2.7所示。
3.水平垂直校验码
在垂直校验码的基础上,对每个数据再增加一位水平校验位,便构成水平垂直校验码。
例2.11对于32位数据10100101001101101100110010101011,其水平垂直奇校验和偶校验如表2.8所示。2.3.2海明码
在计算机运行过程中,由于种种原因致使数据在存储过程中可能出现差错。为了能及时发现错误并及时纠正错误,通常将原数据配成海明编码。
海明码具有一位纠错能力。由编码纠错理论得知,任何一种编码是否具有检错能力和纠错能力,与编码的最小距离有关。所谓编码最小距离,是指在一种编码系统中,任意两组
合法代码之间的最少二进制位数的差异。根据纠错理论得:
L-1=D+C且D≥C
(2-23)设欲检测的二进制代码为n位,为使其具有纠错能力,须增添k位检测位,组成n+k位的代码。为了能准确地对错误进行定位以及指出代码无错,新增添的检测位数k应满足:
2k≥n+k+1(2-24)
由此关系可求得不同代码长度n所需检测位的位数k,如表2.9所示。
k的位数确定后,设定它们在被传送代码中的位置及它们的取值,便可由它们来承担检测任务。
下面首先解释海明码的产生及译码过程。
例2.12假如8位数据如下:为计算Pi,首先假定H0~H3均为0,利用表2.10所给出
的校验方程的虚线右边部分计算出P0~P3如下:这样,就求出了P0~P3的值。用H0、H1、H2、H3代替求出的P值,则海明码校验位就得到了,它们分别为:图2.12纠错电路原理图2.3.3循环冗余校验码
1.概述
循环冗余校验(CRC)码可以发现并纠正信息在存储或传送过程中出现的错误。因此,CRC校验码在磁介质存储器与计算机之间的通信方面得到了广泛应用。
2.CRC码的编码方法
循环冗余校验码是这样构成的:将n位信源二进制代码M(x)左移k位后,被二进制长度为k+1位的生成多项式G(x)相除所得的k位余数就是校验位。将此k位校验位接在原信源代码M(x)之后,就构成了长度为n+k位的循环冗余校验码CRC。其格式如图2.13所示。图2.13
CRC构成格式利用生成多项式,可为n个数据位产生k个校验位,构成编码长度为n+k的编码。
设待编的信息码组用多项式M(x)表示:
(2-25)
式中Di为1或0。
1)左移构成一个多项式
将信息码组M(x)左移k位,移空处补0,即构成n+k位多项式M(x)·xk,格式为
空出的k位将用来拼接k位校验码。
2)求余数
CRC码是用多项式M(x)·xk除以生成多项式G(x)(产生校验码的多项式)所得余数作为校验位。
为了得到k位余数(校验位),G(x)必须是k+1位。在进行除法的过程中,要利用上述的模2运算法则,因此,在这里要特别强调这些法则是非常重要的。
3)举例
例2.13已知有效信息为1100,试用生成多项式G(x)=1011将其构成CRC码。
解有效信息多项式为
M(x)=1100=x3+x2
(n=4)
由G(x)=1011=x3+x+1可知生成多项式为4位,即k+1=4,所以k=3。将有效信息左移k位后得1100000。再被G(x)模2除,过程如下:将余数010放在信息位左移3次所空出的位置上,即将余数与信息拼接在一起就构成了CRC码,如下:
M(x)·x3+R(x)=1100000+010=1100010
1100010即为CRC码。CRC编码为7位,有效信息位为4位,故1100010码又称(7,4)码。这里的(7,4)码即为码制,还可以有(7,3)码制和(7,6)码制等。
3.CRC码的译码和纠错
将收到(或从存储介质中读出)的循环校验码用约定的生成多项式G(x)去除,如果无错,则余数应为0;如果某一位出错,则余数不为0。不同的出错位对应不同的余数,表2.11列
出了对应G(x)=1011的出错模式。可以证明,更换不同的待测码字,余数和出错位的对应关系不变,只与码制和生成多项式有关。表2.11给出的关系只对应G(x)=1011的(7,4)码,对于其他码制或选择用其他
生成多项式,出错模式将发生变化。值得指出的是,并不是任何一个k+1位多项式都可以作为生成多项式。从检错和纠错的要求出发,生成多项式应满足以下要求:
①任何一位发生错误,都应该使余数不为零;
②不同位发生错误应使余数不同;
③对余数继续做模2除,应使余数循环。
好在前人已为我们提供了多种检纠错性能很好的生成多项式供选用。例如,国际电联推荐了多种不同长度的生成多项式,其中长度为17位的生成多项式为
G(x)=X16+X12+X5+1
当需要使用生成多项式时可找有关资料选用。第3章运算方法与运算器3.1定点数运算3.2算术逻辑运算部件3.3浮点运算
3.1定点数运算
3.1.1加减运算
1.加减运算方法
补码加减运算过程中,参加运算的操作数及运算结果均用补码表示。
1)补码加法
补码加法的运算法则为
[X+Y]补=[X]补+[Y]补
(3-1)
由式(3-1)可以看到,两数和的补码就等于两数补码之和。利用补码求两数之和十分方便。
例3.1有两个定点整数63和35,利用补码加法求63+35=?
解根据题意,用8位二进制补码表示63和35:
[63]补=00111111
[35]补=00100011
则
[63+35]补=01100010
例3.2有两个定点整数-63和-35,利用补码加法求-63+(-35)=?
解根据题意,用8位二进制补码表示-63和-35:
[-63]补=11000001
[-35]补=11011101
则
[-63+(-35)]补=10011110
2)补码减法
在数值的补码表示法中,我们注意到,对一个正数求补——对该数包括符号位在内各位取反再加1,即可得到该数的负数;若对该负数再求补又可得到原来的正数。也就是说[[X]补]求补=[-X]补;[[-X]补]求补=[X]补。
补码减法的运算法则为
[X-Y]补=[X]补+[-Y]补
=[X]补+[[Y]补]求补
(3-2)
例3.3有两个定点整数63和35,利用补码减法求
63-35=?
解根据题意,用8位二进制补码表示63和35:
[63]补=00111111
[35]补=00100011
而[63-35]补=[63]补+[-35]补
;同时,[-35]补=[[35]补]求补=11011101,从而求出:
得到[63-35]补=00011100。由于是8位二进制运算,在相加过程中有进位1被丢弃不用,所得的结果仍是正确的。综上所述,补码加减运算的规则是:
(1)参加运算的操作数用补码表示。
(2)符号位参加运算。
(3)若相加,则两个数的补码直接相加;若进行相减运算,则将减数连同符号位一起变反加1后与被减数相加。
(4)运算结果为补码表示。
2.溢出判断
1)溢出的概念
例3.4有两个定点整数63和85,利用补码加法求63+85=?
解根据题意,用8位二进制补码表示63和85:
例3.5设正整数X=+1000001,Y=+1000011,若用8位补码表示,则[X]补=01000001,[Y]补=01000011,求[X+Y]补。
解计算[X]补+[Y]补:
例3.6设负整数X=-1111000,Y=-10010,若用8位
补码表示,则[X]补=10001000,[Y]补=11101110,求[X+Y]补。
解计算[X]补+[Y]补:
两个负数相加,结果为一个正数,显然也是错误的。
2)溢出的判定
(1)双符号位(变形码)判决法。
第2章中曾提到变形补码,采用两位表示符号,即00表示正号、11表示负号,一旦发生溢出,则两个符号位就一定不一致,利用判别两个符号位是否一致便可以判定是否发生了溢出。
若运算结果两符号分别用S2、S1表示,则判别溢出的逻辑表达式为
OF=S2⊕S1
(3-3)
例3.7设两正整数X=+1000001,Y=+1000011,若用双符号位的8位补码表示,则[X]补=001000001,[Y]补=
001000011,求[X+Y]补。
解计算[X]补+[Y]补:
式中,由于结果的S2和S1
不一致,OF=S2⊕S1=1,因此发生了溢出。
(2)进位判决法。若Cn-1为最高数值位向最高位(符号位)的进位,Cn表示符号位的进位(即进位标志CF),则判别溢
出的逻辑表达式为
OF=Cn-1⊕Cn
(3-4)
溢出判定如表3.1所示。在例3.6的运算过程中,Cn-1为0而Cn为1,故Cn-1⊕Cn=1,表示运算结果有溢出。
(3)根据运算结果的符号位和进位标志判别。
该方法适用于两同号数求和或异号数求差时判别溢出。溢出的逻辑表达式为
OF=SF⊕CF
(3-5)
式(3-5)中SF和CF分别是运算结果的符号标志和进位标志。
(4)根据运算前后的符号位进行判别。若用XS、YS、ZS分别表示两个操作数及运算结果的符号位,当两同号数求和或异号数求差时,就有可能发生溢出。根据运算前后的符号位进行溢出判别的逻辑表达式为
(3-6)
3.一位全加器的实现
设一位全加器的输入分别为Xi和Yi,低一位对该位的进位为Ci,全加器的结果和向高一位的进位分别用Zi和Ci+1表示,则一位全加器所实现的逻辑表达式如下:
(3-7)
(3-8)实现上述逻辑功能的一位全加器的逻辑电路及其框图分别如图3.1(a)和(b)所示。
若令Gi=Xi·Yi,Pi=Xi+Yi
,则式(3-8)可写为
Ci+1=Gi+Pi·Ci(3-9)
其中,Gi称为进位产生函数,Pi称为进位传递函数。图3.1一位全加器逻辑电路及其框图
4.n位加法器的实现
1)行波进位加法器
利用上述n个一位全加器串在一起工作,便可以构成n位加法器。同时,补码减法运算用加法器便可实现。图3.2给出的就是用n个一位全加器及门电路构成n位补码加法/减法器的电路图。图3.2行波进位的n位加法/减法器
2)先行进位加法器
首先,分析式(3-9),其表达式为Ci+1=Gi+Pi·Ci
。从式中可知,只要有输入Xi和Yi
就能求出Gi和Pi,在已知输入Ci的情况下,便可以获得Ci+1。那么,在有输入Xi+1、Yi+1和Xi、Yi、Ci的情况下,便可以获得Ci+2。依次类推,便可以求出Ci+3、Ci+4、……。下面仅列出四个进位生成逻辑表达式:
(3-10)
(3-11)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑项目施工现场管理人员安全管理绩效衡量表
- 2025中国太平洋人寿保险股份有限公司甘肃分公司招聘3人笔试历年难易错考点试卷带答案解析
- 心理咨询师心理干预与咨询服务KPI考核表
- 初中三年级数学《位似图形》教案
- 游戏策划师游戏设计质量与玩家满意度KPI考核表
- 建筑施工安全管理与规范方案
- 商洽2026年度品牌赞助合作项目5篇范文
- 培养阳光心态,乐享美好童年几年级主题班会课件
- 家庭安全防护系统性方案预案
- 关于2026年新员工培训计划确认函7篇
- 老年护理人文关怀
- 《小区物业管理系统的设计与实现》14000字(论文)
- 新能源汽车电池回收与循环利用技术研究
- 起重伤害事故现场处置演练方案
- 律所之间转委托合同范本
- 广州市建筑工程建材监管与服务平台操作手册
- JTG-H30-2015公路养护安全作业规程
- JC∕T 2476-2018 机械喷涂砂浆
- 主要施工管理计划(通用版)
- GB/T 5900.4-2022机床主轴端部与卡盘连接尺寸第4部分:圆柱连接
- GB 16357-1996工业X射线探伤放射卫生防护标准
评论
0/150
提交评论