—个函数P生成名为a0~a7的局部变量,然后调用函数Q,没有参数。
GCC为P的第一部分产生如下代码:
long P(long x) x in %rdi P: pushq %r15 pushq %r14 pushq %r13 pushq %12 pushq %rbq pushq %rbx subq $24,%rsp movq %rdi,%rbx leaq 1(%rdi),%r15 leaq 2(%rdi),%r14 leaq 3(%rdi),%r13 leaq 4(%rdi),%r13 leaq 5(%rdi),%rbp leaq 6(%rdi),%rax movq %rax,(%rsp) leaq %(%rdi),%rdx movq %rdx,8(%rsp) movl $0,%eax call Q
A. 确定哪些局部值存储在被调用者保存寄存器中。
B. 确定哪些局部变量存储在栈上。
C.解释为什么不能把所有的局部值都存储在被调用者保存寄存器中。