2020 应用题错题

本文探讨了在不同指令系统下实现乘法运算的方法,包括如何在无乘法指令的环境下利用加法和移位完成乘法。同时,讨论了在有乘法指令时,控制逻辑在实现乘法操作中的作用。文章还涉及了乘法运算的时间复杂度对比,指出无乘法指令时执行时间最长,阵列乘法器实现的乘法指令执行时间最短。此外,文章分析了带符号和无符号整数乘法的溢出判断,以及数据Cache的管理,包括标记、LRU位、写策略。最后,文章介绍了虚拟内存的概念,讨论了其必要性和工作原理,以及二级页表的使用情况。
摘要由CSDN通过智能技术生成

1

有实现xy的两个C语言函数如下:
unsigned umul(unsigned x,unsigned y)
{
return x
y;
}
int umal(int x,int y)
{
return xy;
}
假定计算机M中ALU只能进行加减运算和逻辑运算,请回答下列问题。
1:若M的指令系统中没有乘法指令,但有加法,减法和移位等指令,则在M上也能实现上述两个函数中的乘法运算,为什么?
我发现408在应用题这块考的是总体把握,很少考具体某个算法的实现。
编译器可以将乘法运算转换成一个循环代码段,在循环代码段中通过比较,加法,移位等指令实现乘法运算
2:若M的指令系统中有乘法指令,则基于ALU,移位器,寄存器以及相应控制逻辑实现乘法操作时,控制逻辑的作用是什么?
控制逻辑的作用为:控制循环次数,控制加法和移位操作。
3:针对以下三种情况:a没有乘法指令,b有使用ALU和移位器实现的乘法指令;c有使用阵列乘法器实现的乘法指令。
函数umul()在那种情况下执行时间最长,哪种最短为什么?
对于a,需要用循环代码段(即软件)实现乘法操作,因而需要反复执行很多条指令。而每条指令都需要取指令,译码,取数,执行并保存结果,所以执行时间很长;
对于b和c,都只要用一条乘法指令实现乘法指令,不过,b中的乘法指令需要多个时钟周期才能完成,而c中的乘法指令可以在一个时钟周期内完成,所以c执行时间最短。
4n位整数乘法指令可保存2n位乘积,当仅取低n位作为乘积时,其结果可能会发生溢出。当n=32,x=2^31-1,y=2时,带符号整数乘法指令和无符号整数乘法指令得到的x
y的2n位乘积分别是什么(用十六进制数表示)?此时函数umul()和imul()的返回结果是否溢出?对于无符号整数乘法运算,当仅取乘积的低n位作为乘法结果时,如何用2n位乘积进行溢出判断?
这里是算术移位还是逻辑移位。
这里的移位操作给我移懵逼了,为啥是这样呢?
我们看啊x有32位,是0111 1111 1111 1111 1111 1111 1111 1111
y也有32位,是0000 0000 0000 0000 0000 0000 0000 0010
当x和y是无符号整数的时候,乘起来很容易,无非是把x都左移一位,然后右边补0就是了。
可当它们都是有符号整数的时候,符号位到底变不变,这就成为了一个问题。
我通过查阅资料,了解到了具体规则:
对有符号正数进行左移和右移,都不需要顾及到符号位。并且因为正数的原码,补码,反码相同的原因,补0就可以了。
首先,我原来有一个错误的认知,就是对于有符号数而言,无论是左移还是右移,无非都是乘2除2罢了,所以我以为符号位是不动的。
但这种想法是错误的,因为移位是宏观的操作,不允许任何元素保持不动,所以左移的时候,正数有可能变成负数,负数有可能变成正数。因为左移的话,原来的符号丢了,右边补的是0。
那为什么要容许这种现象存在呢?这样不会导致数据运算错误吗?事实上它代表溢出。
而当右移时,符号位看上去不会变化,实际上只是补上对应的符号位罢了。
我现在只能分析到这了。
当x和y都是有符号整数时:
x整体左移一位,低位补0
1111 1111 1111 1111 1111 1111 1111 1110
原本的符号位是0,现在符号位变成1了,很明显溢出。
对于无符号整数乘法,若乘积高n位全为0,则不溢出,否则溢出。

2

假定主存地址为32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联映射方式,直写(Write Through)写策略和LRU替换算法,主存块大小为64B,数据区容量各为32KB,开始时cache为空。
(1)Cache每一行中标记(Tag),LRU位各占几位?是否有修改位?
第一点,我忘记了什么是标记。因为这个名字起的太模糊了。现在重申一下,
标记是Cache的前n位,表示的是它是主存中哪一块的副本,是CPU访存时从Cache调取数据块的一个确认机制。如果Cache的标记和主存地址的高t位标记进行比较&

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值