我编译了以下程序:
#include <stdint.h>
uint64_t usquare(uint32_t x) {
return (uint64_t)x * (uint64_t)x;
}
Run Code Online (Sandbox Code Playgroud)
这拆解为:
0: 89 f8 mov eax,edi
2: 48 0f af c0 imul rax,rax
6: c3 ret
Run Code Online (Sandbox Code Playgroud)
但是imul用于乘以有符号数字的指令.那为什么用gcc呢?
/ edit:使用uint64_t程序集时类似:
0: 48 0f af ff imul rdi,rdi
4: 48 89 f8 mov rax,rdi
7: c3 ret
Run Code Online (Sandbox Code Playgroud)