小编Joh*_*ith的帖子

了解C函数调用生成的程序集

        .file   "calc.c"
        .text
.globl calc
        .type   calc, @function
calc:
        pushl   %ebp     
        movl    %esp, %ebp 
        movl    8(%ebp), %edx
        movl    16(%ebp), %ecx  
        leal    (%edx,%edx,2), %edx 
        movl    12(%ebp), %eax 
        leal    (%edx,%eax,2), %eax
        movl    %ecx, %edx
        sall    $4, %edx
        subl    %ecx, %edx
        addl    %edx, %eax
        popl    %ebp
        ret
        .size   calc, .-calc
        .ident  "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
        .section        .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)

我试图了解这个汇编代码发生了什么.我通过键入gcc -O1 -S calc.c生成一个calc.s程序集文件来创建它.

有人可以calc.c逐行解释(就增加和增加而言)正在发生的事情吗?

原始的C代码是:

int calc(int x, int y, int z)
{
        return 3*x + 2*y + 15*z; …
Run Code Online (Sandbox Code Playgroud)

c assembly

5
推荐指数
1
解决办法
304
查看次数

标签 统计

assembly ×1

c ×1