美文网首页
深入了解计算机系统(CSAPP)练习题3.16

深入了解计算机系统(CSAPP)练习题3.16

作者: 1nfinity | 来源:发表于2017-10-20 10:56 被阅读0次
    • exercise 3.16
      已知下列C代码
      void cond(long a, long *p) {
          if (p && a > *p) 
              *p = a;
      }
      
      GCC会产生下面的汇编代码
      cond:
          testq   %rsi, %rsi
          je      .L1
          cmpq    %rdi, (%rsi)
          jge     .L1
          movq    %rdi, (%rsi)
      .L1
          rep; ret
      
      • 疑惑: if (p && a > *p)为何会在汇编语言中产生cmpq %rdi, (%rsi)? p && a在汇编中为何没有反映出来
      • 解答: 运算符的优先级在书中没有讲到, >的优先级大于&&的优先级, 因此上面的代码片段应理解为: if (p && (a > *p)), 其中a > *pcmpq %rdi, (%rsi)中反映出来. 而p && ()在汇编中等价于testq %rsi, %rsi je .L1 ..., 即当p不为空且a > *p不为零时, 执行cmpq %rdi, (%rsi)否则结束程序

    相关文章

      网友评论

          本文标题:深入了解计算机系统(CSAPP)练习题3.16

          本文链接:https://www.haomeiwen.com/subject/isoduxtx.html