有效地移位寄存器

问题描述 投票:1回答:1

如何在x64-Assembly中用另一个寄存器的最低有效位有效填充寄存器的最高有效位。预期用途是将128位值有效地除以2(实际上是交叉寄存器移位)。

RDX:RAX (result after MUL-Operation)
assembly x86-64 bit-shift extended-precision
1个回答
2
投票

使用shrd指令将某一个从src移到目标位置:

shrd rax, rdx, 1   ; shift a bit from bottom of RDX into top of RAX
shr  rdx, 1        ; and then shift the high half
; rdx:rax is shifted one bit to the right

或者,使用shrrcr指令,但是请注意rcr是多次,因此在大多数CPU上速度较慢:

shr rdx, 1          ; shift LSB of rdx into cf
rcr rax, 1          ; shift CF into rax
© www.soinside.com 2019 - 2024. All rights reserved.