1.3 基本术语解释
通用电子计算机(general-purpose electronic computer) 通用电子计算机是和专用电子计算机对应的,专用机只能专门用于某种应用,而通用电子计算机从定义上来说可以解决任何问题,只要这个问题可以用程序来表示。通用电子计算机也被称为完备的图灵机。
算术逻辑单元(Arithmetic Logic Unit, ALU) 对数据进行算术运算和逻辑运算处理的部件。
数据通路(datapath) 数据通路是指指令执行过程中数据所经过的部件以及部件之间的连接线路,主要由ALU和一组寄存器、存储器、总线等组成。国内许多教科书中提到的运算器即运算数据通路。
控制器(control unit) 也称为控制单元或控制部件。其作用是对指令进行译码,将译码结果和状态/标志信号、时序信号等进行组合,产生各种操作控制信号。这些操作控制信号被送到CPU内部或通过总线送到主存或I/O模块。送到CPU内部的控制信号控制CPU内部数据通路的执行,送到主存或I/O模块的信号控制CPU和主存或CPU和I/O模块之间的信息交换。控制器是整个CPU的指挥控制中心,通过规定各部件在何时做什么动作来控制数据的流动,完成指令的执行。
中央处理器(Central Processing Unit, CPU) 中央处理器是计算机中最重要的部分之一,主要由运算器和控制器组成。其内部结构归纳起来可以分为控制器、运算器和寄存器三大部分,它们相互协调,共同完成对指令的执行。
存储器(memory, storage) 存储器用于存储程序和数据,分为内存储器(memory)和外存储器(storage)。内存存取速度快、容量小、价格贵;外存容量大、价格低,但存取速度慢。
内存(memory) 从字面上来说,内存是内部存储器,应该包括主存(Main Memory, MM)和高速缓存(cache),但是,早期计算机中没有高速缓存,因而传统意义上内存就是主存,目前也并不区分内存和主存。内存位于CPU之外,用来存放已被启动执行的程序及所用数据,包括ROM芯片和RAM芯片组成的相应ROM存储区和RAM存储区两部分。
外存(storage) 外存储器主要有磁盘存储器、磁带存储器和光盘存储器等。磁盘是最常用的外存储器,通常分为软盘和硬盘两类。容量极大、价格便宜的磁带机和光盘组等称为海量存储器,常用作数据备份,也称为辅存(Accessorial Memory, AM)或二级存储器(secondary memory)。
系统软件(system software) 系统软件是介于计算机硬件与应用程序之间的各种软件,它与具体应用关系不大。系统软件包括操作系统(如Windows)、语言处理系统(如C语言编译器)、数据库管理系统(如Oracle)和各类实用程序(如磁盘碎片整理程序、备份程序)。
应用软件(application software) 应用软件是指针对使用者的某种应用目的所编写的软件,例如办公自动化软件、互联网应用软件、多媒体处理软件、股票分析软件、游戏软件、管理信息系统等。
操作系统(Operating System, OS) 操作系统是计算机系统中负责支撑应用程序运行环境以及用户操作环境的系统软件,其目的是使计算机系统中的所有资源最大限度地发挥作用,并为用户提供方便、有效、友好的服务界面。操作系统是一个庞大的管理控制程序,如处理机管理、存储管理、设备管理和文件管理等。
高级编程语言(high-level programming language) 它是面向问题和算法的描述语言。用这种语言编写程序时,程序员不必了解实际机器的结构和指令系统等细节,而是通过一种比较自然的、直接的方式来描述问题和算法。
汇编语言(assembly language) 汇编语言是一种面向实际机器结构的低级语言,是机器语言的符号表示,与机器语言一一对应。因此,汇编语言程序员必须对机器的结构和指令系统等细节非常清楚。
机器语言(machine language) 机器语言是指直接用二进制代码(指令)表示的语言,机器语言程序员必须对机器的结构和指令系统等细节非常清楚。
指令集(instruction set) 一台计算机能够执行的所有机器指令的集合,按功能可分为运算指令、传送指令、程序控制指令、系统控制指令等。
指令集体系结构(Instruction Set Architecture, ISA) 计算机硬件与系统软件之间的接口,指机器语言程序员或操作系统、编译器、解释器设计人员所看到的计算机功能特性和概念性结构。其核心部分是指令系统,同时还包含数据类型和数据格式定义、寄存器组织、I/O空间的编址和数据传输方式、中断结构、计算机状态的定义和切换、存储保护等。ISA设计的好坏直接决定了计算机的性能和成本。
透明性(transparency) 由于计算机系统采用层次化结构进行设计和组织,因而面向不同的硬件或软件层面工作的人员或用户所“看到”的计算机是不一样的。也就是说,计算机组织方式或系统结构中的一部分对某些用户而言是“看不到”的或称为“透明”的。例如,对于高级语言程序员来说,指令格式、数据格式、机器结构、指令和数据的存取方式等都是透明的;而对于机器语言程序员和汇编语言程序员来说,指令格式、机器结构、数据格式等则不是透明的。
源程序(source program) 编译程序、解释程序和汇编程序统称为语言翻译程序。各种语言翻译程序处理的对象称为源程序,用高级编程语言或汇编语言编写。如C语言源程序、Java语言源程序、汇编语言源程序等。
目标程序(object program) 编译程序和汇编程序对源程序进行翻译得到的结果程序称为目标程序或目标代码(object code)。
编译程序(compiler) 也称编译器,用来将高级编程语言源程序翻译成汇编语言或机器语言目标代码的程序。
解释程序(interpreter) 解释程序将源程序的一条语句翻译成对应的机器语言目标代码并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序中的语句全部被翻译并执行完。因此,解释程序并不输出目标程序,而是直接输出源程序的执行结果。
汇编程序(assembler) 汇编程序也是一种语言翻译程序,它把用汇编语言写的源程序翻译为机器语言目标程序。汇编程序和汇编语言是两个不同的概念,不能混为一谈。
机器数(computer word) 通常将数值数据在计算机内部编码表示的数称为机器数。机器数中只有0和1两种符号。
真值(natural number) 机器数真正的值(即原来带有正负号的数)称为机器数的真值。
数值数据(numerical data) 指有确定值的数据,在数轴上能找到对应的点,可以比较大小。确定一个数值数据的值需要三个要素:进位计数制、定/浮点表示和数的编码表示。也就是说,给定一个数字序列,如果不说明这个数字序列是几进制数、小数点的位置在哪里、采用什么编码方式,那么这个数字序列的值是无法确定的。
非数值数据(non-numerical data) 指在数轴上没有确定值的数据,像逻辑数据、西文字符、汉字字符等都是非数值数据。
基数(radix, base) 进位计数制的“底数”或“基”。例如,二进制数的基数是“2”,十进制数的基数是“10”,十六进制的基数是“16”。
无符号整数(unsigned integer) 当一个编码的所有二进位都用来表示数值时,该编码表示的就是无符号整数,也称为无符号数,可以看成正整数。常用于表示指针和地址等。
带符号整数(signed integer) 在计算机内部对正、负号进行编码的整数也称为有符号整数,通常用补码表示。
浮点数(floating-point number) 浮点数是计算机中可以将小数点指定在不同位置的数。任意一个浮点数F可写成F=M×2E的形式。这样,一个浮点数就可用两个定点数表示:M称为浮点数的尾数(mantissa, significand),用一个定点小数来表示;E称为浮点数的指数或阶码(exponent),用一个定点整数来表示。
原码(signed magnitude) 由符号位直接跟数值位构成,也称“符号-数值”表示法。它的编码规则是:正号用符号位0表示,负号用符号位1表示,数值部分不变。这种编码比较简单,但计算机处理不方便,20世纪50年代以后就不再用它来表示整数。在IEEE 754浮点标准中,用它来表示浮点数的尾数。
反码(one's complement) 一种对定点整数或定点小数进行二进制编码的编码方案。由于计算机处理反码没有补码方便,反码已很少使用了。
补码(two's complement) 补码编码规则是:正号用符号位0表示,负号用符号位1表示,正数的数值部分不变,负数的数值部分“各位取反,末位加1”。这种编码较原码复杂,但由于它是一种模运算系统,计算机处理很方便。常用补码表示带符号整数。
变形补码(four's complement) 变形补码是一种双符号位补码,也称为“模4-补码”。双符号位可以用来检测定点整数是否发生溢出,左符号位为真正的符号位,右符号位用来判别是否溢出。双符号位通常用于保存运算过程中进到高位的数值部分。
移码(excess notation, biased notation) 移码编码规则是:将真值加上一个偏置常数(bias)。在浮点数的加减运算中,要进行对阶操作,需要比较两个阶的大小。用移码表示阶码后,使得所有数的阶码都相当于一个正整数,比较大小时,只要按高位到低位顺序比较就行了,因而,移码主要用来表示浮点数的阶码,可以简化阶码的比较过程。
单精度浮点数(single precision floating point) 指IEEE 754标准规定的32位浮点数格式表示的浮点数。阶码用8位移码表示,偏置常数为127,尾数用原码表示,规格化浮点数的最高位1隐含不表示,显式表示的尾数有23位,所以一共有24位尾数。
双精度浮点数(double precision floating point) 指IEEE 754标准规定的64位浮点数格式表示的浮点数。阶码用11位移码表示,偏置常数为1023,尾数用原码表示,规格化浮点数的最高位1隐含不表示,显式表示的尾数有52位,所以一共有53位尾数。
机器零(machine “0”) 用一种专门的位序列表示机器0。例如,IEEE 754单精度浮点数中,用0000 0000H表示+0,用8000 0000H表示–0。当运算结果的阶码过小时,计算机将该数近似表示为机器0。
BCD码(Binary Coded Decimal, BCD) 十进制数用二进制编码的形式表示称为BCD码。
逻辑数据(logic data) 逻辑数据用来表示命题的真和假,分别用 1和0表示。进行逻辑运算时,按位进行。
ASCII码(American Standard Code for Information Interchange) 目前计算机中使用最广泛的西文字符集及其编码,即美国标准信息交换码,简称ASCII码。
汉字输入码(Chinese character input code) 用标准键盘上按键组合来表示每个汉字的编码方式,一般分为数字编码(如区位码)、字音编码(如微软拼音、全拼)、字形编码(如五笔字型)和形音编码。
汉字内码(Chinese character code) 汉字在计算机内部进行存储、查找、传输和处理时所采用的编码方式,通常用2~4个字节表示一个汉字内码。
机器字长(machine word length) 一个二进制位(bit,比特)是计算机内部信息表示的最小单位。而机器字长指的是特定计算机中CPU用于定点整数运算的数据通路的宽度,通常也是CPU内定点数运算器和通用寄存器的位数。
编址单位(addressing unit) 对主存单元编号时,具有相同编号的二进位数,其主存单元的编号称为地址。通常的编址单位为8,即字节。按字节编址时,编址单位为字节;按字编址时,编址单位为字。
字地址(word address) 按字节编址时,一个字可能占用几个存储单元,字地址就是这几个连续存储单元地址中的最小值。
最高有效位(Most Significant Bit, MSB) 一个二进制数中的最高位,如二进制数1000中的1。
最低有效位(Least Significant Bit, LSB) 一个二进制数中的最低位,如二进制数1110中的0。
最高有效字节(Most Significant Byte, MSB) 一个二进制数中的最高字节,如二进制数 1111 1111 0000 0000 1111 0000 中的1111 1111。
最低有效字节(Least Significant Byte, LSB) 一个二进制数中的最低字节,如二进制数 1111 1111 0000 0000 1111 0000 中的1111 0000。
大端方式(big endian) 采用字节编址方式时,一个多字节数据(如int、float等类型的数据)将占用多个主存单元。大端方式下,将数据字的LSB存放在大地址单元中,即字地址是MSB所在单元的地址。
小端方式(little endian) 采用字节编址方式时,一个多字节数据(如int、float等类型的数据)将占用多个主存单元。小端方式下,将数据字的LSB存放在小地址单元中,即字地址是LSB所在单元的地址。
边界对齐(boundary alignment) 要求数据的地址是相应的边界地址。例如,按字节编址时,4字节长数据的地址应该是4的倍数,即最末两位总是00,2字节长数据的地址总是2的倍数。