首页 习题正文

43.(13分)有实现x×y 的两个C语言函数如下∶unsi

43.(13分)有实现x×y 的两个C语言函数如下∶ unsigned umul (unsigned x,unsigned y) { return x*y;} int imul (int x,int y) {return ×* y;} 假定某计算机
M、中 ALU只能进行加减运算和逻辑运算。请回答下列词题。 (1)若
M、的指令系统中1没有乘法指令,但有加法、减法和位移等指令,则在 M上也能实现上述两个函数中的乘法运算,为什么? (2)若
M、的指令系统中有乘法指令,则基于 ALU、位移器、寄存器以及相应控制逻辑实现乘法指令时,控制逻辑的作用是什么? (3)针对以下三种情况;a)没有乘法指令;b)有使用ALU和位移器实现的乘法指令;c)有使用阵列乘法器实现的乘法指令,函数 umul()在哪种情况下执行时间最长?哪种情况下执行的时间最短?说明理由 (4)n位整数乘法指令可保存2n位乘积,当仅取低 n位作为乘积时,其结果可能会发生溢出。当 n=32、x=231-1、y=2时,带符号整数乘法指令和无符号整数乘法指令得到的x×y 的 2n位乘积分别是什么(用十六进制表示)?此时函数 umul()和 imul()的返回结果是否溢出?对于无符号整数乘法运算,当仅取乘积的低 n 位作为乘法结果时,如何用 2m 位乘积进行溢出判断?



【参考答案及解析】
(1)编译器可以将乘法运算转换为一个循环代码段,在循环代码段中通过比较、加法、移位等指令实现乘法运算。 (2)控制逻辑的作用为∶制循环次数,控制加法和移位操作。 (3)a)最长,c)最短。 对于a),需要用循环代码段(即软件)实现乘法操作,因而需反复执行很多条指令,而每条指令都需要取指令、译码、取数、执行并保存结果,所以执行时间很长;对于b)和c),都只要用一条乘法指令实现乘法操作,不过,b)中的乘法指令需要多个时钟周期才能完成,而 c)中的乘法指令可以在一个时钟周期内完成,所以c)执行时间最短。 (4)当 n=32、x=231-1、y=2 时,带符号整数和无符号整数乘法指令得到的64 位乘积都为0000 0000 FFFF FFFEH。函数 imul 的结果溢出,而函数 umul结果不溢出。对于无符号整数乘法,若乘积高n位全为0,则不溢出,否则溢出。

正在整理中,欢迎在文下评论区提供答案解析,谢谢!
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://scpro.cn/v/d37399bbd5d048a0.html