计算机原理常见问题大全 下载本文

?若最高位无进位,则和的符号位为被加(减)数的符号

–求差:被加(减)数的数值位加上加(减)数数值位的补码

?若最高位有进位,则结果为正,说明数值位正确,差的符号位为被加(减)数的符号;

?若最高位无进位,则结果为负,得到的数值位为补码形式,故需对结果求补,差的符号位与被加(减)数的符号位相反

37.加法器的运算速度取决于什么?

答:在门电路延迟一定的情况下,加法器的速度主要取决于进位方式,并行进位方式比串行进位方式的速度快。

38.计算机内部如何实现移位操作?

答:在计算机内部,移位操作在移位器中进行,移位器位数固定,所以,移位前后数的位数不变。左移一位,数值扩大一倍,相当于乘2操作;右移一位,数值缩小一半,相当于除2操作。

移位操作分逻辑移位、算术移位和循环移位三种。 逻辑移位对无符号数进行,移位规则为: 左移时,高位移出,低位补0 右移时,低位移出,高位补0

算术移位是对带符号数进行的,移位时符号位不变,只对数值部分移位。移位规则为: ① 原码

左移:高位移出,末位补0。移出非零时,发生溢出。 右移:高位补0,低位移出。移出时进行舍入操作。 ② 补码

左移:高位移出,末位补0。移出非符时,发生溢出。 右移:高位补符,低位移出。移出时进行舍入操作。

循环移位对无符号数进行,移位时把高(低)位移出的一位送到低(高)位即可。

39.计算机内部如何实现填充(扩展)操作?

答:在计算机内部,有时需要将一个取来的短数扩展为一个长数,此时要进行填充(扩展)处理。对于无符号整数,只要在高位补0,进行“零扩展”。 对于有符号数,则可能有两种情况:

1) 对于定点整数,在符号位后的数值高位进行。 ① 原码:符号位不变,数值部分高位补0

② 补码:高位直接补符,称为“符号扩展”方式

2)对于定点小数表示的浮点数的尾数,则在低位补0即可。 40.在计算机中,乘法和除法运算如何实现?

答:乘法和除法运算是通过加/减运算和左/右移位运算来实现的。所以只要用加法器和移位寄存器在CPU的控制下就可以实现。

1.一台计算机中的所有指令都是一样长吗?

答:不一定。有定长指令字机器和不定长指令字机器两种。定长指令字机器中所有指令都一样长,称为规整型指令,目前定长指令字大多是32位指令字。不定长指令字机器的指令有长有短,但每条指令的长度一般都是8的倍数。所以,一个指令字在存储器中存放时,可能占用多个存储单元;从存储器读出并通过总线传输时,可能分多次进行,也可能一次读多条指令。

2.每一条指令中都包含操作码吗?

答:是的。每一条指令都必须告诉CPU该指令做什么操作,所以必须指定操作码。

3.每条指令中的地址码个数都一样吗?

答:不一定,有的没有地址码,有的包含一个地址码,有的是两个或三个。地址码个数不一样的主要原因有三个:(1)每条指令操作码的个数可能不同。有的指令是双目运算指令,涉及到两个源操作数和目操作数,有的是单目运算,只涉及到一个源操作数和目操作数,还有的指令只是控制操作,不涉及到操作数,如:停机、复位、空操作等指令。所以每条指令涉及到的操作数个数不同。(2)每个操作数的寻址方式可能不同。不同的寻址方式给出的地址码个数也不同。(3)地址码的缺省方式可能不同。有的操作数或地址码用的是隐含指定方式,在指令中缺省,不明显给出,如:累加器,堆栈等。 综上所述,每条指令的操作码个数可能相差很大。

4.指令中的所有操作数都采用相同的寻址方式吗?

答:不一定。规整型指令一般在一条指令中只包含一种寻址方式,这样,在指令操作码中就隐含了寻址方式,不需要专门有寻址方式字段。但是对于不规整型指令,一条指令中的若干操作数可能存放在不同地方,因而每个操作数可能有各自的寻址方式。

5.指令中要明显给出下一条指令的地址吗?

答:不需要。指令在主存中按执行顺序连续存放。大多数情况下指令被顺序执行,只有遇到转移指令(如,无条件转移、条件分支、调用和返回等指令)才改变指令执行的顺序。所以,可以用一个专门的计数器,来存放下一条要执行的指令地址,而不需要在指令中专门给出下一条指令的地址。这个计数器称为程序计数器PC或指令指针IP。

当顺序执行时,CPU直接通过对PC加“1”来使PC指向下一条顺序执行的指令;当执行到转移指令时,根据指令执行的结果进行相应的地址运算,把运算得到的转移目标地址送到PC中,使得执行的下一条指令为转移到的目标指令。

6.一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址呢?

答:现代计算机都是采用字节编址方式,即一个内存单元只能存放一个字节的信息。一个操作数(如:char型、int型、float型、double型)可能是8位、16位、32位或64位等,因此,可能占用1个、2个、4个或8个内存单元。也就是说,一个操作数可能有多个内存地址对应,在指令中给出哪个地址呢?

有两种不同的地址指定方式:大端方式和小端方式。 大端方式(Big Endian):指令中给出的地址是操作数最高有效字节(MSB) 所在的地址。 小端方式(Little Endian):指令中给出的地址是操作数最低有效字节(LSB) 所在的地址。

7.地址码位数与主存容量和编址单位的关系是什么?

答:指令中的地址码如果是主存单元的地址,那么,地址码的位数与主存的容量和编址单位的长度有关。编址单位的长度就是主存单元的宽度,也就是最小的寻址单位。内存可以按字节编址(8位),也可以按字编址(如:16位,32位等)。主存的容量和编址单位确定后,地址码的位数就被确定了。例如,若主存容量为4GB,编址单位是字节,则主存单元的地址就是32位(因为,4GB= 232B);若按字(假定一个字为32位)编址,则主存单元的地址就是30位(因为,4GB= 232B= 230x4B)。

8.累加器型指令有什么特点?

答:累加器型指令的一个源操作数和目操作数总是在累加器中,是隐含指定的,所以指令中不需要给出累加器的编号。因而,累加器型指令的指令字相对来说较短,但由于每次运算结果都只能放到累加器中,可能会增加一些从累加器取数的指令而使程序变长。

9.堆栈型指令有什么特点?

答:与堆栈有关的操作有:入栈(PUSH)、出栈(POP)和运算类操作。运算类指令分单目运算和双目运算,总是从栈顶取操作数,运算后的结果自动放到栈顶。所以,指令中不需要给出操作数地址,因此,堆栈指令是零地址指令,指令字较短。但因为所有的操作数都只能在栈顶,所以,会增加很多入栈指令而使得程序变长。

堆栈指令的访存次数,取决于采用的是软堆栈还是硬堆栈。如果是软堆栈(堆栈区由内存实现)的话,对于双目运算,需要访问四次内存:取指、取源数1、取源数2、存结果。如果是硬堆栈(堆栈区由寄存器实现)的话,则只需取指令时访问一次内存。

10.通用寄存器型指令有什么特点?

答:通用寄存器型指令,是相对于累加器型指令和堆栈型指令而言的,指令中的操作数和运算的结果既不是隐含在累加器中,也不是隐含在堆栈中。而是在CPU中提供了多个通用寄存器,操作数和结果可以放在这些寄存器中,指令必须明显地指出操作数和结果在哪个寄存器或哪个主存单元中,要给出寄存器的编号或主存单元地址。目前大多数指令系统采用通用寄存器型指令风格。

11.装入/存储型指令有什么特点?

答:装入/存储型指令是用在规整型指令系统中的一种通用寄存器型指令风格。为了规整指令格式,使指令具有相同的长度,规定只有装入/存储(Load/Store)指令才能访问内存,而运算指令不能直接访问内存,只能从寄存器取数进行运算,运算的结果也只能送到寄存器。因为,寄存器编号较短,而主存地址位数较长,通过某种方式可以使运算指令和访存指令的长度一致。

这种装入/存储型风格的指令系统最大的特点是指令格式规整,指令长度一致,一般为32位。由于只有Load/Store指令才能访问内存,程序中可能会包含许多装入指令和存储指令,与一般通用寄存器型指令风格相比,其程序长度会更长。

12.指令寻址方式和数据寻址方式有什么不同?

答:程序被启动时,程序所包含的指令和数据都被装入到内存中。在程序指令过程中,需要取指令和操作数,确定指令存放位置的过程称为指令寻址方式,确定操作数存放位置的过程称为数据寻址方式。指令寻址和数据寻址其复杂度是不一样的。

指令寻址:指令基本上按执行顺序存放在主存中,执行过程中,指令总是从内存单元被取到指令寄存器IR中。顺序执行时,用指令计数器PC+“1”来得到下一条指令的地址;跳转执行时,通过转移指令的寻址方式,计算出目标地址,送到PC中即可。目标转移地址的形成方式主要有三种:立即寻址(直接地址)、相对寻址(相对地址)和间接寻址(间接地址)。

数据寻址:开始时,数据被存放在内存中,但在指令执行过程中,内存的数据可能被装入到CPU的寄存器中,或者内存的堆栈区中;还有的操作数可能是I/O端口中的内容,或本身就包含在指令中(即:立即数)。另外,运行的结果也可能要被送到CPU的寄存器中、堆栈中、I/O端口或内存单元中,所以,数据的寻址要涉及到对寄存器、内存单元、堆栈、I/O端口、立即数的访问。此外,操作数可能是某个一维或二维数组的元素,因此,还要考虑如何提供相应的寻址方式,以方便地在内存找到数组元素。综上所述,数据的寻址比指令的寻址要复杂得多。

13.如何指定指令的寻址方式?

答:CPU根据指令约定的寻址方式对地址码的有关信息进行解释,以找到下条要执行的指令,或指令所需的操作数。有的指令设置专门的寻址方式字段,显式说明采用何种寻址方式,有的指令通过操作码隐含寻址方式。

规整型指令一般在一条指令中只包含一种寻址方式,这样,就可在指令操作码中隐含寻址方式,不需要专门有寻址方式字段。但是对于不规整型指令,一条指令中的若干操作数可能存放在不同的地方,因而每个操作数可能有各自的寻址方式字段。

14.指令的操作数可能存放在机器的哪些地方?

答:指令的操作数可能存放在以下五个地方:

(1)内存单元:指令必须以某种方式给出内存单元的地址。又可分为以下几种情况:对单个独立的操作数进行处理;对一个数组中的若干个连续元素或一个数组元素进行处理;对一个表格或表格中的某个元素进行处理,等等。这些不同的情况需要提供不同的寻址方式进行操作数的访问。

(2)寄存器:指令中只要直接给出寄存器的编号即可。

(3)堆栈区:指令中不需要给出操作数的地址,数据的地址隐含地由堆栈指针给出。 (4)I/O端口:当某个I/O接口中的寄存器内容要和CPU中的寄存器内容交换时,要用I/O指令。在I/O传送指令中,需提供I/O端口号。 (5)指令中(立即数):操作数是指令的一部分,直接从指令中的立即数字段取操作数。