garyv 发表于 2011-05-30 11:22

奇怪的汇编问题

在一个.S文件中定义了一个函数int func(int a, int b),功能是返回(a + b)func:
        //push %ecx
        push %ebp
        movl %esp, %ebp
        subl $16, %esp
       
        movl 8(%ebp), %eax
        addl 12(%ebp), %eax
               
        movl %ebp, %esp
        pop %ebp
        //pop %ecx
        ret如果用上代码,一切正常,如果将上述代码里面的push %ecx和pop %ecx用上,函数func的返回值就错了,不知为啥不能保存%ecx?

qtdszws 发表于 2011-05-31 10:33

因为你改变了正常的栈帧结构

      movl 8(%ebp), %eax
      addl 12(%ebp), %eax

这里的值要相应地加4

garyv 发表于 2011-05-31 13:53

回复 2# qtdszws


    所言极是
页: [1]
查看完整版本: 奇怪的汇编问题