gpt4 book ai didi

assembly - 用更少的指令对 64 位寄存器中的所有字节进行异或

转载 作者:行者123 更新时间:2023-12-02 09:13:13 25 4
gpt4 key购买 nike

假设在某些 x86-64 平台上,我们在某个 64 位寄存器中存储了一些 64 位值(让它为RAX)。挑战是在更少的指令调用中对初始值的所有字节进行异或(结果存储在哪里并不重要)。这是我的 8 条指令解决方案(在 NASM 中):

mov    rbx, rax
bswap rbx
xor eax, ebx
mov ebx, eax
bswap ebx
xor ax, bx
mov bx, ax
xor al, bh

我在ASM编程方面不是很有经验,所以也许你们在指令量方面有更好的解决方案。谢谢!

最佳答案

这个怎么样?

        movq xmm0,rax
pclmullqlqdq xmm0,[mask]
pextrb eax,xmm0,7


mask dq 0101010101010101h, 0

这使用无进位乘法 pclmullqlqdq在一条指令中完成所有异或操作。最后一条指令提取累加结果并将其存储到al中。

关于assembly - 用更少的指令对 64 位寄存器中的所有字节进行异或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com