gpt4 book ai didi

assembly - 将 EAX 复制到 RAX 更高位?

转载 作者:行者123 更新时间:2023-12-04 22:03:06 25 4
gpt4 key购买 nike

我想知道是否有任何指令序列而不使用任何其他寄存器来将 RAX 的低 32 位复制到其高 32 位。当然,我也希望 EAX 完好无损。
最好也不使用任何堆栈内存。

最佳答案

我的尝试...在演示派对上进行的音乐创作让我头疼(或者更有可能来自这里的旅行),所以我放弃了 imul rax,rax,imm32曾经复制 31 位并尝试将 1 位保存为符号,然后修补中间结果,因为结果证明有几个我没有预见到的问题。

所以我改为选择退出,只复制 2x 16 位单词,然后以 Jester 的方式重新洗牌(我发誓,当他发布答案时,我即将发布 xchg al,ah 的想法)。

    ; rax =                           00001234 (bytes, not hexa digits)
ror rax, 16 ; 34000012
imul rax, rax, 0x00010001 ; 34001212
shr rax, 16 ; 00340012
imul rax, rax, 0x00010001 ; 34341212
ror rax, 24 ; 21234341
xchg al, ah ; 21234314
ror rax, 8 ; 42123431
xchg al, ah ; 42123413
rol rax, 16 ; 12341342
xchg al, ah ; 12341324
ror rax, 8 ; 41234132
xchg al, ah ; 41234123
rol rax, 8 ; 12341234

更短的(指令计数)变体(有趣的是,从第 5 个指令开始使用 rol ...,8 指令):
    ; eax =                           00001234 (bytes, not hexa digits)
ror rax, 8 ; 40000123
imul rax, rax, 0x01000001 ; 40123123
rol rax, 16 ; 12312340
mov al, ah ; 12312344
rol rax, 8 ; 23123441
rol ax, 8 ; 23123414
rol rax, 8 ; 31234142
rol ax, 8 ; 31234124
rol rax, 8 ; 12341243
rol ax, 8 ; 12341234

关于assembly - 将 EAX 复制到 RAX 更高位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48587643/

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