1.4 计算机硬件基础

1.4.1 计算机中数的表示和运算

计算机中使用的数据一般可以分为两大类:数值数据与字符数据。数值数据常用于表示数的大小与正负;字符数据则用于表示非数值的信息,如:英文、汉字、图形、语音等数据。数据在计算机中是以器件的物理状态(开、关状态)来表示的,因此,各种数据在计算机中都是用二进制编码的形式来表示的。

1.进位计数制

按进位的原则进行计数的方法,称为进位计数制。

例如,在十进位计数制中,是根据“逢十进一”的原则进行计数的。

一个十进制数,它的数值是由数码0、1、…、9来表示的。数码所处的位置不同,代表数的大小也不同。从右面起的第一位是个位,第二位是十位,第三位是百位,第四位是千位……“个、十、百、千……”在数学上叫做“位权”或“权”。每一位上的数码与该位“位权”的乘积表示该位数值的大小。另外,十进位计数制中的10,称为基数。基数为10的进位计数制按“逢十进一”的原则进行计数。

“位权”和“基数”是进位计数制中的两个要素。

在微机中,常用的是十进制、二进制、十六进制,它们对应的关系见表1-1。

表1-1 十进制数、二进制数、十六进制数的关系

(1)十进制数

十进制数563.62可表示为:

(563.62)10 = 5 × (10)2 + 6 × (10)1 + 3 × (10)0 + 6 × (10)-1 + 2 × (10)-2

一般来说,任意一个十进制数N可表示为:

式中,m、n均为正整数,m表示小数部分的位数,n表示整数部分的位数;Ki是0~9中的某一个,10i是权。

(2)二进制数

二进制数的基数是2,即“逢二进一”,它使用数字0和1两个数码。利用0和1可以表示开关的通、断状态。其表示方法如下:

(10111.101)2=1 × 24 + 0 × 23 + 1 × 22 + 1 × 21 + 1 × 20 + 1 × 2-1 + 0 × 2-2 + 1 × 2-3

也可以将一个二进制数表示为:

式中,n表示整数部分的位数,m表示小数部分的位数;Ki是1或0,2i是权。

(3)十六进制数

十六进制数是0~9、A~F,其中A~F分别代表10~15;其基数为16,即“逢十六进一”。其表示方法如下:

(2AC7.1F)16 = 2 × 163 + 10 × 162 + 12 × 161 + 7 × 160 + 1 × 16-1 + 15 × 16-2

2.不同进制数之间的转换

(1)十进制数与二进制数之间的转换

① 十进制整数转换成二进制整数

十进制整数转换成二进制整数,通常采用“除2取余法”。所谓除2取余法,就是将已知十进制数反复除以2,若每次相除之后余数为1,则对应于二进制数的相应位为1;余数为0,则相应位为0。第一次相除得到的余数是二进制数的低位,最后一次相除的余数是二进制数的高位。从低位到高位逐次进行,直到商为0。最后一次相除所得的余数为Kn-1,则Kn-1 Kn-2…K1 K0即为所求之二进制数。

【例1-1】 将(215)10转换成二进制整数。其全过程可表示如下:

所以 (215)10 = (K7K6K5K4K3K2K1K02 = (11010111)2

② 十进制纯小数转换成二进制纯小数

十进制纯小数转换成二进制纯小数,通常采用“乘2取整法”。所谓乘2取整法,就是将已知十进制纯小数反复乘以2,每次乘以2之后,所得新的整数部分为1,相应位为1;如果整数部分为0,则相应位为0。从高位向低位逐次进行,直到满足精度要求或乘以2后的小数部分为0为止。最后一次乘以2所得的整数部分为K-m。转换后,所得的纯二进制小数为0.K-1K-2…K-m

【例1-2】 将(0.6531)10转换成纯二进制小数。转换过程如下:

如只取六位小数能满足精度要求,则得:

(0.6531)10= (0.K-1K-2…K-m2≈(0.K-1K-2K-3K-4K-5K-6) = (0.101001)2

可见,十进制纯小数不一定能转换成完全等值的二进制纯小数。当遇到这种情况时,可根据精度要求,取近似值。

③ 十进制数转换成二进制数

【例1-3】 将(215.6531)10转换为二进制数。

④ 二进制数转换成十进制数

【例1-4】 将二进制数11001.1001转换成十进制数。

(2) 二进制数与十六进制数之间的转换

① 二进制数转换成十六进制数

对于二进制整数,只要自右向左将每四位二进制数分为一组,不足四位时,在左边添0,补足四位;对于二进制小数,只要自左向右将每四位二进制数分为一组,不足四位时,在右边添0,补足四位。然后将每组用相应的十六进制数代替,即可完成转换。

【例1-5】 把(101101101.0100101)2转换成十六进制数。

② 十六进制数转换成二进制数

将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。

【例1-6】 将(1863.5B)16转换成二进制数。

3.带符号数的表示及运算

在应用中数字有正有负,计算机中该如何表示呢?计算机中所能表示的数或其他信息都是数字化的,即用数字0或1来表示数的正负号。一个数的最高位为符号位,若该位为0,则表示正数;若该位为1,则表示负数。

【例1-7】 用八位二进制数表示+20和-20分别为:

其中第一位为符号位。这种在计算机中使用的、连同数符一起数字化了的数,就称为机器数;而真正表示数值大小的部分,并按一般书写规则表示的原值称为真值。即:

也就是说,在机器数中用0或1取代了真值形式的正负号。

计算机中对带符号数的表示方法有原码、反码、补码三种。下面将分别介绍。

(1)原码

如上所述,正数的符号位用0表示,负数的符号位用1表示。这种表示法就称为原码。

在原码表示时,+105和-105的数值位相同,而符号位不同。

(2)反码

正数的反码和原码形式相同,负数的反码是将符号位除外,其他各位逐次取反。

(3)补码

补码表示是为了方便加减运算(把减法变为加法),这在计算机中特别实用。

补码规则为:正数的补码和其原码形式相同,负数的补码是将它的原码除符号位以外逐位取反,最后在末位加1。

例如 : X=+8 [X]=00001000 [X]=0 0001000

例如: X=-8 [X]=1 0001000 [X]=1 1110111 [X]=1 1111000

例如: X=44 Y=-57

4.二进制编码

在计算机中,数是用二进制表示的。计算机应能识别和处理各种字符,如大小写的英文字母,标点符号等。这些字符应如何表示呢?由于计算机中的基本物理器件是具有两种状态的器件,所以各种字符只能用若干位二进制码的组合来表示,这就是二进制编码。

(1)二进制编码的十进制数

因为二进制数的实现比较容易、可靠,且二进制数的运算规律十分简单,所以,在计算机中采用二进制。但是,二进制数不直观,于是在计算机的输入和输出时通常还是采用十进制数表示。不过这样的二进制数要用二进制编码来表示。

一位十进制数用四位二进制编码来表示。常用的8421码是BCD码的一种。

【例1-8】 将4978用BCD代码可表示为:

表1-2列出一部分编码关系。

表1-2 BCD编码表

(2)字符、文字的编码

由于计算机内部存储、传送及处理的信息只有二进制信息,因此各种文字、符号也就必须用二进制数编码表示。

ASCII码是美国标准信息码,它采用七位二进制数(b7b6b5b4b3b2b1)表示128个符号。例如:0~9的ASCII码为30H~39H;大写字母A~Z的ASCII码为41H~5AH。ASCII编码见表1-3。

表1-3 ASCII编码

5.位、字节和字的基本概念

计算机存储信息的最小单位是“位”,是指二进制数中的一个数位,一般我们称之为比特(bit),其值为“0”或“1”。

在计算机中,我们常使用字节(Byte)作为计量单位,一个字节由8个二进制位组成,其最小值为0,最大值为(11111111)2=(FF)16=255。一个字节对应计算机的一个存储单元,它可存储一定的内容,例如存储一个英文字母“A”的编码,其对应的内容为“01000001”。由于计算机中有很多个存储单元,我们还需要将它们的地址进行编码。若存储器容量为1024字节(简称为1K字节),就需要用210=1024个地址编码。有时我们又将两个字节合称为一个字(Word)。

6.算术与逻辑运算

(1)算术运算

算术的基本运算有四种算法:加、减、乘、除。

① 二进制加法

二进制加法的运算规则为:

0+0=0 0+1=1+0=1 1+1=0(进位1) 1+1+1=1(进位1)

例如:

② 二进制减法

二进制减法的运算规则为:

0-0=0 1-1=0 1-0=1 0-1=1(有借位)

例如:

③ 二进制乘法

二进制乘法的运算规则为:

0×0=0 0×1=0 1×0=0 1×1=1

例如:

④ 二进制除法

例如:

(2)逻辑运算

布尔代数主要研究如何对事物内部的逻辑关系进行表达和运算。逻辑数据只有两个值,“真”和“假”。逻辑运算主要有以下几种。

① 与运算(Y=A∧B)

与运算也称为逻辑乘法运算,通常用符号“· ”或“∧”、“×”表示。它的运算规则为:

0∧0=0 1∧0=0 0∧1=0 1∧1=1

这种运算的结果也可以归纳为两句话:二者皆为真则结果为真,有一为伪则结果必伪。

例如:设A=11001010,B=00001111,则

由此可见,用“0”去和一个数位相“与”,其运算结果为0;用“1”去和一个数位相“与”,就是将此数位“保存”下来。

② 或运算(Y=A∨B)

“或”运算也称逻辑加法,常用符号“+”或“∨”表示。它的运算规则为:

0∨0=0 0∨1=1 1∨0=1 1∨1=1

上述四个式子与一般加法不同,Y的值只能有两个数值0或1。上面四个式子可以归纳成两句话:两者皆伪则结果必伪,有一为真则结果为真。

例如:设A=10101,B=11011,则:

注意:1“或”1等于1,是没有进位的。

③ 反运算(Y=A

反运算又称非运算,为逻辑否定。如果一事物的性质为A,则经过“反”运算之后,其性质必与A相反,用表达式表示为:Y=A。其运算规则为:

0=1读成“非0等于1”

1= 0读成“非1等于0”

当A为多位数时,如A=A1A2A3…An,则其“逻辑反”为:Y=A1A2A3An

例如:设A=1101000,则:Y=A=0010111。

④ 异或运算(Y=A⊕B)

异或运算通常用符号“⊕”表示。它的运算规则为:

0⊕0=0 0⊕1=1 1⊕0=1 1⊕1=0

同样,异或运算结果也可归纳成两句话:只要两逻辑变量相同,则异或运算的结果就为0;当两个逻辑变量不同时,异或运算的结果为1。

当A或B为二进制数时,则进行异或运算时,各对应位分别进行异或运算。

例如:设A=1010,B=1101,则:

1.4.2 微型计算机的基本组成电路

计算机是由若干个基本电路单元组成的。本小节对微机中最常见的基本电路做一简单介绍,这些电路是组成计算机的硬件基础。

1.常用逻辑电路

逻辑电路是计算机执行运算、控制功能所必需的电路,是计算机的基本单元电路。

逻辑电路中,其输入和输出只有两种状态,即高电平和低电平。通常以逻辑1和0表示电平的高低。下面简单介绍常用逻辑电路的逻辑符号和逻辑功能。具体电路可参看有关书籍。

(1)与门

与门是一个能够实现逻辑乘运算的、具有多端输入/单端输出的逻辑电路。图1-1(a)所示是一个二输入的与门,其逻辑函数式是:

Y=A∧B,或Y=A·B

常用逻辑电路的真值表如表1-4所示。

图1-1 常用逻辑单元图形符号

表1-4 常用逻辑电路真值表

(2)或门

或门是一个能够实现逻辑加运算的、具有多端输入/单端输出的逻辑电路。图1-1(b)就是一个二输入的或门,其逻辑函数式是:

Y=A∨B

(3)非门

非门是一个能够完成逻辑非运算的、具有单端输入/单端输出的逻辑电路。图1-1(c)就是非门电路,其逻辑函数式是:

Y=A

(4)异或门

异或门是一个能够完成逻辑异或运算的多端输入/单端输出的逻辑电路。图1-1(d)就是一个二输入的异或门,其逻辑函数式是:

Y=A⊕B

(5)与非门

与非门是一个能够完成逻辑与非运算的多端输入/单端输出的逻辑电路。图1-1(e)就是一个二输入的与非门,其逻辑函数式是:

Y=A∧B

(6)或非门

或非门是一个能够完成逻辑或非运算的多端输入/单端输出的逻辑电路。图1-1(f)就是一个二输入的或非门,其逻辑函数式是:

Y=A∨B

2.触发器

触发器是计算机记忆装置的基本单元,它具有把以前的输入“记忆”下来的功能,一个触发器能储存一位二进制代码。下面简要介绍几种计算机中常用的触发器。

(1)RS触发器

RS触发器的逻辑符号如图1-2所示。它有两个输入端,两个输出端。其中S为置位信号输入端,R为复位信号输入端;Q和Q为输出端。规定Q为高电平,Q为低电平时,该触发器为1状态;反之为0状态。其真值表如表1-5所示。

(2)D触发器

D触发器又称数据触发器,它的逻辑符号如图1-3所示。R、S分别为置0、置1端,触发器的状态由时钟脉冲到来时,D端的状态决定。当D=1时,触发器为1状态;反之为0状态。其真值表如表1-6所示。

图1-2 RS触发器的逻辑符号

图1-3 D触发器的逻辑符号

表1-5 RS触发器真值表

表1-6 D触发器真值表

(3)JK触发器

JK触发器的逻辑符号如图1-4所示。R、S分别为直接置0端和置1端。K为同步置0输入端,J为同步置1输入端。其真值表如表1-7所示。

图1-4 JK触发器的逻辑符号

表1-7 JK触发器真值表

JK触发器的逻辑功能比较全面,因此在各种寄存器、计数器、逻辑控制等方面的应用最为广泛。但在某些情况下,如二进制计数、移位、累加等,多用D触发器。因为D触发器的线路简单,所以大量应用于移位寄存器等方面。

3.寄存器

寄存器是由触发器组成的。一个触发器就是一个一位寄存器。多个触发器就可以组成一个多位寄存器。

(1)锁存器

它是用以暂存某个数据,以便在适当的时间节拍将数据输入或输出到其他记忆元件中去。图1-5是一个并行输入与并行输出的四位锁存寄存器的电路原理图,它由四个D触发器组成。

开始时,先在清0端加清0脉冲,把各触发器置0,即Q端为0。然后将数据加到触发器的D输入端,在CLK时钟信号作用下,输入端的信息就保存在各触发器中(D0~D3)。

图1-5 四位锁存寄存器的电路原理图

(2)移位寄存器(Shifting Register)

移位寄存器能将所储存的数据逐位向左或向右移动,以达到计算机运行过程中所需的功能。图1-6所示即为一串行输入四位移位寄存器电路。

开始时,先在清0端加清0脉冲,使触发器输出置0。将第一个数据D0加到触发器1的串行输入端,在第一个CLK脉冲到达时Q0= D0, Q1= Q2= Q3=0;然后将第二个数据D1加到串行输入端,在第二个CLK脉冲到达时,Q0= D1, Q1= D0, Q2= Q3=0。依此类推,当第四个CLK来到之后,各输出端分别是,Q0= D3, Q1= D2, Q2= D1, Q3= D0。输出数据可用串行的形式取出,也可用并行的形式取出。

图1-6 四位移位寄存器

(3)计数器(Counter)

计数器也是由若干个触发器组成的寄存器,它的特点是能够对时钟脉冲进行计数等。

图1-7所示为计数器的电路原理图。图中各位的J、K输入端都是悬浮的。这相当于J、K输入端都是置1的状态,即各位都处于准备翻转的状态。只要时钟脉冲边沿一到,最右边的触发器就会翻转,即由0转为1或由1转为0。

图1-7中的计数器是四位的,因此可以计0~15的数。如果要计更多的数,就需要加位数,如八位计数器可计0~255的数,16位则可以计0~65535的数。

图1-7 计数器的电路原理图

(4)三态门(三态寄存器)

微型计算机的总线“共享”总线通道,能正确实现信息源与信息目的地的对应传输。采用三态门电路(或称三态门)把部件与总线相连。当部件不工作时,与总线相连的三态输出电路处于高阻态,犹如与总线断开一样,对总线不产生影响。

所谓三态是指输出电路具有0态(开通,传输“0”)、1态(开通,传输“1”)、高阻态(断开/悬浮输出)。图1-8给出了总线结构上广泛采用的单向和双向三态门的电路原理。三态门“开”或“关”的控制信号一般由微处理器发出。双向三态门由两个单向三态门构成,又称做双向电子开关。工作时,用两个单向三态门互斥的控制端信号来选通传输方向。

图1-8 总线结构上采用的三态电路

三态门一般具有较高的输入阻抗和较低的输出阻抗,可以改善传输特性,故对传输数据起到缓冲作用,同时能对传输的数据进行功率放大,具有一定的驱动能力。所以三态门电路还被称为数据缓冲/驱动电路。

当控制端E=1时,输出等于输入,此时总线由该器件驱动,总线上的数据由输入数据决定。当E=0时,输出端呈高阻抗状态,该器件对总线不起作用。当寄存器的输出端接至三态门,再将三态门的输出端与总线连接起来,就构成三态输出的缓冲寄存器。图1-9所示即为一个四位的三态输出缓冲寄存器。因图中采用的是单向三态门,所以数据只能从寄存器输出至数据总线。如果要实现双向传送,则要用双向三态门,见图1-8(b)。

图1-9 三态输出缓冲寄存器

(5)译码器

微机中广泛采用地址译码器来对存储器或输入/输出设备进行选择,操作其工作。例如,CPU在给出存储单元的地址后,存储器要根据该地址选择对应的存储单元,这个过程叫做地址译码。设存储单元的地址码为n位二进制数,存储单元的总数为N 个,则有N=2n。地址译码就是根据n位地址码,在N 个存储单元中选中对应的一个存储单元进行读/写的。这个选择工作是由地址译码电路来完成的。

译码电路的功能是,对输入的一个二进制数码经“翻译”后产生一个对应的输出有效信号。N位二进制数有2n个不同的编码组合,所以,译码电路有n个输入端,2n个输出端。译码电路工作时,在某一时刻,2n个输出中只能有一个(和当前输入的代码相对应的)输出信号为有效,其余均为无效。若以输出低电平“0”为有效,则高电平“1”表示无效。

图1-10中给出了3-8译码器(74LS138)的逻辑电路。表1-8的真值表有三个输入端A0~A2,八个输出端(低电平有效),三个选通信号(或称允许信号)和G。只有当为低电平G,为高电平,即时,译码器才能根据输入A0~A2的组合进行译码。

图1-10 3-8译码器74LS138的逻辑电路

表1-8 3-8译码器74LS138的真值表