我正在摆弄 gcc 的优化选项,发现这些行:
int bla(int moo) {
return moo * 384;
}
被翻译成这些:
0: 8d 04 7f lea (%rdi,%rdi,2),%eax
3: c1 e0 07 shl $0x7,%eax
6: c3 retq
我理解移位代表乘以 2^7。第一行必须是乘以 3。
所以我完全被“lea”线弄糊涂了。lea 不应该加载地址吗?