小编Mwe*_*lom的帖子

为什么参数分配在帧指针下方而不是上方?

我试图根据 godbolt.org 上 c++ 中的平方函数来理解这一点。显然,返回、参数和局部变量使用 \xe2\x80\x9crbp -alignment\xe2\x80\x9d 来实现此函数。\n有人可以解释一下这是如何实现的吗?\n在这种情况下 rbp +alignment 会做什么?

\n
int square(int num){\n    int n = 5;// just to test how locals are treated with frame pointer\n    return num * num;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编译器(x86-64 gcc 11.1)

\n

生成的程序集:

\n
square(int):\n    push rbp\n    mov rbp, rsp \n    mov DWORD PTR [rbp-20], edi. ;\\\\Both param and local var use rbp-*\n    mov DWORD PTR[rbp-4], 5.     ;//\n    mov eax, DWORD PTR [rbp-20]\n    imul eax, eax\n    pop rbp\n    ret\n\n
Run Code Online (Sandbox Code Playgroud)\n

c++ assembly x86-64 calling-convention stack-frame

2
推荐指数
1
解决办法
525
查看次数

标签 统计

assembly ×1

c++ ×1

calling-convention ×1

stack-frame ×1

x86-64 ×1