如何在x64-Assembly中用另一个寄存器的最低有效位有效填充寄存器的最高有效位。预期用途是将128位值有效地除以2(实际上是交叉寄存器移位)。
RDX:RAX (result after MUL-Operation)
使用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
或者,使用shr
和rcr
指令,但是请注意rcr
是多次,因此在大多数CPU上速度较慢:
shr rdx, 1 ; shift LSB of rdx into cf
rcr rax, 1 ; shift CF into rax