#include <stdio.h>
int f(int x) {
return x * FACTOR;
}
int main() {
int x=1;
printf("%d\n", f(x));
return 0;
}
对于上述程序,如果我使用clang -g -S -DFACTOR=2
进行编译。我得到以下输出。
似乎以下两条指令与乘法x * 2
有关。但是我不明白他们如何计算乘法。有人可以帮忙解释一下吗?谢谢。
leal (%rdi,%rdi), %eax
...
movl $2, %esi
...
Ltmp0:
##DEBUG_VALUE: f:x <- $edi
.loc 1 6 11 prologue_end ## main.c:6:11
leal (%rdi,%rdi), %eax
.loc 1 6 2 is_stmt 0 ## main.c:6:2
popq %rbp
retq
...
Ltmp2:
##DEBUG_VALUE: main:x <- 1
.loc 1 10 2 prologue_end ## main.c:10:2
leaq L_.str(%rip), %rdi
movl $2, %esi
xorl %eax, %eax
callq _printf
.loc 1 11 2 ## main.c:11:2
xorl %eax, %eax
popq %rbp
retq