You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86-64平台下用更少指令实现64位寄存器所有字节异或

嘿,这是个超棒的优化问题!针对x86-64平台上RAX所有字节的异或操作,我们确实能把指令数压到比你的8条更少——7条通用寄存器指令就能搞定,而且都是单周期的基础指令,效率拉满。

核心思路是利用异或的结合律和交换律,通过分治法逐步缩小异或范围:先把64位值拆成高32位和低32位异或,得到4组字节异或结果;再把这32位拆成高16位和低16位异或,得到2组字节异或结果;最后把16位拆成高8位和低8位异或,就得到所有8个字节的异或总和。

下面是具体的NASM实现:

; 输入: RAX = 待处理的64位值
; 输出: AL = 所有8个字节的异或结果(RAX的高56位会被破坏)
mov     rbx, rax        ; 1. 保存原RAX的副本到RBX
shr     rbx, 32         ; 2. 将RBX的高32位移到低32位(对应原RAX的高32位)
xor     eax, ebx        ; 3. EAX = 原RAX低32位 ^ 原RAX高32位,得到4组字节异或结果
mov     bx, ax          ; 4. 保存EAX的低16位到BX
shr     eax, 16         ; 5. 将EAX的高16位移到低16位(对应4组中的前2组)
xor     ax, bx          ; 6. AX = 低16位异或结果 ^ 高16位异或结果,得到2组字节异或结果
xor     al, ah          ; 7. AL = 低8位异或结果 ^ 高8位异或结果,最终得到所有字节的异或总和

如果需要保留原RAX的值,只需要在开头加一条push rax,结尾加一条pop rax,不过这样指令数会变成9条——但如果你不需要保留原RAX,上面的7条就是当前最优的通用寄存器方案了。

内容的提问来源于stack exchange,提问作者Henadzi Matuts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:00:39