這是我的方法:
and rdx, 0x1
ror rdx, 1
or rax, rdx
但我認為這不是很有效。而且我不知道輪班操作是否更具成本效益。
uj5u.com熱心網友回復:
嘗試
add rax,rax
shld rdx, rax, 63
首先去掉 rax 的 msb,然后串聯的序列只包含 rdx 的 lsb 和 rax 的 63 位,它們要左移到rdx.
或者
add rax, rax
shrd rax, rdx, 1
(此答案假定問題中的解釋是正確的,而代碼是錯誤的——因為使用該代碼無法在設定的位上“復制”一個已清除的位。)
uj5u.com熱心網友回復:
如果 rdx 可以被破壞,那么你不需要像那樣屏蔽它,因為左移無論如何都會清除剩余的位
shl rdx, 63
or rax, rdx
正如Jester 所說,這假設 rax 的 MSB 已清除
uj5u.com熱心網友回復:
Rotate 在現代處理器上與 shift 一樣快,但在較舊的處理器上,它可能會很慢,因此如果可以解決問題,最好使用 shift。
如果你可以破壞rdx,我很確定以下指令序列是任何 x86_64 處理器上最快的。
shl rdx, 63
or rax, rdx
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/468262.html
