1、第一章 计算机系统概论1.计算机系统就是硬件系统吗? 答:说计算机系统就是硬件系统是不完整的。一个完整的计算机系统应该包括硬件系统和软件系统两部分。硬件系统包括:运算器、控制器、存储器、输入设备和输出设备五大基本部件。软件系统分为系统软件和应用软件两大类。系统软件包括操作系统、计算机语言处理程序(各种程序翻译软件,包括编译程序、解释程序、汇编程序)、服务性程序、数据库管理系统和网络软件等;应用软件包括各种特定领域的处理程序。 计算机系统中的硬件和软件是相辅相成的,缺一不可。软件是计算机系统的灵魂,没有软件的硬件不能被用户使用,犹如一堆废铁。2.同一个功能可以由软件完成也可以由硬件完成吗?答:软
2、件和硬件是两种完全不同的形态,硬件是实体,是物质基础;软件是一种信息,看不见、摸不到。但是它们都可以用来实现逻辑功能,所以在逻辑功能上,软件和硬件是等价的。因此,在计算机系统中,许多功能既可以直接由硬件实现,也可以在硬件的配合下由软件来实现。例如:乘法运算既可以用专门的乘法器(主要由加法器和移位器组成)实现,也可以用乘法子程序(主要由加法指令和移位指令等组成)来实现。 3.翻译程序就是编译程序吗?解释程序和编译程序有什么差别?什么是汇编程序?答:翻译程序是指把高级语言源程序翻译成机器语言程序(目标代码)的软件。翻译程序有两种:一种是编译程序,另一种是解释程序。它们是两种不同的翻译程序。不同在于
3、编译程序将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只要执行目标程序,因此,只要源程序不变,就无需重新翻译;解释程序是将源程序的一条语句,翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序中的语句全部被翻译并执行完。所以解释程序的执行过程是翻译一句,执行一句。解释的结果是源程序执行的结果,而不会生成目标程序。汇编程序也是一种语言翻译程序,它是把汇编语言写的源程序翻译为机器语言程序(目标代码)的软件。汇编语言是一种面向机器的低级语言,是机器语言的符号表示,与机器语言一一对应。 4.要计算机做的任何工作都要先编写成程序才能完成吗?答:是的。要计算机完成
4、的任何事情,都必须先编制程序,程序是由指令构成的。不管是用哪种语言编写的程序,最终都要翻译成机器语言程序才能让机器理解,机器语言程序是由一条一条指令组成的程序。CPU的主要功能就是周而复始地执行指令,因此,要计算机完成的所有功能都是通过执行一条一条指令来实现的,也就是由一个程序来完成的。有时我们说某个特定的功能是由硬件实现的,但并不是说不要编写程序,如乘法功能可由乘法器这个硬件实现,但要启动这个硬件(乘法器)工作,必须先执行程序中的乘法指令。 5.指令和数据形式上没有差别,且都存于存储器中,计算机如何区分它们呢?答:指令和数据在计算机内部都是用二进制表示的,因而都是0、1序列,在形式上没有差别
5、。在指令和数据取到CPU之前,它们都存放在存储器中,CPU必须能够区分读出的是指令还是数据,如果是指令,CPU会把指令的操作码送到指令译码器进行译码,而把指令的地址码送到相应的地方进行处理;如果是数据,则送到寄存器,或运算器。那么,CPU如何识别读出的是指令还是数据呢?实际上,CPU并不是把信息从主存读出后,靠某种判断方法来识别信息是数据还是指令的。而是在读出之前就知道将要读的信息是数据还是指令了。执行指令的过程分为:取指令、指令译码、取操作数、运算、送结果等。所以,在取指令阶段,总是根据程序计数器PC的值去取指令,所以取来的一定是指令;取操作数阶段取的一定是数据。 6.什么叫透明性?透明是指
6、什么都能看见吗?答:在计算机领域中,站在某一类用户的角度,如果感觉不到某个事物或属性的存在,即“看”不到某个事物或属性,则称为“对xxxx用户而言,某个事物或属性是透明的”。这与日常生活中的“透明”概念(公开、看得见)正好相反。例如:对于高级语言程序员来说,浮点数格式、乘法指令等这些指令的格式、数据如何在运算器中运算,等等,是透明的;而对于机器语言程序员和汇编语言程序员来说,指令的格式、机器结构、数据格式等则不是透明的。 7.数据通路宽度、机器字长、“字”宽、存储单元宽度、编址单位、总线宽度、指令字长各指什么?它们之间有何关系? 答:在计算机内部,有指令和数据两大类信息。指令和数据都以二进制形
7、式存放在存储器中,运行程序时,需要把指令和数据从存储器读出,通过总线传输到CPU,然后,CPU再通过执行指令来对操作数进行相应的运算,最后把结果数据送到寄存器或存储器中。所以,在设计或使用计算机过程中,要涉及到:指令和数据在存储器中按什么长度存放;写入或读出时按什么长度存取;在总线上传输时同时传送多少位;数据和指令送到CPU后,在CPU的寄存器中按多少位存放;在运算器中按多少位运算;等等问题。因而出现了以下一些概念,它们的定义和关系如下: “数据通路”是指数据在CPU中所经过的路径,连同路径上的部件,包括:通用寄存器、多路选择器、符号扩展器、零扩展器、ALU、移位寄存器等。这些部件的宽度和数据
8、传送的路径宽度都是一致的,这个一致的宽度就是数据通路的宽度。CPU中有定点运算器和浮点运算器,因而,相对应的就有定点运算器的数据通路和浮点运算器数据通路。两者的宽度不同,浮点运算器的数据通路要宽的多。“机器字长”是计算机的一个非常重要的指标。通常称32位机器或64位机器,就是指机器的字长是32位或64位。一般情况下,机器字长定义为CPU中在同一时间内一次能够处理的二进制数的位数,实际上就是CPU中数据通路的位数。因为机器字长与内存单元的地址位数有关,而地址计算是在定点运算器中进行的。所以,一般把定点运算器的数据通路宽度定为机器字长。在计算机中,“字”的概念经常出现。一个“字”的宽度并不等于机器
9、字长。“字”作为机器中所有信息宽度的计量单位,对于某个系列机来说,其字宽总是固定的。例如,在80x86系列中,一个字的宽度为16位,因此,32位是双字,64位是四字。在IBM303X系列中,一个字的宽度为32位,所以16位为半字,32位为单字、64位为双字。“存储单元”指存储器中具有相同地址的若干个存储元件(或称存储元、存储基元、记忆单元)构成的一个存储单元中的二进制代码,其宽度等于一个编址单位的长度,可以是8位、16位、32位等。现在,大多数计算机是按字节编址的,即:每一个字节(8位)有一个地址,编址单位就是一个字节,所以一个存储单元的宽度(位数)是8位。由此可见,一个数据(如:32位整数、
10、32位浮点数或64位浮点数等)可能占多个存储单元。一次从存储器读出或写入的信息也可能有多个存储单元。“指令字长”指指令的位数。有定长指令字机器和不定长指令字机器。定长指令字机器中所有指令的位数是相同的,目前定长指令字大多是32位指令字。不定长指令字机器的指令有长有短,但每条指令的长度一般都是8的倍数。所以,一个指令字在存储器中存放时,可能占用多个存储单元;从存储器读出并通过总线传输时,可能分多次进行,也可能一次读多条指令。第二章 运算方法和运算器1.真值和机器数的关系是什么?答:在计算机内部用二进制编码表示的数称为机器数,而机器数真正的值(即原来带有正负号的数)称为机器数的真值。 2.什么是编
11、码?答:用少量简单的基本符号,对大量复杂多样的信息进行一定规律的组合。基本符号的种类和组合规则是信息编码的两大要素。例如,用10个阿拉伯数字表示数值,电报码中用4位十进制数字表示汉字,等等,都是编码的典型例子。计算机内部处理的所有信息都是“数字化编码”了的信息。 3.什么是“数字化编码”? 答:“数字化编码”就是对感觉媒体信息(如:数值、文字、图像、声音、视频等信息)进行定时采样,将现实世界中的连续信息转换为计算机中的离散的“样本”信息,然后对这些离散的“样本”信息进行二进制编码。 4.计算机内部为什么用二进制来编码所有信息? 答:主要有三个方面的原因:(1) 二进制系统只有两个基本符号:“0
12、”和“1”。所以,它的基本符号少,易于用稳态电路实现;(2)二进制的编码/计数/运算等的规则简单;(3)二进制中的“0”和“1”与逻辑命题的“真”和“假”的对应关系简单 5.什么叫数值数据?答:数值数据有确定的值,即在数轴上能找到其对应的点,可以比较其大小。确定一个数值数据的值有三个要素:进位计数制、定浮点表示和数的编码表示。也就是说,给定一个数字序列,如果不说明这个数字序列是几进制数、小数点的位置在哪里、采用什么编码方式,那么这个数字序列的值是无法确定的。或者说,同一个数字序列可能有不同的值。 6.计算机内都用二进制表示信息,为什么还要引入八进制和十六进制? 答:计算机内部在进行信息的存储、
13、传送和运算时,都是以二进制形式来表示信息的。但在屏幕上或书本上书写信息时,由于二进制信息位数多,阅读、记忆也不方便。而十六进制、八进制和二进制的对应关系简单。所以引入十六进制或八进制。在开发程序、调试程序、阅读机器内部代码时,人们经常使用八进制或十六进制来等价地表示二进制信息。 7.如何表示一个数值数据?计算机中的数值数据都是二进制数吗? 答:在计算机内部,数值数据的表示方法有两大类: 直接用二进制数表示 分为无符号数和有符号数,有符号数又分为定点数表示和浮点数表示。无符号数用来表示无符号整数(如:地址等信息);定点数用来表示整数;浮点数用来表示实数。 采用二进制编码的十进制数表示(Binar
14、y Coded Decimal Number,简称BCD码)BCD码的编码方案很多,但一般都采用8421码(也称为NBCD码)来表示。用来表示整数。 所以,计算机中的数值数据虽然都用二进制来编码表示,但不全是二进制数,也有用十进制数表示的。所以,后面一章有关指令类型中,就有对应的二进制加法指令和十进制加法指令。 8.为什么要引入无符号数表示? 答:一般在全部是正数运算且结果不出现负值的场合下,可以省略符号位,使用无符号数表示。例如在进行地址运算时可用无符号数。 9.在高级语言编程中所定义的unsigned型数据是怎么表示的? 答:unsigned型数据就是无符号数,不考虑符号位,直接用二进制对
15、数值进行编码得到的就是无符号数。 10.为什么无符号整数结果会发生“溢出”? 什么叫无符号整数的“溢出”? 答:计算机的机器字长总是有限的,因而机器数的位数有限,所以可表示的数的个数有限。对于n位二进制数,只能表示2n个不同的数,因此有很多数用n位无法表示。 对于无符号定点整数来说,计算机运算过程中一般保留低n位,舍弃高位。这样,会产生两种结果: 剩下的低n位数不能正确表示运算结果。这种情况下,意味着运算的结果超出了计算机能表达的范围,有效数值进到了第n+1位,我们称此时发生了“溢出” 现象。 剩下的低n位数能正确表达计算结果,也即高位的舍去并不影响其运算结果。“span对一个多于n位的数丢弃
16、高位而保留低n位数”这样一种处理, 实际上等价于“将这个多于n位的数去除以2n,然后丢去商保留其余数”的操作。这种操作运算就是“模运算”。在一个模运算系统中,运算的结果最终都是丢弃高位,只截取低n位。所以,只要不是“溢出”,即:只要真正的值不会进到第n+1位,结果就是正确的。这是模运算系统的特点。 11.为什么现代计算机都用补码来表示整数? 答:补码表示定点整数时,和原码、反码相比,有以下四个好处: (1)符号位可以和数值位一起参加运算 (2)可以用加法方便地实现减法运算 (3)零的表示唯一 (4)可以多表示一个最小负数 所以,现代计算机都用补码来表示定点整数。 12.n位二进制补码整数的模是
17、多少?数的表示范围是多什么? 答:n位二进制补码整数的模是2n,表示只保留低n位,多于n位的高位部分取模后要被丢弃掉。这种形式的数的范围为-2(n-1) +2(n-1) -1。 13.在高级语言编程中定义的shotr / int / long型数据是怎么表示的? 答:int型数据就是定点整数,现代计算机一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。long型数据和short型数据也都是定点整数,用补码表示,只是位数不同,分别是长整型和短整型数。 14.定点整数在数轴上分布的点之间都是等距的吗? 答:是的。定点整数在数轴上的点总是在整数值上,即:,-5,-4,-
18、3,-2,-1,0,1,2,3,4,5,相邻数据间隔总是1。 15.定点整数运算要考虑加保护位和舍入吗? 答:不需要。整数运算的结果还是整数,没有误差,无需考虑加保护位,也无需考虑舍入。但运算结果可能会“溢出”。 16.为什么要引入浮点数表示? 答:因为定点数不能表示实数,而且表数范围小。所以,要引入浮点数表示。 17.为什么浮点数的阶(指数)要用移码表示? 答:因为在浮点数的加减运算中,要进行对阶操作,需要比较两个阶的大小。移码表示的实质就是把阶加上一个偏置常数,使得所有数的阶码都是一个正整数,比较大小时,就只要按高位到低位顺序比较就行了,因而,引入移码可以简化阶的比较过程。 18.浮点数如
19、何表示0? 答:用一种专门的位序列表示0,例如,IEEE754单精度浮点数中,用“0000 0000H”表示+0,用“8000 0000H”表示-0。当运算结果出现阶码过小时,计算机将该数近似表示为0。 19.现代计算机中采用什么标准来表示浮点数? 答:早期的计算机各自采用不同的浮点数表示格式,因而,在不同计算机之间进行数据交换时,就会发生数据不统一的问题。因而,提出专门制定了IEEE754标准用来规定计算机中的浮点数表示格式。所以,现代计算机中都采用IEEE754标准来表示浮点数。 20.如何判断一个浮点数是否是规格化数? 答:为了使浮点数中能尽量多地表示有效位数,一般要求运算结果用规格化数
20、形式表示。规格化浮点数的尾数小数点后的第一位一定是个非零数。因此,对于原码编码的尾数来说,只要看尾数的第一位是否为1就行;对于补码表示的尾数,只要看符号位和尾数最高位是否相反。 21.浮点数表示的精度和数值范围取决于什么? 在浮点数总位数不变的情况下,阶码位数越多,则尾数位数越少。即:表数范围越大,则精度越差(数变稀疏)。 22.基数的大小对表数范围和精度有什么影响? 答:基数越大,则范围越大,但精度变低(数变稀疏)。 23.在高级语言编程中定义的float / double型数据是怎么表示的? 答:float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单
21、精度浮点数就是float型。64位双精度浮点数就是double型。 24.位数相同的定点数和浮点数中,可表示的浮点数个数比定点数个数多吗?答:不是的。可表示的数据个数取决于编码所采用的位数。编码位数一定,则编码出来的数据个数就是一定的。n位编码只能表示2n个数,所以,对于相同位数的定点数和浮点数来说,可表示的数据个数应该一样多。(有时可能由于一个值可能有两个或多个编码对应,编码个数会有少量差异。但总体上是一样的。) 25.如何进行BCD码的编码? 答:每位十进制数的取值可以是0/1/2/9这十个数之一,因此,每一个十进制数位必须至少有4位二进制位来表示。而4位二进制位可以组合成16种状态,去掉
22、10种状态后还有6种冗余状态,所以从16种状态中选取10种状态表示十进制数位0 9的方法很多,可以产生多种BCD码方案。大的方面可分为有权码和无权码两种。 有权码指表示每个十进制数位的四个二进制数位(称为基2码)都有一个确定的权。8421码是最常用的十进制有权码,ASCII码的数字编码采用的就是8421码;无权码指表示每个十进制数位的四个基2码没有确定的权。现代计算机中大多用8421有权码。 26.逻辑数据在计算机中如何表示?如何运算? 答:逻辑数据用来表示命题的“真”和“假”,分别用 “1”和“0”来表示。进行逻辑运算时,按位进行。27.汉字的区位码、国标码和机内码有什么区别? 答:GB23
23、12字符集由94行、94列组成,行号称为区号,列号称为位号,各占7位,共14位,区号在左、位号在右,称为汉字的区位码,它指出了该汉字在码表中的位置。 汉字的国标码是将区号、位号各加上32(即16进制的20H)后,再在前后各7位前加0。 汉字的内码需2个字节才能表示,可以在国标码的基础上产生汉字机内码。一般是将国标码两个字节的第一位置“1”后得到内码。 28.已知一个汉字的国标码为343AH,其区位码和机内码各是什么?答:区位码是国标码的前后两个字节各减32(即:20H),所以得区位码为:343AH-2020H=141AH,所以区号为20,位号为26;机内码是国标码的两个字节的最前一位变为1,所
24、以,机内码为B4BAH。 29.定点整数(用补码表示)运算时,如何判断结果溢出? 答:可以采用双符号位检测和单符号位检测两种判断方法。1) 双符号位:采用“变形补码”进行补码运算和溢出检测。其判断规则为:“当结果的两个符号位不同时,发生溢出”。2)单符号位:异号数相加不会溢出;对于同号数相加,则有两种判断规则:规则1:“若结果的符号与两个加数的符号不同,则发生溢出。” 规则2:“若最高位的进位和次高位的进位不同,则发生溢出。 30.什么是浮点数的溢出?什么情况下发生上溢?什么情况下发生下溢? 答:浮点数的运算结果可能出现以下几种情况: 1)阶码上溢:当一个正指数超过了最大允许值,此时,浮点数发
25、生上溢(即:向方向溢出)。如果结果是正数,则发生正上溢(有的机器把值置为+);如果是负数,则发生负上溢(有的机器把值置为-)。这种情况为软件故障,通常要引入溢出故障处理程序来处理。 2)阶码下溢:当一个负指数比最小允许值还小,此时,浮点数发生下溢。一般机器把下溢时的值置为0(+0或-0)。不发生溢出故障。 3)尾数溢出:当尾数最高有效位有进位时,发生尾数溢出。此时,进行“右规”操作:尾数右移一位,阶码加1,直到尾数不溢出为止。此时,只要阶码不发生上溢,则浮点数不会溢出。 4)非规格化尾数:当数值部分高位出现0时,尾数为非规格化形式。此时,进行“左规”操作:尾数左移一位,阶码减1,直到尾数为规格
26、化形式为止。 31.为什么浮点数运算中要增加保护位? 答:为了使数据有效位在右移时最大限度地保证不丢失,一般在运算中间值后面增加若干数据位,这些位用来保存右移后的有效数据。增设保护位后,能保证运行的中间结果的有效位数,但最终必须将结果的保护位去掉,以得到规定格式的浮点数,此时要考虑舍入。32.浮点数如何进行舍入? 答:舍入方法选择的原则是:(1)尽量使误差范围对称,使得平均误差为0,即:有舍有入,以防误差积累。(2)方法要简单,以加快速度。 IEEE754 有四种舍入方式:(1)就近舍入:舍入为最近可表示的数,若结果值正好落在两个可表示数的中间,则一般选择舍入结果为偶数。(2)正向舍入:朝+方
27、向舍入,即:取右边的那个数。(3) 负向舍入:朝-方向舍入,即:取左边的那个数。(4)截去:朝0方向舍入。即:取绝对值较小的那个数。 33.无符号加法器如何实现? 答:计算机中,最基本的加法器是无符号加法器。根据进位方式的不同,有两种不同的实现方式:串行和并行。 (1)串行进位加法器(行波进位加法器):通过n个全加器按照串行方式连起来实现 (2)并行进位加法器(先行进位加法器):通过引入进位生成函数和进位传递函数,使得进位之间相互独立,并行产生。也称为快速加法器。 34.补码加法器如何实现? 答:在补码系统内,两个n位数做补码加法的原则是:两个n位数的补码相加,其结果中最高位的进位丢掉(模运算
28、系统)。所以可用一个n位无符号加法器生成各位的和。 但是,最终的结果是否正确,取决于结果是否溢出,只要不溢出,结果一定是正确的。因此,补码加法器只要在无符号加法器的基础上再增加“溢出判断电路”即可。 35.在补码加法器中,如何实现减法运算? 答:补码减法的规则是:求两个数的差的补码,可用第一个数的补码加上另一数负数的补码得到。由此可见,减法运算可在加法器中运行。只要在加法器的一个输入端输入减数的负数的补码。求一个数的负数的补码电路称为“负数求补电路”。可以通过“各位取反、末尾加1”来实现“负数求补电路”。 36.现代计算机中是否要考虑原码加/减运算?如何实现? 答:因为现代计算机中浮点数采用I
29、EEE754标准,所以在进行两个浮点数加减运算时,必须考虑原码的加减运算。因为,IEEE754规定浮点数的尾数都用原码表示。 原码的加减运算可以有以下两种方式实现: (1)转换为补码后,用补码加减法实现,结果再转换为原码(2)直接用原码加减运算,符号和数值部分分开进行。其步骤如下:比较两个操作数的符号?加法-实行 “同号求和,异号求差”?减法-实行 “异号求和,同号求差”求和:数值位相加?若最高位产生进位,则溢出?若最高位无进位,则和的符号位为被加(减)数的符号求差:被加(减)数的数值位加上加(减)数数值位的补码?若最高位有进位,则结果为正,说明数值位正确,差的符号位为被加(减)数的符号;?若
30、最高位无进位,则结果为负,得到的数值位为补码形式,故需对结果求补,差的符号位与被加(减)数的符号位相反 37.加法器的运算速度取决于什么? 答:在门电路延迟一定的情况下,加法器的速度主要取决于进位方式,并行进位方式比串行进位方式的速度快。 38.计算机内部如何实现移位操作? 答:在计算机内部,移位操作在移位器中进行,移位器位数固定,所以,移位前后数的位数不变。左移一位,数值扩大一倍,相当于乘2操作;右移一位,数值缩小一半,相当于除2操作。 移位操作分逻辑移位、算术移位和循环移位三种。 逻辑移位对无符号数进行,移位规则为:左移时,高位移出,低位补0 右移时,低位移出,高位补0 算术移位是对带符号
31、数进行的,移位时符号位不变,只对数值部分移位。移位规则为: 原码 左移:高位移出,末位补0。移出非零时,发生溢出。 右移:高位补0,低位移出。移出时进行舍入操作。 补码 左移:高位移出,末位补0。移出非符时,发生溢出。 右移:高位补符,低位移出。移出时进行舍入操作。 循环移位对无符号数进行,移位时把高(低)位移出的一位送到低(高)位即可。 39.计算机内部如何实现填充(扩展)操作? 答:在计算机内部,有时需要将一个取来的短数扩展为一个长数,此时要进行填充(扩展)处理。对于无符号整数,只要在高位补0,进行“零扩展”。 对于有符号数,则可能有两种情况: 1) 对于定点整数,在符号位后的数值高位进行
32、。 原码:符号位不变,数值部分高位补0 补码:高位直接补符,称为“符号扩展”方式 2)对于定点小数表示的浮点数的尾数,则在低位补0即可。40.在计算机中,乘法和除法运算如何实现?答:乘法和除法运算是通过加/减运算和左/右移位运算来实现的。所以只要用加法器和移位寄存器在CPU的控制下就可以实现。第三章 存储系统1.ROM是一种和RAM一样的随机存取存储器吗? 答:是的。虽然经常把只读存储器ROM和随机访问存储器RAM放在一起进行分类,但ROM的存取方式和RAM是一样的,都是通过对地址进行译码,选择某个单元进行读写。所以两者采用的都是随机存取方式。不同的是:ROM是只读的,RAM是可读可写的。在程
33、序执行过程中,ROM存储区只能读出信息,不能修改,而RAM区可以读出,也可以修改信息。 2.寄存器和主存储器都是用来存放信息的,它们有什么不同? 答:寄存器在CPU中,用触发器来实现,速度极快,价格高,容量只有几十个,多的机器也只有几百个,主要用来暂存指令运行时的操作数和结果。主存储器在CPU之外,用MOS管电路实现,速度没有寄存器快,价格也比寄存器便宜,目前主存容量可以达到4GB左右,用来存放已被启动的程序代码和数据。 3.存取时间Ta就是存储周期Tm吗? 答:不是。存取时间Ta是执行一次读操作或写操作的时间。分为读出时间和写入时间。读出时间为从主存接受到有效地址开始到数据取出有效为止的时间
34、;写入时间是从主存接受到有效地址开始到数据写入被写单元为止的时间。存储周期Tm是指存储器进行连续两次独立的读或写操作所需的最小时间间隔。所以存取时间Ta不等于存储周期Tm。通常存储周期Tm大于存取时间Ta。对于破坏性读出DRAM,Tm约为Ta的两倍。 4.刷新和再生是一回事吗? 答:不是一回事。对某个单元的刷新和再生操作过程是一样的,即读后恢复。但再生操作是随机的,只对所读单元进行;而刷新操作则是按顺序定时对一行一行进行的。5.刷新是一个个芯片按顺序完成的吗? 答:不是。刷新按行进行,每一行中的记忆单元同时被刷新,仅需要行地址,不需要列地址。刷新行号由DRAM芯片的刷新控制电路中的刷新计数器产
35、生。整个存储器中的所有芯片的相同行同时进行刷新,所以不是一个一个芯片按顺序进行的,而是单个芯片的所有行按顺序定时一行一行进行的。 6.主存都是由RAM组成的吗? 答:不是。主存是由RAM和ROM两部分组成的,它们统一编址,分别占用不同的地址空间。 7.程序员是否需要知道高速缓存的访问过程? 答:不需要。高速缓存Cache的访问过程对程序员来说,是透明的。执行到一条指令时,需要到内存取指令,有些指令还要访问内存取操作数或存放运算结果。采用Cache的计算机系统中,总是先到Cache去访问指令或数据,没有找到才到主存去访问。这个过程是CPU在执行指令过程中自动完成的。程序员不需要知道要找的指令和数
36、据在不在Cache中、该在Cache的哪一块中,等等,也不需要知道Cache的访问过程,只要在指令中给定内存单元的地址就行了。 8.主存和Cache分块时,是否字块越大,命中率越高? 答:不是。字块大,可以充分利用程序访问的空间局部性特点,字块大使得一个比较大的局部空间被一起调到Cache中,因而可以增加命中机会。但是,字块不能太大。主要原因有两个:(1)字块大使失效损失变大,也就是说,如果不命中的话,需花更多时间从主存读块。(2)字块太大,则Cache项数变少,因而,命中的可能性变小。 9.指令和数据都是放在同一个Cache中的吗? 答:现代计算机系统中,一般采用多级的Cache系统。CPU
37、执行指令时,先到速度最快的一级Cache (L1 Cache) 中寻找指令或数据,找不到时,再到速度次快的二级Cache (L2 Cache) 中找,最后到主存中找。对于一级Cache,指令和数据一般是分开存放的。因此,有L1 Data Cache 和L1 Code Cache。 10.Cache可以做在CPU芯片里面吗? 答:可以。早期的计算机,其Cache是做在主板上的。但随着CPU芯片技术的提高,Cache可以做在CPU里面。从逻辑上来说,Cache是位于CPU和主存之间的部件,但在物理上,Cache被封装在一个CPU芯片内。现代计算机系统中,一般采用多级的Cache系统。CPU执行指令
38、时,先到速度最快的一级Cache (L1 Cache) 中寻找指令或数据,找不到时,再到速度次快的二级Cache (L2 Cache) 中找,最后再到主存中找。目前,一级Cache和二级 Cache都可以封装在CPU芯片中。11.直接映射方式下是否需要考虑替换方式?为什么? 答:无需考虑。因为,在直接映射方式下,一个给定的主存块只能放到一个唯一的固定Cache槽中,所以,在对应Cache槽已有一个主存块的情况下,新的主存块毫无选择地把原先已有的那个主存块替换掉,因而无需考虑替换算法。第四章 指令系统1.一台计算机中的所有指令都是一样长吗? 答:不一定。有定长指令字机器和不定长指令字机器两种。定
39、长指令字机器中所有指令都一样长,称为规整型指令,目前定长指令字大多是32位指令字。不定长指令字机器的指令有长有短,但每条指令的长度一般都是8的倍数。所以,一个指令字在存储器中存放时,可能占用多个存储单元;从存储器读出并通过总线传输时,可能分多次进行,也可能一次读多条指令。 2.每一条指令中都包含操作码吗? 答:是的。每一条指令都必须告诉CPU该指令做什么操作,所以必须指定操作码。 3.每条指令中的地址码个数都一样吗? 答:不一定,有的没有地址码,有的包含一个地址码,有的是两个或三个。地址码个数不一样的主要原因有三个:(1)每条指令操作码的个数可能不同。有的指令是双目运算指令,涉及到两个源操作数
40、和目操作数,有的是单目运算,只涉及到一个源操作数和目操作数,还有的指令只是控制操作,不涉及到操作数,如:停机、复位、空操作等指令。所以每条指令涉及到的操作数个数不同。(2)每个操作数的寻址方式可能不同。不同的寻址方式给出的地址码个数也不同。(3)地址码的缺省方式可能不同。有的操作数或地址码用的是隐含指定方式,在指令中缺省,不明显给出,如:累加器,堆栈等。 综上所述,每条指令的操作码个数可能相差很大。 4.指令中的所有操作数都采用相同的寻址方式吗? 答:不一定。规整型指令一般在一条指令中只包含一种寻址方式,这样,在指令操作码中就隐含了寻址方式,不需要专门有寻址方式字段。但是对于不规整型指令,一条
41、指令中的若干操作数可能存放在不同地方,因而每个操作数可能有各自的寻址方式。 5.指令中要明显给出下一条指令的地址吗? 答:不需要。指令在主存中按执行顺序连续存放。大多数情况下指令被顺序执行,只有遇到转移指令(如,无条件转移、条件分支、调用和返回等指令)才改变指令执行的顺序。所以,可以用一个专门的计数器,来存放下一条要执行的指令地址,而不需要在指令中专门给出下一条指令的地址。这个计数器称为程序计数器PC或指令指针IP。 当顺序执行时,CPU直接通过对PC加“1”来使PC指向下一条顺序执行的指令;当执行到转移指令时,根据指令执行的结果进行相应的地址运算,把运算得到的转移目标地址送到PC中,使得执行
42、的下一条指令为转移到的目标指令。 6.一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址呢? 答:现代计算机都是采用字节编址方式,即一个内存单元只能存放一个字节的信息。一个操作数(如:char型、int型、float型、double型)可能是8位、16位、32位或64位等,因此,可能占用1个、2个、4个或8个内存单元。也就是说,一个操作数可能有多个内存地址对应,在指令中给出哪个地址呢? 有两种不同的地址指定方式:大端方式和小端方式。 大端方式(Big Endian):指令中给出的地址是操作数最高有效字节(MSB) 所在的地址。 小端方式(Little Endian):指令中给出的地址
43、是操作数最低有效字节(LSB) 所在的地址。 7.地址码位数与主存容量和编址单位的关系是什么? 答:指令中的地址码如果是主存单元的地址,那么,地址码的位数与主存的容量和编址单位的长度有关。编址单位的长度就是主存单元的宽度,也就是最小的寻址单位。内存可以按字节编址(8位),也可以按字编址(如:16位,32位等)。主存的容量和编址单位确定后,地址码的位数就被确定了。例如,若主存容量为4GB,编址单位是字节,则主存单元的地址就是32位(因为,4GB= 232B);若按字(假定一个字为32位)编址,则主存单元的地址就是30位(因为,4GB= 232B= 230x4B)。 8.累加器型指令有什么特点?
44、答:累加器型指令的一个源操作数和目操作数总是在累加器中,是隐含指定的,所以指令中不需要给出累加器的编号。因而,累加器型指令的指令字相对来说较短,但由于每次运算结果都只能放到累加器中,可能会增加一些从累加器取数的指令而使程序变长。 9.堆栈型指令有什么特点? 答:与堆栈有关的操作有:入栈(PUSH)、出栈(POP)和运算类操作。运算类指令分单目运算和双目运算,总是从栈顶取操作数,运算后的结果自动放到栈顶。所以,指令中不需要给出操作数地址,因此,堆栈指令是零地址指令,指令字较短。但因为所有的操作数都只能在栈顶,所以,会增加很多入栈指令而使得程序变长。 堆栈指令的访存次数,取决于采用的是软堆栈还是硬
45、堆栈。如果是软堆栈(堆栈区由内存实现)的话,对于双目运算,需要访问四次内存:取指、取源数1、取源数2、存结果。如果是硬堆栈(堆栈区由寄存器实现)的话,则只需取指令时访问一次内存。 10.通用寄存器型指令有什么特点? 答:通用寄存器型指令,是相对于累加器型指令和堆栈型指令而言的,指令中的操作数和运算的结果既不是隐含在累加器中,也不是隐含在堆栈中。而是在CPU中提供了多个通用寄存器,操作数和结果可以放在这些寄存器中,指令必须明显地指出操作数和结果在哪个寄存器或哪个主存单元中,要给出寄存器的编号或主存单元地址。目前大多数指令系统采用通用寄存器型指令风格。 11.装入/存储型指令有什么特点? 答:装入
46、/存储型指令是用在规整型指令系统中的一种通用寄存器型指令风格。为了规整指令格式,使指令具有相同的长度,规定只有装入/存储(Load/Store)指令才能访问内存,而运算指令不能直接访问内存,只能从寄存器取数进行运算,运算的结果也只能送到寄存器。因为,寄存器编号较短,而主存地址位数较长,通过某种方式可以使运算指令和访存指令的长度一致。 这种装入/存储型风格的指令系统最大的特点是指令格式规整,指令长度一致,一般为32位。由于只有Load/Store指令才能访问内存,程序中可能会包含许多装入指令和存储指令,与一般通用寄存器型指令风格相比,其程序长度会更长。 12.指令寻址方式和数据寻址方式有什么不同? 答:程序被启动时,程序所包含的指令和数据都被装入到内存中。在程序指令过程中,需要取指令和操作数,确定指令存放位置的过程称为指令寻址方式,确定操作数存放位置的过程称为数据寻址方式。指令寻址和数据寻址其复杂度是不一样的。 指令寻址:指令基本上按执行顺序存放在主存中,执行过程中,指令总是从内存单元被取到指令寄存器IR中。顺序执行时,用指令计数器PC+“1”来得到下一条指令的地址;跳转执行时,通过转移指令的寻址方式,计算出目标地址,送到PC中即可。目标转移地址的形成方式主要有三种:立即寻址(直接地址)、相对寻址(相对地址)和间接寻址(间接地址)。 数据寻址
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100