2

对于这个简单的 C 程序,

int test(int a,int b)
{
    int k=89;
    return a+b;
}
int main()
{
    test(5,3);
}

gcc 10 生成以下汇编代码(使用https://godbolt.org/并在我的机器上验证):

test:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-20], edi
        mov     DWORD PTR [rbp-24], esi
        mov     DWORD PTR [rbp-4], 89
        mov     edx, DWORD PTR [rbp-20]
        mov     eax, DWORD PTR [rbp-24]
        add     eax, edx
        pop     rbp
        ret
main:
        push    rbp
        mov     rbp, rsp
        mov     esi, 3
        mov     edi, 5
        call    test
        mov     eax, 0
        pop     rbp
        ret

如您所见,gcc 正在使用堆栈区域而不递减堆栈指针。这是正常的吗?gcc 不应该在使用堆栈区域之前减少 esp 吗?

4

0 回答 0