gpt4 book ai didi

assembly - 如何在 ARM7 汇编程序中有效地右移 64 位值?

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

ARM7 命令集提供了在汇编程序中将 32 位值右循环任意数量的有效方法。对于操作的第二个操作数,通过将 ror #n 指定为移位操作数,它甚至是“免费”的,但是对于 64 位整数,指令集没有给出直接支持。除了旋转 1、31、33 或 63 位位置(更不用说 0 或 32)的特殊情况外,我只知道如何使用 4 指令旋转 64 位值(这很容易,所以我不在这里写)。在四种特殊情况下,我可以将其减少为三个指令,但我不知道一般情况下该怎么做。所以这是我的问题:

给定两个寄存器中的 64 位值,比如 R0 和 R1,是否可以将这个值右旋 n 个位置(对于任意 n) 三个 ARM7 指令?

最佳答案

如果一个寄存器(例如 r4)碰巧持有适当的魔术常数(1 向左移动所需的左循环量)我认为可以用两条指令来完成:

  umull r3,r2,r1,r4  umlal r2,r3,r0,r4

比使用四条单周期指令慢,但即使必须用适当的常量加载 r4,它仍然比四条指令方法更紧凑。

关于assembly - 如何在 ARM7 汇编程序中有效地右移 64 位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379218/

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