导航菜单

计算机考研

文章目录【计算机组成原理2019年真题45题-16分】【第一步:信息提取】【第二步:具体解答】【计算机组成原理2019年真题46题-7分】【第一步:信息提取】【第二步:具体解答】

【计算机组成原理2019年真题45题-16分】

在这里插入图片描述

【第一步:信息提取】

1、编址方式:字节

2、int型数据占32位:4B

3、对代码的分析:机器级代码行包括行号、虚拟地址、机器指令和汇编指令。

【第二步:具体解答】

第一小题

(1)计算需要调用函数 f ( 10 ) f(10)f(10)多少次?

只有当n=1时,结束调用f1函数,所以,分别调用f1函数时的参数n的取值为:10、9、8、7、6、5、4、3、2、1,一共10次

(2)执行哪条指令会递归调用f1?

我们看f1的第一行的虚拟地址为0040 1000,所以就看哪一行会跳回这一行,发现是第16行调用了,也就是call f1

第二小题

(1)在上述代码中,哪条指令是条件转移指令?

纯考对汇编的理解看,分别是第12行的jle,第16行的call,第20行的jmp,第30行的ret。

其实本题还是给了一些小提示,也就是这些指令后面的汇编后面加了虚拟地址,对照虚拟地址找到行数,就可以推测是转移指令了

(2)哪几条指令一定会使程序跳转执行?

第16行的call,第20行的jmp,第30行的ret是一定要跳转的,第12行的jle指令含义是,为小于等于是转移,本行的意义是,n≤1时,跳转至0040 1035H

第三小题

(1)根据第16行的call 指令,第17行指令的虚拟地址应是多少?

由信息提取①可知,本计算机使用字节编址,也就是8个bit。

16行的call指令的虚拟地址是:0040 1025H,机器指令是 E8 D6 FF FF FF,因此长度为5个字节

可以得出算数公式:0040 1025H+0005H=0040 102AH,所以第17行指令的虚拟地址应是:0040 102AH

(2)已知第16行的call 指令采用相对寻址方式,该指令中的偏移量应是多少(给出计算过程)?

16行的call指令是一个相对寻址方式,有公式:目标地址=(PC)+偏移量,call的目标地址是0040 1000H

所以,偏移量=目标地址 - (PC) = 0040 1000H - 0040 1025H = FFFF FFD6H

(3)已知第16行的call指令的后4字节为偏移量,M是采用大端方式还是采用小端方式?

我们从第16行的call指令的机器指令可以得到E8 D6 FF FF FF,可以看到低地址数据放在高地址上,高地址数据放在低地址上,所以采用小端方式

第四小题

(1) f ( 13 ) f(13)f(13) =6227020800,但f 1( 13 ) f_1(13)f1​(13)的返回值为1932053504,为什么两者不等?

首先我们来对比两个数,实际得到的值比预期值小,说明出现了溢出现象,也就是说由信息提取①可知,int表示32位,而 f ( 13 ) f(13)f(13)的值大于32位int所能表示的值了,所以不一致

(2)要使f 1( 13 ) f_1(13)f1​(13)能返回正确的结果,应如何修改f1的源程序?

我们知道了,主要是由于32位所表示的int类型的值不能表示f 1( 13 ) f_1(13)f1​(13)的实际值了,所以只需要拓展位数,也就是将int类型改为long long类型即可

第五小题

(1)第19行的imul指令(带符号整数乘)的功能是R[eax]

相关推荐: