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

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

参考答案与解析:

相关试题

int*f(int*x,int*y) { if(*x>*y) return x;

[单选题]int*f(int*x,int*y) { if(*x>*y) return x; else return y; } main() { int a=7,b=8,*p,*q,*r; p=&a;q=&b;r=f(p,q); printf("%d,%d,%d",*p,*q,*r); }执行后输出结果是______。A.7,8,8B.7,8,7C.8,7,7D.8,7,8

  • 查看答案
  • 有如下程序float fun (int x,int y){return(x£«y

    [单选题]有如下程序 float fun (int x,int y){return(x+y);} main() { int a=2,b=5,c=8; printf("%3.Of/n",fun((int)fun(a+c,B) ,(a-C) )) } 程序运行后的输出结果为_______。A.编译出错B.9C.21D.9

  • 查看答案
  • 有下列程序:fun(int x, int y) {return (x£«y);}

    [单选题]有下列程序: fun(int x, int y) {return (x+y);} main() { int a =1,b=2,c=3,sum; sum=fun((a++,b++,a+b),c++); printf("%d/n", sum); } 执行后的输出结果是( )。A.6B.7C.8D.9

  • 查看答案
  • 有以下程序fun(int x, int y){ return (x£«y); }

    [单选题]有以下程序fun(int x, int y){ return (x+y); }main(){ int a=1, b=2, c=3, sum;sum=fun((a++,b++,a+b),c++);printf("%d/n",sum);}执行后的输出结果是A.)6B.)7C.)8D.)9

  • 查看答案
  • 有以下程序 fun(int x,int y){return(x£«y);} ma

    [单选题]有以下程序 fun(int x,int y){return(x+y);} main() { int a=1,b=2,c=3,sum; sum=fun((a++,b++,a+b),c++); printf("%d/n",sum); }A.6B.7C.8D.9

  • 查看答案
  • 有下列程序: fun(int x,int y){return(x£«y);} m

    [单选题]有下列程序:fun(int x,int y){return(x+y);}main(){inta=l1b=2,c=3,sum;sum=fun((a++,b++,a+b),C++);printf("%d/n",sum);}执行后的输出结果是( )。A.6B.7C.8D.9

  • 查看答案
  • 有以下程序:fun(int x,int y){return(x£«y);}mai

    [单选题]有以下程序: fun(int x,int y){return(x+y);} main() {int a=1,b=2,c=3,Sum; sum=fun((a++,b++,a+b),c++); printf("%d",sum); } 执行后的输出结果是______。A.6B.7C.8D.9

  • 查看答案
  • 有以下程序float fun(int x,int y){ return(x£«y

    [单选题]有以下程序float fun(int x,int y){ return(x+y);}main(){ int a=2,b=5,c=8; printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序的运行结果是A.9 B.编译出错C.21 D.9.0

  • 查看答案
  • 有以下程序float fun(int x,int y){return(x£«y)

    [单选题]有以下程序 float fun(int x,int y) {return(x+y);} main() { int a=2,b=5,c=8; printf(“%3.Of/n”,fun((int)fun(a+c,b),a-c)); } 程序运行后的输出结果是A.编译出错B.9C.21D.9

  • 查看答案
  • 有以下程序:float fun(int x,int y){return(x£«y

    [单选题]有以下程序: float fun(int x,int y) {return(x+y);} main() { int a=2,b=5,C=8; printf("%3.0f/n",fun((int)fun(a+c,b),a-c)); } 程序运行后的输出结果是( )。A.编译出错B.9C.21D.9

  • 查看答案