1、 程序员 程序员考试考前串讲第2章计算机硬件基础从历次考试试题来看,计算机硬件知识是程序员考试的一个重点,占上午考试的15%左右。2.1考点分析本节把历次考试中计算机硬件基础方面的试题进行汇总,得出本章的考点,如表2-1所示。表2-1 计算机硬件基础试题知识点分布根据表2-1,我们可以得出计算机硬件基础的考点主要有以下6个方面:(1)计算机组成:包括计算机的基本组成、总线和接口、流水线等。(2)数据运算:包括数据的表示(补码、ASCII码、奇偶校验码、海明码、汉字的内码)、算术移位、逻辑移位、逻辑运算。(3)指令系统:包括指令的执行过程、寻址方式、堆栈。(4)存储体系:包括内存及编址、内存容量
2、、磁盘等待时间。(5)中断与DMA:主要考查中断和DMA.(6)性能评估:主要考查系统可靠性、容错、时钟频率、机器周期、指令周期等。对这些知识点进行归类,按照重要程度进行排列,如表2-2所示,其中的五角星号(*)代表知识点的重要程度,星号越多,表示越重要。表2-2 计算机硬件基础各知识点重要程度在本章的后续内容中,我们将对这些知识点依次进行讲解。2.2计算机组成本知识点主要考查计算机组成各部件、USB、总线。2.2.1计算机组成部件在一台计算机中,主要有6种部件,分别是控制器、运算器、内存储器、外存储器、输入设备和输出设备,它们之间的合作关系如图2-1所示。图2-1 计算机各功能部件之间的合作
3、关系(1)控制器(Control unit):是分析和执行指令的部件,也是统一指挥并控制计算机各部件协调工作的中心部件,所依据的是机器指令。控制器的组成包含程序计数器(PC)、指令寄存器(IR)、指令译码器、时序部件、微操作控制信号形成部件(PSW)和中断机构。根据产生微操作控制信号的方式不同,控制器可以分为组合逻辑型、存储逻辑型、组合逻辑与存储逻辑结合型3种。其中存储逻辑型也称为微程序控制型,增加了控制存储器,用来存放控制机器指令执行的微程序。(2)运算器:也叫做算术逻辑单元(Arithmetic and Logic Unit,ALU),对数据进行算术运算和逻辑运算。通常由ALU(算术/逻辑
4、单元,包括累加器、加法器等)、通用寄存器(不包含地址寄存器)、多路转换器、数据总线组成。定点运算器的内部总线有三种形式,分别是单总线、双总线以及三总线。对于单总线而言,至少需要设置两个暂存器;对于双总线而言,在两个输入和一个输出上至少要设置一个暂存器;而对于三总线而言,在两个输入和一个输出上无须设置暂存器。(3)内存储器(Memory或Primary storage,简称内存或主存):存储现场操作的信息与中间结果,包括机器指令和数据。(4)外存储器(Secondary storage或Permanent storage,简称外存或辅存):存储需要长期保存的各种信息。(5)输入设备(Input
5、devices):接收外界向计算机输入的信息。(6)输出设备(Output devices):将计算机中的信息向外界输送。现在的控制器和运算器是被制造在同一块超大规模集成电路中,统称为中央处理器,即CPU(Central Processing Unit)。2.2.2总线和接口总线就是一组进行互连和传输信息(指令、数据和地址)的信号线,它好比连接计算机系统各个部件之间的桥梁。另外,我们广义上通常也把AGP接口、USB接口等也称为AGP总线、USB总线。可以说总线在计算机中无处不在。1.总线的分类按总线相对于CPU或其他芯片的位置可分为内部总线(Internal Bus)和外部总线(Externa
6、l Bus)两种。在CPU内部,寄存器之间和算术逻辑部件ALU与控制部件之间传输数据所用的总线称为内部总线;而外部总线,是指CPU与内存RAM、ROM和输入/输出设备接口之间进行通信的通路。由于CPU通过总线实现程序取指令、内存/外设的数据交换,在CPU与外设一定的情况下,总线速度是制约计算机整体性能的最大因素。按总线功能来划分又可分为地址总线、数据总线、控制总线三类。我们通常所说的总线都包括上述三个组成部分,地址总线用来传送地址信息,数据总线用来传送数据信息,控制总线用来传送各种控制信号。例如ISA总线共有98条线;其中数据线有16条,地址线24条,其余为控制信号线、接地线和电源线。按总线在
7、微机系统中的位置可分为机内总线和机外总线(Peripheral Bus)两种。我们上面所说的总线都是机内总线,而机外总线是指与外部设备接口相连的,实际上是一种外设的接口标准。如目前计算机上流行的接口标准IDE、SCSI、USB和IEEE 1394等,前两种主要是与硬盘、光驱等IDE设备接口相连,后面两种新型外部总线可以用来连接多种外部设备。计算机的总线按其功用来划分主要有局部总线、系统总线、通信总线三种类型。其中局部总线是在传统的ISA总线和CPU总线之间增加的一级总线或管理层,它的出现是由于计算机软硬件功能的不断发展,系统原有的ISA/EISA等已远远不能适应系统高传输能力的要求,而成为整个
8、系统的主要瓶颈。系统总线是计算机系统内部各部件(插板)之间进行连接和传输信息的一组信号线,例如ISA、EISA、MCA、VESA、PCI、AGP等。通信总线是系统之间或微机系统与设备之间进行通信的一组信号线。2.总线标准总线标准是指计算机部件各生产厂家都需要遵守的系统总线要求,从而使不同厂家生产的部件能够互换。总线标准主要规定总线的机械结构规范、功能结构规范和电气规范。总线标准可以分为正式标准和工业标准,其中正式标准是由IEEE等国际组织正式确定和承认的标准,工业标准是首先由某一厂家提出,得到其他厂家广泛使用的标准。3.接口的分类根据外部设备与I/O模块交换数据的方式,系统接口可以分为串行和并
9、行接口两种。串行接口一次只能传送1位信息,而并行接口一次就可传送多位信息(一般为8的倍数)。串行通信又可分为异步通信方式和同步通信方式两种。并行接口数据传输率高,控制简单,通常用于高速数据通道接口;但是所需连线很多,不适于远距离传送。串行通信连线少,适于长距离传送;但是控制复杂而且传输速度较慢。4.常见接口常见的设备接口有以下几种:(1)ST506.主要用于温盘,结构简单,只完成磁盘信息的读写放大,把数据的编码解码、数据的格式转换等功能都留给I/O模块处理。其传输速率为5Mbps7Mbps,最多可支持2个硬盘,最大支持盘空间为150MB.(2)ESDI.一种通用的标准接口,不仅适用于小型温盘,
10、还适用于磁带机和光盘存储器。该接口除了完成信息的读写放大外,还要完成数据的编码解码。数据传输率5Mbps10Mbps,最多可支持4个硬盘,硬盘空间最大可达600MB.(3)IDE.IDE是最常用的磁盘接口,分为普通IDE和增强型IDE(EIDE)接口。普通IDE数据传输率不超过1.5Mbps,数据传输宽度为8位,最多可连接4个IDE设备,每个IDE硬盘容量不超过528MB.EIDE的传输率有UDMA-33、UDMA-66、UDMA-133三种,数据传输率可达12Mbps18Mbps,数据传输宽度32位,最多可连接4个IDE设备,每个IDE硬盘可超过528MB.(4)SCSI.数据宽度为8位、1
11、6位和32位,是大容量存储设备、音频设备和CD-ROM驱动器的一种标准。SCSI接口通常被看做是一种总线,可用于连接多个外设,这些SCSI设备以雏菊链(Mode daisy chain)形式接入,并被分配给唯一的ID号(07),其中7号分配给SCSI控制器。某些SCSI控制器可以提供多达35个SCSI通道。SCSI设备彼此独立运作,相互之间可以交换数据,也可以和主机进行交互。数据以分组消息的形式进行传输。最初的SCSI标准(目前又称为SCSI I)的最大同步传输速率为5Mbps,后来的SCSI II规定了2种提高速度的选择。一种为提高数据传输的频率,即Fast SCSI,由于频率提高了一倍,即
12、使数据通路仍和SCSI I同为8位宽,其最大同步传输速率也提高了一倍,达10Mbps.另一种提高速度的选择是传输频率提高一倍的同时也增大数据通路的宽度,由8位增至16位,这就是Wide SCSI,其最大同步传输速率为20Mbps.(5)PCMCIA.PCMCIA是一种广泛用于笔记本电脑的接口标准,体积小,扩展较方便灵活。最初PCMCIA主要用于笔记本电脑扩展内存,目前常用作一种存储器卡接口或进行传真、调制解调器功能扩展接口。现在用PCMCIA代表个人计算机储器卡国际协会,而PCMCIA接口更名为PC Card接口。PC Card接口具有以下特点:电源管理服务,允许系统控制PC Card的工作状
13、态(开/关),支持3.3V/5V电压,可降低功耗,支持多功能卡、扩充卡的信息结构,以提高其兼容性,规定了直接内存访问规范,增加了一个32位的Card Bus接口。(6)P1394.P1394是一种高速的串行总线,用以连接众多的外部设备。P1394有许多优于SCSI等其他外设接口的特点:数据传输率高、价格低且容易实现,所以不仅应用于计算机系统中,也广泛用于消费类电子产品,诸如数码相机、VCD等。P1394的数据速度可达400Mbps,新的标准是800Mbps.P1394接口使用雏菊链式的设备连接方式,一个端口可以支持63个设备;而且使用桥互联的方式,以树型结构配置,可以支持的设备数高达1022.
14、P1394支持设备的热插拔,即允许计算机在未关机带电的情况下插入或拔除所连接的外部设备而不会造成损害。(7)USB.USB接口是一种串行总线式的接口,在串行接口中可达到较高的数据传输率,并且也允许设备以雏菊链形式接入,最多可连接127个设备。USB的最大特点是允许热插拔,目前在便携式计算机和台式计算机中已成为标准配置。许多数码相机、闪存、视频摄像头以及打印机等都可通过USB口接入计算机。USB1.0的速度是1.2Mbps,USB2.0的速度达到了480Mbps.2.2.3流水线流水线技术是通过并行硬件来提高系统性能的常用方法,它其实是一种任务分解的技术,把一件任务分解为若干顺序执行的子任务,不
15、同的子任务由不同的执行机构来负责执行,而这些执行机构可以同时并行工作。在流水线这个知识点,主要考查流水线的概念、性能,以及有关参数的计算。1.参数计算假定有某种类型的任务,共可分成n个子任务,每个子任务需要时间t,则完成该任务所需的时间即为n?t.若以传统的方式,则完成k个任务所需的时间是knt;而使用流水线技术执行,则花费的时间是(n+k-1)t.也就是说,除了第一个任务需要完整的时间外,其他都通过并行,节省了大量的时间,只需一个子任务的单位时间就够了。另外要注意的是,如果每个子任务所需的时间不同,则其速度取决于其执行顺序中最慢的那个(也就是流水线周期值等于最慢的那个指令周期),要根据实际情
16、况进行调整。例如:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是取指2 ns,分析2 ns,执行1 ns.那么,最长的是2 ns.要注意的是,在设计流水线的周期时,是以执行时间最长的那一个部分为标准的。因此100条指令全部执行完毕需要的时间就是:(2+2+1)+(100-1)2 = 203 ns.另外,还应该掌握几个关键的术语:流水线的吞吐率、加速比。流水线的吞吐率(ThroughPut rate,TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量。完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比(speedup ratio
17、)。例如:在上述例子中,203 ns的时间内完成了100条指令,则从指令的角度来看,该流水线的吞吐率为(100109)/203=4.93108/s(1s=109ns),加速比为500/203=2.46(如果不采用流水线,则执行100条指令需要500 ns)。2.影响流水性的主要因素流水线的关键在于重叠执行,因此如果这个条件不能够满足,流水线就会被破坏。这种破坏主要来自三种情况:(1)转移指令因为前面的转移指令还没有完成,流水线无法确定下一条指令的地址,因此也就无法向流水线中添加这条指令。从这里的分析可以看出:无条件跳转指令是不会影响流水线的。(2)共享资源访问的冲突也就是后一条指令需要使用的数
18、据,与前一条指令发生的冲突,或者相邻的指令使用了相同的寄存器,这也会使得流水线失败。为了避免冲突,就需要把相互有关的指令进行阻塞,这样就会引起流水线效率的下降。一般来说,指令流水线级数越多,越容易导致数据相关,阻塞流水线。当然,也可以在编译系统上进行设置,当发现相邻的语句存在资源共享冲突的时候,在两者之间插入其他语句,将两条指令进入流水线的时间拉开,以避免错误。(3)响应中断当有中断请求时,流水线也会停止。流水线响应中断有两种方式:一种是立即停止现有的流水线,称为精确断点法,这种方法能够立即响应中断,缩短了中断响应时间,但是增加了中央处理器的硬件复杂度;还有一种是在中断时,在流水线内的指令继续
19、执行,停止流水线的入口,当所有流水线内的指令全部执行后,再执行中断处理程序。这种方式中断响应时间较长,这种方式称为不精确断点法,优点是实现控制简单。2.3数据运算这部分内容考查的知识点,主要是数据的各种码制表示、ASCII码、奇偶校验码、海明码、汉字的内码,以及算术移位、逻辑移位、逻辑运算。2.3.1数据的表示在计算机中,数据的表示方式有二进制、八进制、十进制和十六进制,我们要掌握的是这4种进制之间的数据转换方法。在我们的日常生活中,通常采用的是十进制来表示数,它已经广泛地被人们所接受。但是由于计算机底层使用的电路硬件通常只能够清晰地表示两种状态,即开和关,或者说高电平和低电平。如果使用十进制
20、,将会使得计算机底层的设计变得过于复杂,而且容易出错,因此通常采用二进制来表示数。R进制,通常说法就是逢R进1.可以用的数为R个,分别是0,1,2,,R-1.例如八进制数的基数为8,即可以用到的数码个数为8,它们是0,1,2,3,4,5,6,7.二进制数的基数为2,可用的数码个数为2,它们是0和1.对于十六进制,它的数码为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.为了把不同的进制数分开表示,避免造成混淆,通常采用下标的方式来表示一个数的进制,如十进制数88表示为:(88)10,八进制数76表示为:(76)8.在计算机专业术语的表达中,通常在数字的后面加大写H表示十六进制,
21、例如,FCH就表示十六进制数FC.1.R进制数转换成十进制数对于任意一个R进制数,它的每一位数值等于该位的数码乘以该位的权数。权数由一个幂表示,即幂的底数是R,指数为k,k与该位和小数点之间的距离有关。当该位位于小数点左边,k值是该位和小数点之间数码的个数,而当该位位于小数点右边,k值是负值,其绝对值是该位和小数点之间数码的个数加1.例如,八进制数234.56,其数值可计算如下:234.56=282+381+480+58-1+68-2=128+24+4+5/8+6/64= 156.71875又如,二进制数l0100.01的值可计算如下:10100.01=124+122+12-2=16+4+0.
22、25 = 20.25按照上面的表示法,即可计算出R进制数转换成十进制数的值。2.十进制转换为R进制十进制整数转换成R进制数,最常用的是除以R取余法.例如,将十进制数94转换为二进制数:将所得的余数从低位到高位排列,(1011110)2就是94的二进制数。十进制小数转换为R进制小数,则采用乘以R取进位法.例如,将十进制小数0.43转换成二进制小数的过程如下(假设要求小数点后取5位):即转换后的二进制小数为(0.01101)2.3.二进制与八进制的转换将二进制数转换为八进制数,以小数点为分界线,分别从右到左(整数部分)和从左到右(小数部分),将每3位二进制数转换为八进制数即可,最后不足3位的,则在
23、最高位补0(整数部分)或最低位补0(小数部分)。例如,二进制数1011110转换为八进制数,则可以分为3段(001,011,110),其对应的八进制数为(1,3,6),因此,(1011110)2=(136)8.又如,二进制数l0100.0101转换为八进制数,则需要在整数部分的最高位补1个0,在小数部分的最低位补2个0,然后分为4段(010,100,010,100),其对应的八进制数为(2,4,2,4),因此,(l0100.0101)2=(24.24)8.相反,将八进制数转换为二进制数,只要将每位八进制数转换为3位二进制数即可。例如,八进制数56.23转换为二进制数,因为5=101,6=110
24、,2=010,3=011,所以(56.23)8=(101110.010011)2.4.二进制与十六进制的转换将二进制数转换为十六进制数,以小数点为分界线,分别从右到左(整数部分)和从左到右(小数部分),将每4位二进制数转换为八进制数即可,最后不足4位的,则在最高位补0(整数部分)或最低位补0(小数部分)。例如,二进制数1011110转换为十六进制数,则可以分为2段(0101,1110),其对应的十六进制数为(5,E),因此,(1011110)2=5EH.又如,二进制数1l0100.10111转换为十六进制数,则需要在整数部分的最高位补2个0,在小数部分的最低位补3个0,然后分为4段(0011,
25、0100,1011,1000),其对应的十六进制数为(3,4,B,8),因此,(110100.10111)2=34.B8H.相反,将十六进制数转换为二进制数,只要将每位十六进制数转换为4位二进制数即可。例如,十六进制数D6.C3H转换为二进制数,因为D=1101,6=0110,C=1100,3=0011,所以D6.C3H=(11010110.11000011)2.2.3.2各种码制本节主要掌握原码、反码、补码和移码的概念,以及各自的用途和优点。1原码将最高位用做符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值的表示形式。这种方式是最容易理解的。例如,假设用8位表示一个数,则+11
26、的原码是00001011,11的原码是10001011。直接使用原码在计算时会有麻烦。例如,(1)10+(1)10= 0。如果直接使用原码,则:(00000001)2+(1000001)2= (10000010)2这样计算的结果是2,也就是说,使用原码直接参与计算可能会出现错误的结果。所以,原码的符号位不能直接参与计算,必须和其他位分开,这样会增加硬件的开销和复杂性。2反码正数的反码与原码相同。负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。例如,11的反码为11110100。同样,对上面的加法,使用反码的结果是:(00000001)2+ (11111110)2= (11111111
27、)2结果再转回原码,这样的结果是负0,而在人们普遍的观念中,0是不分正负的。反码的符号位可以直接参与计算,而且减法也可以转换为加法计算。3补码正数的补码与原码相同。负数的补码是该数的反码加1,这个加1就是“补”。例如,11的补码为11110100+1 = 11110101。再次做以上的加法,是这样的:(00000001)2+ (11111111)2= (00000000)2这说明,直接使用补码进行计算的结果是正确的。也就是说,补码中0是唯一表示的。对一个补码表示的数,要计算其原码,只要对它再次求补。由于补码能使符号位与有效值部分一起参加运算,从而简化了运算规则,同时它也使减法运算转换为加法运算
28、,进一步简化计算机中运算器的电路,这使得在大部分计算机系统中,数据都使用补码表示。4移码移码又称为增码,移码的符号表示和补码相反,1表示正数,0表示负数。也就是说,移码是在补码的基础上把首位取反得到的,这样使得移码非常适合于阶码的运算,所以移码常用于表示阶码。5数据表示范围对于原码、反码和补码,假设用n位表示数据(二进制),则各种表示方法的表示范围如表2-3所示。表2-3 各种码制所表示数的范围2.3.3奇偶校验码奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。如果是采用奇校验,在传送每一个数据(一般是1个字节)的时候另外附加一位作为校验位,当实际数据
29、中1的个数为偶数的时候,这个校验位就是1.否则,这个校验位就是0,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中1的个数,如果是奇数,表示传送正确。否则,表示传送错误。偶校验的过程和奇校验的过程一样,只是检测数据中1的个数为偶数。当实际数据中1的个数为偶数的时候,这个校验位就是0,否则这个校验位就是1.这样,就可以保证传送数据满足偶校验的要求。在接收方收到数据时,将按照偶校验的要求检测数据中1的个数,如果是偶数个1,表示传送正确。否则,表示传送错误。例如,某数据的7位编码为0110101,若在其最高位之前增加一位偶校检位,则编码为00110101.例如
30、,在某次通信中,发送方发送了一个8位的数据(包含一个奇校验位),若传输过程中有差错,则接收方可检测出该8位数据奇数个位出错。因为奇校验码是添加1位校验位,根据信息码中1的个数来决定校验位的取值,使得填入校验位后,1的个数为奇数。也就是对收到的信息码按位做异或运算的结果应该是1,如果有偶数个位出错,那么异或的结果是相同的,因此无法检测出错误,只有当奇数个位出错时,才会导致异或运算的结果为0,从而检测出错误。2.3.4海明码海明码是奇偶校验的另一种扩充,和奇偶校验不同之处在于海明码采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校
31、验位组合,可以达到发现错误,纠正错误的目的。假设数据位有m位,如何设定校验位k的长度才能满足纠正一位错误的要求呢?我们这里做一个简单的推导。k位的校验码可以有个值。显然,其中一个值表示数据是正确的,而剩下的-1个值意味着数据中存在错误,如果能够满足:-1m + k (m + k为编码后的总长度),在理论上k个校验码就可以判断是哪一位(包括信息码和校验码)出现问题。确定了k的值后,如何确定每k位中的每一位对哪些数据进行校验呢?这是一个问题。上面的推导只是说能够做的,那么如何达到纠错的目的呢?但是,考试中都会列出海明校验方程。例如:其中表示逻辑加。在一般情况下,校验码会被插入到数据的1、2、4、8
32、、2n位置,那么,在数据生成时,按照提供的海明校验方程计算出b1、b2、b4、bn,在数据校验时,按照海明检验方程进行计算,如果所有的方程式计算都为0,则表示数据是正确的。如果出现1位错误,则至少有一个方程不为0.海明码的特殊之处在于,只要将三个方程左边计算数据按排列,得到的二进制数值就是该数据中出错的位,例如第6位出错,则为110为二进制数6.当出现两位错误时,这种海明码能够查错,但无法纠错。2.3.5CRC码一个二进制数可以用一个多项式来表示。例如,1011表示为多项式x3+x1+x0,在这里,x并不表示未知数这个概念,如果把这里的x替换为2,这个多项式的值就是该数的值。从这个转换我们可以
33、看出,多项式最高幂次为n,则转换为二进制数有n+1位。在循环冗余校验码(CRC码)中,编码是由K位信息码,加上R位的校验码组成。由K位信息码如何生成R位的校验码的关键在于生成多项式。这个多项式是编码方和解码方共同约定的,编码方将信息码的多项式除以生成多项式,将得到的余数多项式作为校验码;解码方将收到的信息除生成多项式,如果余数为0,则认为没有错误,如果不为0,余数则作为确定错误位置的依据。和海明码的校验方程一样,生成多项式非常重要。但是,在考试中会直接给出,所以,我们并不要去关心如何生成多项式。生成多项式并非任意指定,它必须具备以下条件:最高位和最低位为1,数据发生错误时,余数不为0,对余数补
34、0后,继续做按位除,余数循环出现,这也是冗余循环校验中循环一词的来源。校验码的生成步骤如下。(1)将K位数据C(x)左移R位,给校验位留下空间,得到移位后的多项式:C(x)xR.(2)将这移位后的信息多项式除生成多项式,得到R位的余数多项式。(3)将余数作为校验码嵌入信息位左移后的空间。例如,信息位为10100110,生成多项式为a(x)=x5+x4+x+1,则:得到余式为x4+x3,即校验码为11000,所以得到CRC码是:1010011011000.CRC的纠错能力取决于K值和R值。在实践中,K值往往取得非常大,远远大于R的值,提高了编码效率。在这种情况下,循环冗余校验就只能检错不能纠错。
35、一般来说,R位生成多项式可检测出所有双错、奇数位错和突发错位小于或等于R的突发错误。使用循环冗余校验码能用很少的校验码检测出大多数的错误,检错能力是非常强的,这是它得到了广泛应用的原因。CRC由于其实现的原理十分易于用硬件实现,因此广泛地应用于计算机网络上的差错控制。而且由于它采用的是模二除进行验算,因此十分适合于以串行同步方式传送数据块。2.3.6BCD码BCD码也称为8421码,是二进制编码的十进制表示。BCD码使用4个二进制数来表示一位十进制数。例如,十进制数的138的BCD码表示为:0001 0011 1000.由于BCD码的特性,如果使用BCD码进行计算时,可能需要进行修正。例如,计
36、算3+5,对应的BCD码表示为0011+0101=1000,即答案为8,这是正确的。但是,如果我们计算6+7,对应的BCD码表示为0110+0111=1101,这已经不在BCD码的范围里,此时需要进行修正。修正的方法是本位加6,并向高位进1.还有一种编码是将BCD码加3作为数字表示法,称为余3码。在使用余3码进行计算时,从最高位产生的进位是真正的进位,对每4位的结果,如果是小于等于9的,则减3,如果大于9,则加3.前面讨论的是用4位二进制数来表示1位十进制数,这是压缩的BCD码。非压缩BCD码就是分别用二进制符号数来表示各个位置上的数。例如,某二进制无符号数11101010,转换为三位非压缩B
37、CD数,按百位、十位和个位的顺序表示,应为00000010 00000011 00000100.因为二进制无符号数11101010转成十进制就是234,其百位应表示为00000010,十位应表示为00000011,个位应该表示为00000100.2.3.7ASCII码为了表示英文字母和其他一些符号、控制符,计算机中普遍采用的是ASCII码。它使用7位代表一个字符,包括了字母的大小写、数字、标点、控制符等。计算机通常使用8位一个字节来存储。在前面的知识点中,我们讨论了数值型数据的表示方法。除了数值型之外,字符也是计算机中使用最多的信息形式之一。要在计算机内进行表示,就需要给每个字符指定一个确定的
38、编码,作为识别与使用这些字符的依据。常见的英文字符编码如表2-4所示。表2-4 常见英文字符编码2.3.8汉字的内码汉字和拼音文字不同,拼音文字只需要定义少量的字母和符号的编码即可完成所有文字的保存、显示任务。而汉字存在大量的单字,为了让计算机能够处理汉字,必须对汉字进行单独的编码。1.汉字编码汉字国标码(GB 2312-80)共收集常用汉字6 763个,其中一级汉字3 755个,按拼音排序;二级汉字3 008个,按部首排序;各种图形符号682个,共计7 445个。每个汉字、图形符号都采用两个字节表示,每个字节只使用低7位编码。可达到的最大容量是16 384个。BIG5编码俗称大五码,是普遍使
39、用的繁体汉字的编码标准,包括440个符号,一级汉字5 401个,二级汉字7 652个,共计13 060个汉字。GBK编码是中国大陆制定的中文编码扩展国家标准,该编码标准兼容GB 2312,共收录汉字21 003个、符号883个,并提供1 894个造字码位,其特点是简、繁体字融于一库。GB 18030-2000在原来的GB 2312-80 编码标准和GBK编码标准的基础上进行扩充,增加了4字节部分的编码。向上则兼容ISO 10646,共有150多万个码位。它在原来的2万多汉字的基础上增加了7 000多个汉字的码位和字型,从而汉字达到27 000多个。它能有效地解决一些生、偏、难字的问题,适用于需
40、要的人名、地名用字的系统。支持GB 13000.1-1993的全部中日韩(CJK)统一汉字字符和全部中日韩统一汉字Extension A和Extension B的字符。2.机内码汉字机内码采用的是两个字节的编码,而每个编码只使用低7位,这样就和ASCII混淆了,因此在机内表示时将每个字节的最高位置为1.汉字机内码与国标码的关系为:机内码=国标码+8080H.例如,已知汉字大的国标码为3473H,其机内码为3473H+8080H=B4F3H.如果每个点用1位,则存储一个2424点阵的汉字需用24*24/8=72字节(1字节=8位)。2.3.9逻辑运算在本知识点中,主要考查算术移位、逻辑移位、逻辑
41、运算等。在计算机中,运算可以分为算术运算和逻辑运算。逻辑变量之间的运算称为逻辑运算。二进制数1和0在逻辑上可以代表真与假、是与否、有与无.这种具有逻辑属性的变量就称为逻辑变量。逻辑运算与算术运算的主要区别是:逻辑运算是按位进行的,位与位之间不像加减运算那样有进位或借位的联系。逻辑运算主要包括三种基本运算,分别是逻辑加法(或运算)、逻辑乘法(与运算)和逻辑否定(非运算)。此外,异或运算(半加运算)也很有用。1.逻辑加法逻辑加法通常用符号+或来表示。逻辑加法运算规则如下:0+0=0,00=00+1=1,01=11+0=1,10=11+1=1,11=1从上式可见,逻辑加法有或的意义,因此,也称为逻辑
42、或运算。也就是说,在给定的逻辑变量中,A或B只要有一个为1,其逻辑加的结果就为1,只有两者都为0时,逻辑加的结果才为0.例如,某逻辑电路有两个输入端分别是X和Y,其输出端为Z.当且仅当两个输入端X和Y同时为0时,输出Z才为0,则该电路输出Z的逻辑表达式为X+Y.2.逻辑乘法逻辑乘法通常用符号或或来表示。逻辑乘法运算规则如下:00=0,00=0,00=001=0,01=0,01=010=0,10=0,10=011=1,11=1,11=1不难看出,逻辑乘法有与的意义,因此,也称为逻辑与运算。它表示只当参与运算的逻辑变量都同时取值为1时,其逻辑乘积才等于1.只要有一个逻辑变量为0,其结果就为0.例如
43、,用二进制数0与累加器X的内容进行与运算,并将结果放在累加器X中,一定可以完成对X的清0操作。3.逻辑否定逻辑否运算又称为逻辑非运算。其运算规则为:4.异或逻辑运算异或运算通常用符号表示,其运算规则为:00=0,01=1,10=1,11=0即两个逻辑变量相异(一个为0,另一个为1),结果才为1.例如,在进行定点原码乘法运算时,乘积的符号位是被乘数的符号位和乘数的符号位通过异或运算来获得。因为原码的符号位表示数的正负,0表示正数,1表示负数。被乘数和乘数都是正数时,值为正数;都为负数时,值也为正数;只有当一个数是正数,另一个数是负数时,值才为负数。我们在前面所举的例子都是一位数的操作,事实上,多
44、位数进行逻辑运算时,也是按照逐位运算的规则进行的。例如,8位累加器A中的数据为FCH,若将其与7EH相异或,则累加器A中的数据为82H.因为将FCH和7EH转换为二进制数,得到11111100和01111110,根据异或的运算规则,可以得到10000010,然后将10000010转换成十六进制,得到82H.5.移位在计算机中,实现乘除运算的方案有三种:软件实现、通过逻辑线路来将乘除运算变换为移位操作;设置专有的乘法、除法器。其中以采用移动操作来实现居多。而移位操作主要包括算术移位、逻辑移位和循环移位三种,如表2-5所示。表2-5 移位操作的类型例如,对8位累加器A中的数据7EH,如果逻辑左移一
45、次,则累加器A中的数据为FCH.因为十六进制数7EH转换成二进制为01111110,根据表2-5关于逻辑移位的描述,在移位时不需要考虑符号位,因此,只需将数左移一位,右边空出来的部分补零,这样就得到二进制数11111100,再转换成十六进制表示就是FCH.不同码制机器数移位后的空位填补规则如表2-6所示。表2-6 空位填补规则说明:(1)机器数为正时,不论左移或右移,空位均添0.(2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0.(3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部空位添1.(4)分析任意负数的补码可发
46、现,当对其由低位向高位找到第一个1时,在此1左边的各位均与对应的反码相同,而在此1右边的各位(包括此1在内)均与对应的原码相同,即添0;右移时因空位出现在高位,则添补的代码应与反码相同,即添1.例如,补码10110100算术右移2位的结果是11101101.因为最高位为1,表示是负数,1作为符号位保持不动,其他各位向右移动2位(011011001101),这样,左边就空了2位,根据表2-6的规则,这里应该补1,则变为1101101,再加上符号位1,最后结果为11101101.2.4指令系统本知识点主要考查指令的执行过程、寻址方式等。2.4.1寻址方式在计算机中,CPU都会定义出自己特定的指令系统,不过都遵循着统一的标准格式。指令的基本格式是由操作码和地址码两部分组成。操作码指出该指令要完成什么操作,地址码则是提供原始的数据。指令系统中定义操作码的方式可以分为规整型(即定长编码)和非规整型(变长编码)两种,如表2-7所示。表2-7
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100