+ -
当前位置:首页 → 问答吧 → 看不懂这些汇编代码

看不懂这些汇编代码

时间:2010-08-03

来源:互联网

  1. int main()
  2. {
  3.         int i = 0;// 加volatile
  4.         ++i;
  5.         --i;
  6.         return 0;
  7. }
复制代码
gcc 无优化选项编译

普通版本对应的汇编代码,直接操作内存:
  1. movl        $0, -4(%ebp)
  2.         addl        $1, -4(%ebp)
  3.         subl        $1, -4(%ebp)
复制代码
volatile版本对应的汇编代码,总是读到寄存器修改再回写
  1. movl        $0, -4(%ebp)
  2.         movl        -4(%ebp), %eax
  3.         addl        $1, %eax
  4.         movl        %eax, -4(%ebp)
  5.         movl        -4(%ebp), %eax
  6.         subl        $1, %eax
  7.         movl        %eax, -4(%ebp)
复制代码
和我猜的刚好相反

作者: okocha-jay   发布时间: 2010-08-03

有什么看不懂的?局部变量i是在栈中分配内存,所以movl $0,-4(%ebp)就是给i赋初值。不同编译器或者使用参数不同生成的汇编代码可能不一样的。

作者: 古兮之   发布时间: 2010-08-03

相关阅读 更多