首页 > 试题广场 >

—个函数P生成名为a0~a7的局部变量,然后调用函数Q,没有

[问答题]

—个函数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.解释为什么不能把所有的局部值都存储在被调用者保存寄存器中。


这道题你会答吗?花几分钟告诉大家答案吧!