**3.59 下面代码计算两个64位有符号值x和y的128位乘积,并将结果存储在内存中;
typedef __int128 int128_t;
void store_prod(int128_t *dest, int64_t x, int64_t y {
*dest = x *(int128_t)y;
}
解析:
y in %rdx , x in %rsi
汇编代码:
store_prod:
movq %rdx, %rax (y-->%rax)(设为b0)
cqto (将%rax符号拓展位八字,拓展的y的高位数据保存在%rdx里,此值为y的高位:b1)
movq %rsi, %rcx (x-->%rcx )(设为a0)
sarq $63, %rcx (拓展x的符号位为64位,并保存到%rcx,此值为x的高位:a1)
imulq %rax, %rcx (k1 = b0*a1)