我需要用C编写什么才能让汇编程序用一个操作数显示imul
?例如:
imul %ebp
答案 0 :(得分:3)
如果要编写C以便编译器使用一个操作数发出imul
,那么唯一的方法是将有符号乘法扩展为寄存器长度的两倍。
因为non-widening multiplication in 2's complement is the same for both signed and unsigned types所以编译器几乎总是将imul
与多个操作数一起使用,因为它更快,更灵活。
long long multiply(int x, int y) {
return (long long)x * y;
}
在x86_64中,gcc更喜欢使用双操作数imul
来产生64位结果,即使输入只有32位开始。 gcc does support an __int128_t
,但是。
__int128_t multiply(long long x, long long y) {
return (__int128_t)x * y;
}
mov rax, rdi
imul rsi
ret
的Asm输出