assembly - `leal (%rdi,%rdi), %eax` 有什么作用?
问题描述
#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
解决方案
推荐阅读
- c# - 将 DateTime 转换为人类可读的格式(MSFT_MpComputerStatus 类)
- android - 为什么我的应用安装后 Google Pay 停止工作?
- apache-nifi - 在 nifi 中如何获取访问令牌和客户端 ID
- qt - 如何在docker中为qt5应用程序启用中文输入法
- logging - appsettings.json 中不支持日志记录配置全局 LogLevel
- python-3.x - 我的列表理解代码中的错误在哪里?
- javascript - 为什么 Touch Ui FileUpload 呈现为按钮?
- javascript - 分配给变量时,套接字 IO 客户端延迟触发连接事件
- spring-boot - 如何在 ActiveMQ 中按特定顺序消费消息?
- java - 通过 RestTemplate POST JSON 对象导致响应 400 BAD_REQUEST