题1

题目

【2017 统考真题】在按字节编址的计算机 M 上, f1 的部分源程序 (阴影部分) 如下。将 f1 中的

int f1(unsigned n){
    int sum = 1; power = 1;
    for(unsigned i = 0; i <= n - 1; i++){
        power *= 2;
        sum += power;
    }
    return sum;
}

对应的机器级代码 (包括指令的虚拟地址) 如下:

其中, 机器级代码行包括行号、虚拟地址、机器指令和汇编指令。

  1. 计算机 M 是 RISC 还是 CISC? 为什么?
  2. f1 的机器指令代码共占多少字节?要求给出计算过程。
  3. 第 20 条指令 cmp 通过 in - 1 实现对 in - 1 的比较。执行 f1(0) 的过程中,当 i = 0 时,cmp 指令执行后, 进位/借位标志 CF 的内容是什么?要求给出计算过程。
  4. 第 23 条指令 sh1 通过左移操作实现了 power*2 运算, 在 f2 中能否用 sh1 指令实现 power*2? 为什么?

分析

题44

  1. CISC 的指令长短不一,不符合 RISC 指令系统的特点。
  2. 的机器代码占 。因为 的第一条指令 “push ebp” 所在的虚拟地址为 ,最后一条指令 “ret” 所在的虚拟地址为 ,所以 的机器指令代码长度为
  3. 。cmp 指令实现 的比较功能,进行的是减法运算。在执行 的过程中,,当 时,,并且 H。因此,执行第 20 条指令时,在补码加/减运算器中执行 “0 减 FFFFFFFF” 操作,即 ,此时进位输出 ,低位进位
  4. 中不能用 shl 指令实现 power * 2。因为 shl 指令把一个整数的所有有效数位整体左移,而 中的变量 power 是 float 型,其机器数中不包含最高有效数位,但包含了阶码部分,将其作为一个整体左移时并不能实现 “乘以 2” 的功能,因此 中不能用 shl 指令实现 power * 2。浮点数运算比整型运算要复杂,耗时也较长。