计算机原理常见问题大全

发布时间 : 星期四 文章计算机原理常见问题大全更新完毕开始阅读

15.有哪些常用的数据寻址方式?

答:数据寻址方式可以归为以下几类:

(1)立即寻址:指令中的立即数字段,可以作为操作数,也可以作为直接转移地址。取到ALU运算前,可能要对其进行扩展。

(2)直接寻址类:指令中直接给出操作数所在的寄存器编号、I/O端口号或主存单元地址。如:直接寻址方式、寄存器寻址方式。

(3)间接寻址类:操作数在主存单元中,而操作数的地址存放在寄存器或另一个主存单元中,指令中给出操作数的地址所在的寄存器编号或主存单元地址。如:间接寻址方式、寄存器间接寻址方式。

(4)偏移寻址类:指令通过某种方式给出一个形式地址和一个基地址(往往在某个寄存器中),经过相应的计算(基地址加形式地址)得到操作数所在的内存单元地址。如:变址寻址方式、相对寻址方式、基址寻址方式等。

16.取直接寻址的操作数要访问几次内存?

答:一次。只要根据指令中给出的内存单元地址访问一次内存,取出来的就是操作数。

17.取间接寻址的操作数要访问几次内存? 答:至少两次。先根据指令中给出的内存单元地址访问一次内存,取出来的是操作数的地址;再根据操作数的地址去内存访问一次,取出来的才是操作数。所以,一共访问两次内存。如果是多级间接地址的话,可能还要访问内存。

18.取寄存器寻址的操作数要访问几次内存?

答:不需要访问内存。从指定寄存器中取出的就是操作数。

19.取寄存器间接寻址的操作数要访问几次内存?

答:一次。先从指令给出的寄存器中取出操作数地址,再根据操作数地址到内存访问,得到的就是操作数。

20.什么是变址寻址方式?

答:变址寻址方式下,指令中的地址码给出一个形式地址,并且隐含或明显地指定一个寄存器作为变址寄存器,变址寄存器的内容(变址值)和形式地址相加,得到操作数的有效地址,根据有效地址到内存访问,去取操作数或写运算结果 。

变址寻址方式的应用很广泛。最基本的使用场合是用在对数组元素的访问。指令将数组的首地址指定为形式地址,变址寄存器的内容是数组元素的下标,随着下标的变化,可以访问数组中不同的元素。所以变址寄存器的内容是变化的,反映的是所访问的数据到数组首地址的距离,称为变址值。这种应用场合下,形式地址的位数较长,而变址值位数少。变址寻址方式的指令一般包含在一个循环体内。每次进入循环时,变址值都增或减一个定长值,这个定长值等于数组元素的长度。

21.什么是基址寻址方式?

答:基址寻址方式下,指令中的地址码给出一个形式地址,作为位移量,并且隐含或明显地指定一个寄存器作为基址寄存器,基址寄存器的内容和形式地址相加,得到操作数的有效地址,根据有效地址到内存访问,去取操作数或写运算结果。

基址寻址的典型应用有两个:一个是程序重定位,在多道程序运行的系统中,每个用户程序在一个逻辑地址空间里编写程序。装入计算机运行时,由操作系统给用户程序分配主存空间,每个用户程序有一个基地址,存放在基址寄存器中,在程序执行时,通过基址寄存器的值加上指令中的形式地址就可以形成实际的主存单元地址。第二个应用是扩展有限长度指令的寻址空间。即在运行时将某个主存区间的首地址或程序段的首地址装入基址寄存器,而形式地址给出要访问的单元相对于该首地址的距离(即偏移量),因此指令中只要用较短的地址码来表示偏移量。访问操作数时,用基址寄存器的值和偏移量相加,得到操作数的内存单元地址。只要基址寄存器的内容更改到另外的一个主存地址,则操作数的地址空间就移到另一个主存区间。因而可以访问到主存的整个地址空间,以实现短地址访问大空间的目的。

22.变址寻址和基址寻址的区别是什么?

答:变址寻址方式和基址寻址方式的有效地址形成过程类似。但是,基址寻址方式与变址寻址方式在以下方面不同:(1)具体应用的场合不同。变址寻址面向用户,可用于访问字符串、数组、表格等成批数据或其中的某些元素。基址寻址面向系统,用于解决程序的重定位问题和短地址访问大空间的问题。(2)使用方式不同。变址寻址时,指令中提供的形式地址是一个基准地址,位移量由变址寄存器给出;而基址寻址时,指令中给出的形式地址为位移量,而基址寄存器中存放的是基准地址。不过,这里所讲的使用方式并不是绝对的,在实际的计算机设计中,可能会有不同的应用场合和使用方式。

23.什么是相对寻址方式?

答:相对寻址方式的有效地址形成方法如下:指令中的形式地址给出一个位移量D。而基准地址由程序计数器PC提供。即:有效地址EA=(PC)+ D。位移量给出的是相对于当前指令所在内存单元的距离,位移量可正、可负。也就是说,要找的可以在当前指令前D个单元处的信息,也可以是当前指令后D个单元处的信息。

24.相对寻址方式用在哪些场合?

答:相对寻址方式用在以下两种场合:

(1)公共子程序的浮动。因为公共子程序可能被许多用户程序调用,因而会随着用户程序装入到内存不同的地方运行。为了让公共子程序能在不同的内存区正确运行,一般在公共子程序内部采用相对寻址方式,以保证指令的操作数总在相对于指令的距离一定的单元内。这样,不管子程序浮动到哪里,指令和数据的相对位置不变。例如,现行指令的地址为2000H,指令中给出的形式地址为05H,说明操作数在当前指令后面第05H个单元处,即2005H处。当程序向后浮动了1000H,使当前指令的地址为3000H时,此时公共子程序中的指令、数据以及相对位置都不变,指令中给出的相对地址还是05H,操作数还是应该在当前指令后面的第05H个单元处,所以应该在3005H处,因此,指令取到的还是同一个数据。

(2)转移目标地址的寻址。当需要转到当前指令的前面或后面第n条指令执行时,可以

用相对寻址方式。此时,得到的转移地址是一个相对地址。

25.相对寻址方式中如何确定相对位置?

答:相对寻址方式中,相对位置的确定比较复杂。必须注意两个方面的问题:(1)位移量的问题。位移量位数有限,在进行有效地址计算时需要扩展。一般位移量用补码表示,所以应采用补码扩展填充方式(即:符号扩展方式)。(2)基准地址问题。相对寻址的基本思路是把相对于当前指令前面或者后面第n个单元作为操作数或目标转移指令的地址。但在具体实现时,不同机器对“当前指令”的含义有不同的理解。有的机器在计算相对地址时,PC中存放的还是当前正在执行的指令的地址,但有的机器PC加“1”的操作在取指令的同时完成,所以在计算相对地址时,PC中已经是下一条指令的地址。因此,不同的机器在计算相对地址时可能有一点细微的差别。

26.堆栈寻址方式中如何对堆栈进行操作?

答:堆栈是一块特殊的存储区。采用“先进后出”的方式进行访问。栈底固定不动,栈顶浮动,用一个专门的寄存器(SP)来作为栈顶指针。从堆栈生长的方向来分,可以有“自顶向下”和“自底向上”两种堆栈,它们在进、出栈时对栈指针的修改是不同的。

假定栈指针指向的总是栈顶处非空元素,则应该按以下方式修改栈指针: 对于“自底向上”生成的堆栈,进栈时先修改栈指针:(SP)-1→SP,然后再压入数据;出栈时先将数据弹出,然后再修改栈指针(SP)+1→SP。对于“自顶向下”生成的堆栈,进栈时先修改栈指针:(SP)+1→SP,然后再压入数据;出栈时先将数据弹出,然后再修改栈指针(SP)-1→SP。

假定栈指针指向的总是栈顶处的空元素,则应该按以下方式修改栈指针: 对于“自底向上”生成的堆栈,进栈时先压入数据,然后再修改栈指针:(SP)-1→SP;出栈时先修改栈指针:(SP)+1→SP,然后再将数据弹出。对于“自顶向下”生成的堆栈,进栈时先压入数据,然后再修改栈指针:(SP)+1→SP;出栈时先修改栈指针:(SP)-1→SP,然后再将数据弹出。

若每个栈中的元素只占一个内存单元,则修改指针时,通过“+1”或“-1”实现;若占多个内存单元,则应该加上或减去相应的值。

27.返回指令要不要有地址字段?

答:不一定。子程序的最后一条指令一定是返回指令。一般返回地址保存在堆栈中,所以返回指令中不需要明显给出返回地址,直接从栈顶取地址作为返回地址。如果有些计算机不采用堆栈保存返回地址,而是存放到其他不确定的地方,则返回指令中必须有一个地址码,用来指出返回地址或指出返回地址的存放位置。

28.转移指令和转子(调用)指令的区别是什么?

答:转移指令有无条件转移指令和条件转移指令(也叫分支指令)。这种转移指令用于改变程序执行的顺序,转移后不再返回来执行,所以无需保存返回地址。而转子指令是一种子程序调用指令,子程序执行结束时,必须返回到转子指令后面的指令执行。所以转子指令执行时,除了和转移指令一样要计算跳转的目标地址外,还要保存返回地址。一般将转子指令后面那条指令的地址作为返回地址保存到堆栈中。址保存到堆栈中。

1.一条指令的执行过程中要做哪些事情呢?

答:一条指令的执行过程包括:取指令、指令译码、(计算操作数地址)、取操作数、运算、送结果。其中取指令和指令译码是每条指令都必须进行的操作。有些指令需要到内存单元取操作数,因此,需要在取数之前计算操作数的内存单元地址。取操作数和送结果这两个步骤,对于不同的指令,其取和送的地方可能不同,有些指令要求在寄存器取/送数,有些是在内存单元取/送数,还有些是对I/O端口取/送数。因此,一条指令的执行阶段(不包括取指令阶段),可能只有CPU参与,也可能要通过总线去访问主存,也可能要通过总线去访问I/O端口。

2.指令周期、机器周期之间的关系是什么? 答:一条指令从读取到执行完成所花的全部时间被称为指令周期。一个指令周期中要完成多个步骤,包括取指令、指令译码(计算操作数地址)、取操作数、运算、送结果。这些步骤中,最复杂的操作是访问存储器取指令或读/写数据,以及访问I/O读/写数据。它们都涉及到总线操作,通过系统总线来和CPU之外的部件进行信息交换。通常把通过一次总线事务访问一次主存或I/O的时间称为机器周期。所以一个指令周期包含了多个机器周期。不同机器的指令周期所包含的机器周期数不同。典型的机器周期有:取指令、主存读(间址周期是一种主存读机器周期)、主存写、I/O读、I/O写、中断响应等。

3.CPU总是在执行指令吗?会不会停下来什么都不做?

答:CPU的功能就是不断地周而复始地执行指令,而每条指令又都有不同的步骤,每个步骤在一定的时间内完成。因此,CPU总是在不停地执行指令。有时我们会说,CPU停止或CPU正在等待,什么事情也不做。事实上,CPU还是在执行指令的,只不过可能处于以下几种类似的情况:(1) 在执行指令过程中,正在等待主存或I/O完成读/写;(2) 正在执行一连串的空指令(NOP);(3)可能正在执行一个循环(循环内只是不断地取状态、判断、不满足时继续循环),直到满足某个条件(如:查询外设有没有完成任务);等等。因而,CPU不可能不在执行指令。

4.CPU除了执行指令外,还做什么事情?

答:CPU的工作过程就是周而复始地执行指令,计算机各部分所进行的工作都是由CPU根据指令的要求来启动的。为了使CPU和外部设备能够很好地协调工作,尽量使CPU不等待、甚至不参与外部设备的输入和输出过程,采用了程序中断方式和DMA方式。这两种方式下,外部设备需要向CPU提出中断请求或DMA请求,因此,在执行指令过程中,CPU还要按时通过采样相应的引脚来查询有没有中断请求或DMA请求。一般,在一个机器周期结束时,查询是否有DMA请求,如果有的话,CPU脱离总线,由DMA控制器控制使用总线。在一个指令周期结束时,查询是否有中断请求,如果有的话,则进入中断响应机器周期,相当于执行了一条中断响应隐指令。在中断响应过程中,得到中断服务程序的入口地址,并送程序计数器PC中,下个指令周期开始时,取出中断服务程序的第一条指令执行。

5.CPU中的所有寄存器,用户都能访问吗?

答:CPU中的寄存器分为用户可访问寄存器和用户不可见寄存器。一般把用户可访问寄存

联系合同范文客服:xxxxx#qq.com(#替换为@)