《深入理解计算机系统》(原书第三版)家庭作业第三章(3.59)解答

本文详细分析了如何使用汇编代码计算两个64位有符号整数的128位乘积,通过解释每一步操作,展示了如何处理高位和低位的数据,以及如何舍去超出128位的部分。最终,将结果存储在内存的高低两个64位部分。
摘要由CSDN通过智能技术生成
**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)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值