首页 > 试题广场 >

long dw_loop(long x){ l...

[问答题]
long dw_loop(long x){
    long y=x*x;
    long *p=&x;
    long n=2*x;
    do{
        x +=y;
        (*p)++;
        n--;
    }while(n>0)
    return x;
}
GCC产生的汇编代码如下:
    long dw_loop(long x)
    x initially  in %rdi
dw_loop:
   movq     %rdi, %rax
   movq     %rdi, %rcx
   imulq     %rdi, %rcx
   leaq      (%rdi,%rdi),%rdi
.L2:
   leaq      1(%rcx,%rax), %rax
   subq     $1, %rdx
   testq     %rdx, %rdx
   jg          .L2
   rep;ret

A. 哪些寄存器用来存放程序值x、y和n?

B. 编译器如何消除对指针变量p和表达式(*p)++隐含的指针间接引用的需求?

C.对汇编代码添加一些注释,描述程序的操作,类似于图3-19c中所示的那样。


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