计算机考研 | 2019年 | 计算机组成原理真题

【计算机组成原理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]<—R[eax]*R[ecx],当乘法器输出的高、低32位乘积之间满足什么条件时,溢出标志 OF=1?

若乘积的高33位非全0或非全1(为什么是高33位而不是32位呢,因为多出的那一位代表的是数值的正负),就出现了溢出,则溢出标志 OF=1

(2)要使CPU在发生溢出时转异常处理,编译器应在 imul指令后应加一条什么指令?

加一条溢出自陷指令,当OF等于1时启动

总结:

从以上五个小题可以看出来以下信息

  1. 本题是考察计算机组成原理中指令系统和数据的表示和运算(考察的知识点)还有一部分汇编语言

  2. 遇到不会做可以找一下题目中暗含的提示,比如本题的除了最后一个ret至另外,其他的跳转指令都加上了地址

  3. 看题要细致,比如第五小题第一问,给了带符号位整数乘,则第一位是符号位,所以查看的是乘积位高33位

  4. 实在不会做的,可以蒙一个,比如第五小题第二问。其实给了一个隐含提示,也就是异常处理,CPU的异常处理就是自陷,我答的是中断

【计算机组成原理2019年真题46题-7分】

在这里插入图片描述

【第一步:信息提取】

1、主存地址为32位:表示主存大小为4GB

2、页大小为4KB:给了页面大小的同时,给了页面数 4GB/4KB=1M 个页面

3、指令Cache有64行,采用4路组相联映射方式,主存块大小为64B:所以分为16个组。组相联的地址方式:主存字块标记+组地址+字块内地址。所以组地址占4bit;主存块大小为64B,字块内地址占6位

【第二步:具体解答】

(1)第1行的push 指令和第30行的ret 指令是否在同一页中(说明理由)?

第1行的push指令为 0040 1000H;第30行的ret指令为 0040 104AH

由信息提取②可知,一个页面为4KB,占12bit,信息提取①虚拟地址长32bit,所以前20位是页号。

第1行的push指令的页号为为 0040 1H;第30行的ret指令的页号为为 0040 1H,所以在同一页

(2)若指令Cache有64行,采用4路组相联映射方式,主存块大小为64B,则32位主存地址中,哪几位表示块内地址?(3)哪几位表示 Cache组号?(4)哪几位表示标记(tag)信息?

由信息提取③可知,指令Cache有64行,采用4路组相联映射方式,所以分为16个组。组相联的地址方式:主存字块标记+组地址+字块内地址。所以组地址占4bit;主存块大小为64B,字块内地址占6位。所以主存字块标记为22位。

综上所述:低地址6位为块内地址,中间4位为组地址,高22位为标记(tag)信息

(5)读取第16行的call指令时,只可能在指令Cache的哪一组中命中(说明理由)?

16行的call指令的虚拟地址是:0040 1025H,我们从上题可知,中间4位为组地址将虚拟地址转换:0000 0000 0100 0000 0001 0000 0010 0101,取第7~10位,所以为0组命中

总结:

从以上五个小题可以看出来以下信息:

  1. 主要考察的是存储器系统,具体是Cache-主存的映射方式

  2. 要分清,给出地址的每个分段分别代表什么意思,从地址出发要不要想当然

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_之桐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值