Linux x8664汇编,x 86彙編語言:移位乘以64位答案

我想這應該這樣做:

mult:

#save all caller-saved regs

#move arg1 to %edi, arg2 to %esi

xorl %eax, %eax #\

xorl %edx, %edx #--clear a 64-bit accumulator

movl $31, %ecx #set up shift-count

.L1: movl %edi, %ebx #copy of arg1

xorl %ebp, %ebp #zero scratch-register

shll %cl, %ebx #isolate bit from arg1

sarl $31, %ebx #and turn into mask

andl %esi, %ebx #AND arg2 with bitmask

xorl $31, %ecx #invert shift-count

shldl %cl, %ebx, %ebp #shift upper bits into scratch-reg

shll %cl, %ebx #adjust lower bits

addl %ebx, %eax #\

addl %ebp, %edx #-- accumulate results

xorl $31, %ecx #restore shift-count

decl %ecx #change shift to next bit

jno .L1 #if ecx == -1, done!

#restore caller-saved regs

#done, return value in edx:eax

注意這把參數爲無符號。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值