(1)整数转换方法———除基取余法
十进制整数除以2取余数作最低位系数k0 再取商的整数部分继续除以2取余数作高一位的系数,如此继续直到商为0时停止除法,最后一次的余数就是整数部分最高有效位的二进制系数,依次所得到的余数序列就是转换成的二进制数。因为除数2是二进制的基数,所以这种算法称作“除基取余”法。
(2)小数转换方法———乘基取整法
把十进制小数乘以2,取其积的整数部分作对应二进制小数的最高位系数k -1 再取积的纯小数部分乘以2,新得积的整数部分又作下一位的系数k -2 ,再取其积的纯小数部分继续乘2,…,直到乘积小数部分为0时停止,这时乘积的整数部分是二进制数最低位系数,每次乘积得到的整数序列就是所求的二进制小数。这种方法每次乘以基数取其整数作系数。所以叫乘基取整法。需要指出的是并不是所有十进制小数都能转换成有限位的二进制小数并出现乘积的小数部分0的情况,有时整个换算过程无限进行下去。此时可以根据要求并考虑计算机字长,取定长度的位数后四舍五入,这时得到的二进制数是原十进制数的近似值。
一个既有整数又有小数部分的数送入计算机后,由机器把整数部分按“除基取余”法,小数部分按“乘基取整”法分别进行转换,然后合并。任意进制数转换成十进制数:
任意一种进位计数制的数转换成十进制数的方法都是一样的。把任意进制数按权展开成多项式和的形式,把各位的权与该位上的数码相乘,乘积逐项相加,其和便是相应的十进制数。十进制数转换成任意进制数:
十进制数转换成任意进制数与十进制数转换成二进制数的方法完全相同,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数拼接成一个数作为转换的最后结果。
3.数的机器码表示
符号数的机器码表示:
(1)机器数和真值
数在计算机中的表示形式统称为机器数。机器数有两个基本特点,其一,数的符号数值化。实用的数据有正数和负数,因为计算机只能表示0、1两种状态,数据的正号“+”或负号“-”,在机器里就用一位二进制的0或1来区别。通常这个符号放在二进制数的最高位,称符号位,以0代表符号“+”,以1代表符号“-”,这样正负符号就被数值化了。因为有符号占据一位,数的形式值就不等于真正的数值,带符号位的机器数对应的数值称为机器数的真值。
机器数的另一个特点是二进制的位数受机器设备的限制。机器内部设备一次能表示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长8位、16位、32位、64位。
符号位数值化之后,为能方便的对机器数进行算术运算、提高运算速度,计算机设计了多种符号位与数值一起编码的方法,最常用的机器数表示方法有三种:原码、反码和补码。
(2)原码表示法和反码表示法
一个机器数X由符号位和有数数值两部分组成。
(3)补码表示法(complement)
设计补码表示法的目的是:①使符号位能和有效数值部分一起参加数值运算从而简化运算规则,节省运算时间。②使减法运算转化成加法运算,从而进一步简化计算机中运算器的线路设计。计算机是一种有限字长的数字系统,因此都是有模运算,超过模的运算结果都将溢出。n位二进制整数的模是2 n 。
对于二进制数还有一种更加简单的方法由原码求得补码。①正数的补码表示与原码一样,[X]补 =[X]原②负数的补码是将原码符号位保持“1”之后其余各位取相反的码,末位加1便得到补码,即取其原码的反码再加1∶[X]补 =[X]反 +1。
真值+0和-0的补码表示是一致的,但在原码和反码表示中具有不同的形式。8位补码机器数可以表示-128,但不存在+128的补码与之对应,由此可知8位二进制补码能表示数的范围是-128~+127。应该注意,不存在-128的8位原码和反码形式。
根据互补的概念,一个补码机器数再求一次补就得到机器数的原码了。
定点数与浮点数:
(1)定点数(fixed-point number)
计算机处理的数据不仅有符号,而且大量的数带有小数,小数点不占有二进制一位而是隐含有机器数里某固定位置上。通常采用两种简单的约定:一种是约定所有机器数的小数点位置隐含在机器数的最低位之后,叫定点纯整数机器数,简称定点整数。
另一种约定所有机器数的小数点位置隐含有符号位之后、有效数值部分最高位之前,叫定点纯小数机器数,简称定点小数。
计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按比例因子缩小成定点小数或扩大成定点整数再参加运算,结果输出时再按比例折算成实际值。n位原码定点整数的表示范围是-(2 n-1 -1)≤X≤2 n-1 -1,n位原码定点小数的表示范围是-(1-2 -(n-1) )≤X≤1-2 -(n-1) 。当机器数小于定点数的最小值时,被当作0处理,超出定点数的最大值时,机器无法表达,称作“溢出”,此时机器将停止运算,屏幕显示溢出警告。
定点数表示方法简单直观,不过定点数表示数的范围小,不易选择合适的比例因子,运算过程容易产生溢出。
(2)浮点数(floating-point number)
计算机采用浮点数来表示数值,它与科学计算法相似,把任意一个二进制数通过移动小数点位置表示成阶码和尾数两部分:N=2 E ×S
其中:E———N的阶码(exponent),是有符号的整数;
S———N的尾数(mantissa),是数值的有效数字部分,一般规定取二进制定点纯小数正式。浮点数运算必须化成规格化形式。所谓规格化,对于原码尾数应使最高数字位S1 =1,如果不是1,且尾数不是全为0时就要移动尾数直到S1 =1,阶码相应变化,保证N值不变。如果尾数是补码,当N是正数时,S1 必须是1,而N是负数时,S1 必须是0,才称为规格化的形式。
4.数字编码
十进制数在机内转换成二进制数时,有时也以一种中间数字编码形式存在,它把每一位十进制数用四位二进制编码表达,每一组只表达0~9的数值运算时,有专门的线路在每四位二进制间按“十”进位处理,故称为二进制编码的十进制数———BCD码(Binary Coded Decimal(或称二—十进制数。其编码种类很多,如格雷码、余3码等,最常用的叫8421BCD码,4个二进制位自左向右每位的权分别是8、4、2、1。0~9的8421码与通常的二进制一样进位,十分简单,当计数超过9时,需要采取办法自动向十进制高位进一,即要进行“十进制调整”才能得到正确结果。
5.校验码
由于器件质量不可靠、线路工艺不过关、远距离传送带来的干扰或受来自电源、空间磁场影响等因素,使得信息在存取、传送和计算过程中难免会发生诸如“1”误变为“0”的错误,计算机一旦出错,要能及时检测并纠正错误,其中一种方法是对数据信息扩充,加入新的代码,它与原数据信息一起按某种规律编码后具有发现错误的能力,有的甚至能指出错误所在的准确位置使机器自动纠正,能起这种作用的编码叫“校验码”(check code)。
奇偶校验码:
将每个数据代码扩展一个二进位作校验位(parity bit),这个校验取0还是取1的原则是:若是奇校验(odd parity),编码是含“1”的个数连同校验位的取值共有奇数个“1”;若是偶校验(even parity),连同校验位在内编码里含“1”的个数是偶数个。
交叉校验:
计算机进行大量字节传送时一次传送几百甚至更多字节组成的数据块,如果不仅每一个字节有一个奇偶校验位———称横向校验,而且全部字节的同一位也设置了一个奇偶校验位———称纵向校验,对数据块代码的横向纵向同时校验,这种情况叫交叉校验。
循环冗余校验码———CRC码(Cyclic Redundancy Check):
计算机信息传向远方终端或传到另一个计算中心时,信息沿一条通信线路一位位传送,这种通信方式叫串行通信。循环冗余码(简称CRC码)就是一种检验能力很强,在串行通信中广泛采用的校验编码。
(1)CRC码
串行传送的信息M(X)是一串k位二进制序列,在它被发送的同时,被一个事先选择的“生成多项式”相除,“生成多项式”长r+1位,相除后得到r位余数就是校验位,它拼接到原k位有效信息后面即形成CRC码。CRC码到达接收方时,接收方的设备一方面接收CRC码,一方面用同样的生成多项式相除,如果正好除尽,表示无信息差错,接收方去掉CRC码后面r位校验,收下k位有效信息;当不能除尽时,说明有信息的状态位发生了转变,即出错了。一般要求重新传送一次或立即纠错。
(2)CRC码计算
传送信息时生成CRC码以及接收时对CRC码校验都要与“生成多项式”相除,这里除法是“模2运算”,即二进位运算时不考虑进位和借位。作模2除法时,取商的原则是当部分余数首位为1时商取1,反之商取0,然后按模2减,求部分余数。这个余数不计高位。当被除数逐位除完时,最后余数的位数比除数少一位。该余数就是校验位。它拼接在有效信息后面组成CRC码。因为校验位扩充了传送部分的代码,所以这是一种基于“冗余校验”的思想的校验办法。
(3)生成多项式
CRC码是M(X)除以某一个预先选定的多项式后产生的,所以这个多项式叫生成多项式。并不是任何一个r+1位的编码都可以作生成多项式用,它应能满足当任何一位发生传送错误时都能使余数不为0,并且不同位发生错误时应当使余数也不同,这样不但能检错而且能推断是哪一位出错,从而有利准确的纠错。有两个生成多项式,其检错率很高。
X 16 +X 15 +X 2 +1
X 16 +X 12 +X 6 +1
6.非数值数据的表示方法
计算机中数据的概念是广义的,机内除有数值数据之外,还有文字、符号、图象、语言和逻辑信息等等,因为它们也都是0、1形式存在,所以称为非数值数据。
(1)字符数据
字符数据主要指数字、字母、通用符号、控制符号等,在机内它们都被变换成计算机能够识别的二进制编码形式。国际上被普遍采用的一种编码是美国国家信息交换标准代码(American Standard Code for Information Interchange),简称ASCII码。ASCII码选择了四类共128种常用的字符:①数字0~9。②字母。③通用符号。④动作控制符。
(2)逻辑数据
逻辑数据是指计算机不带符号位的一位二进制数。
逻辑数据在计算机中虽然也是“0”或“1”的形式,但是与数值有很大区别:
①逻辑数据的取值只有“0”和“1”两个值,不可能再有其他值,而数值数据与1的不同组合可以反映很多不同数值。
②逻辑数据的“0”和“1”代表两种成对出现的逻辑概念,与一般数学中代表“0”和“1”的数值概念截然不同。
③逻辑数据和逻辑数据运算可以表达事物内部的逻辑关系,而数值数据表达的是事物的数量关系。汉字:
(1)汉字字音编码
(2)汉字字形编码
(3)汉字音形编码
(4)电报码
(5)整字编码为了能在不同的汉字系统之间交换信息、高效率高质量共享汉字信息,近年来国家推出了一系列有关中文信息处理的标准。比如1981年我国制定推行的GB2312-80国家标准信息交换用流字编码字符集(基本集)———简称国标码,以及若干辅助集。国标码收集、制定的基本图形字符有7千余个,其中常用汉字3755个,次常用汉字3008个,共6763个汉字,还有俄文字母、日语假名、拉丁字母、希腊字母、汉语拼音,每字节内占用7bit信息,最高位补0,例如汉字“啊”的国际码,前一字节是01100000,后一字节是00100001,编码为3021H。
汉字内部码是汉字在计算机内部存储、运算的信息代码,内部码的设计要求与西文信息处理有较好的兼容性,当一个汉字以某种汉字输入方案送入计算机后,管理模块立刻将它转换成两字节长的GB2312-80国标码,如果给国标码的每字节最高位加“1”,作为汉字标识符,就成为一种机器内部表示汉字的代码———汉字内部码。汉字内部码的特点十分明显:
①汉字内部码结构简短,一个汉字内部码只占两个字节,两字节足以表达数千个汉字和各种符号图形,且又节省计算机存储空间。
②便于和西文字符兼容。西文字符的ASCII码占一个字节,两字节的汉字内码可以看成是它扩展的字符代码,在同一个计算机系统中,只要从最高位标识符就能区分这两种代码。标识符是“0”,即是ASCII码;标识符是“1”,则是汉字内部码。
7.语音识别及语言表示原理
语音产生机理的研究表明,每一种语言的语音都有自己特定的音素特征,语音是不同频率振动的结果。分析语音的音素特点,找出音素的基频和高次频率优分,就能在计算机中建立发音系统的模型,在实施中对语音采样,通过滤波器分解提取频率信息,由模/数转换设备转换成数字输入计算机,与机内的语言模型比较,由此达到识别语音的目的。与此相反,如果选择已知音素的参数,应用语音系统模型,就能得到指定的音素,进一步按照一定的规则合成语言。
六、运算器
1.运算器的组成
多功能算术/逻辑运算单元(ALU):
(1)基本思想
(2)逻辑表达式
对一片ALU来说,可有三个进位输出。其中G称为进位发生输出,P称为进位传送输出。在电路中,多加这两个进位输出的目的是为了便于实现多片(组)ALU之间的先行进位,为此,还需一个配合电路,它称为先行进位发生器(CLA)。
内部总线:
根据总线所处位置,总线分为内部总线和外部总线两类。内部总线是指CPU内各部件的连线,而外部总线是指系统总线,即CPU与存储器、I/O系统之间的连线。
按总线的逻辑结构来说,总线可分为单向传送总线和双向传送总线。所谓单向总线,就是信息只能向一个方向传送。所谓双向总线,就是信息可以向两个方向传送。换句话说,总线既可以用来发送数据,也可以用来接收数据。
总线的逻辑电路往往是三态的,即输出电平有三种状态:逻辑“1”、逻辑“0”和“浮空”状态。
2.运算器的基本结构
运算器包括ALU、阵列乘除器件、寄存器、多路开关或三态缓冲器、数据总线等逻辑部件。现代计算机的运算器大体有如下三种结构形式。①单总线结构的运算器②双总线结构的运算器③三总线结构的运算器
七、控制器
1.控制器在CPU中的位置
中央处理器(CPU)由两个主要部分———控制器及运算器组成。其中程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器等组成了控制器。它是对计算机发布命令的“决策机构”,协调和指挥整个计算机系统的操作,因此,它处于CPU中极其重要的位置。在CPU中,除算术逻辑单元(ALU)及累加器外,尚有下列逻辑部件:
(1)缓冲寄存器(DR)
缓冲寄存器用来暂时存放由内存储器读出的一条指令或一个数据字;反之,当向内存存入一条指令或一个数据字时,也暂时将它们存放在这里。缓冲寄存器的作用是:①作为CPU和内存、外部设备之间信息传送的中转站;②补偿CPU和内存、外部设备之间在操作速度上的差别;
③在单累加器结构的运算器中,缓冲寄存器还可兼作为操作数寄存器。
(2)指令寄存器(IR)指令寄存器用来保存当前正在执行的一条指令。指令划分为操作码和地址码字段,它们由二进制数字组成。为执行任何给定的指令,必须对操作码进行译码,以便指出所要求的操作。指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发生具体操作的特定信号。
(3)程序计数器(PC)
为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器(PC)正是起到这种作用,所以通常又称其为指令计数器。
(4)地址寄存器(AR)
地址寄存器用来保存当前CPU所要访问的内存单元的地址。由于在内存和CPU之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存读/写操作完成为止。
(5)累加寄存器(AC)
累加寄存器AC通常简称为累加器。它的功能是:当运算器的算术/逻辑单元(ALU)执行全部算术和逻辑运算时,为ALU提供一个工作区。例如,在执行一个加法前,先将一个操作数暂时存放在AC中,再从存放中取出另一个操作数,然后同AC的内容相加,所得结果送回AC中,而AC中原有的内容随即被破坏。顾名思义,累加寄存器用来暂时存放ALU运算的结果信息。显然,运算器中至少要有一个累加器寄存器。
由于运算器的结构不同,可采用多个累加寄存器。
(6)状态寄存器(SR)
状态寄存器保存由算术指令和逻辑指令运行或测试结果建立的各种状态码内容。
(7)操作控制器
操作控制器的功能,就是根据指令操作码和时序信号,产生各种操作控制信号,以便正确地建立数据通路,从而完成取指令和执行指令的控制。