在按字节编址的计算机M上,题43中f1的部分源程序(阴

在按字节编址的计算机M上,题43中f1的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下:

     int fl(unsigned n)

1    00401020   55          push ebp

     ......        ...          ......

         for(unsigned i=0; i<=n-1; i++)

     ......        ...          ......

20   0040105E   39 4D F4    cmp dword ptr[ebq-0Ch],ecx

     ......        ...          ......

     {    power *= 2;

 ......        ...          ......

23   00401066 D1 E2      shl edx,1

 ......  ...         ......

  return sum;

 ......        ...           ......

35   0040107F C3           ret

  }

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。请回答下列问题。

(1)计算机M是RISC还是CISC?为什么?

(2)f1的机器指令代码共占多少字节?要求给出计算过程。

(3)第20条指令cmp通过i减n-1实现对i和n-1的比较。执行f1(0)过程中,当i=0时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程。

(4)第23条指令shl通过左移操作实现了power*2运算,在f2中能否也用sh1指令实现power*2?为什么?


答:

(1)M为CISC。(1分)M的指令长短不一,不符合RISC指令系统特点。(1分)

(2)f1的机器代码占96 B。(1分)

因为f1的第一条指令“push ebp”所在的虚拟地址为0040 1020H,最后一条指令“ret”所在的虚拟地址为0040 107FH,所以,f1的机器指令代码长度为0040 107FH-0040 1020H+1 = 60H = 96个字节。(1分)

(3)CF=1。(1分)cmp指令实现i与n-1的比较功能,进行的是减法运算。在执行f1(0)过程中,n=0,当i=0时, i=0000 0000H,并且n-1=FFFF FFFFH。因此,当执行第20条指令时,在补码加/减运算器中执行“0减FFFF FFFFH”的操作,即0000 0000H+0000 0000H+1=0000 0001H,此时,进位输出C=0,减法运算时的借位标志CF=C⊕1=1。(2分)

(4)f2中不能用shl指令实现power*2。(1分)

因为 shl 指令用来将一个整数的所有有效数位作为一个整体左移;而f2中的变量power是float型,其机器数中不包含最高有效数位,但包含了阶码部分,将其作为一个整体左移时并不能实现“乘2”的功能,因而f2中不能用shl指令实现power*2。(2分)浮点数运算比整型运算要复杂,耗时也较长。

答案
暂无答案

题目信息

题号:7242
题型:简答题
难度:普通