【发布时间】:2021-01-31 05:59:57
【问题描述】:
我正在尝试在 32 位 ARM7TDMI-S 微处理器上加载 64 位数字,但是我不知道如何执行此操作。我知道 MOV 和 LDR 都只存储 32 位数字,所以有什么办法可以将 2 个 32 位寄存器用作一个 64 位寄存器?
【问题讨论】:
-
我的意思是,您将一半加载到一个寄存器中,将另一半加载到另一个寄存器中。您不能“使用”两个 32 位寄存器作为单个 64 位寄存器,但无论您实际上想要对数字做什么,都会有办法做到这一点。你想做什么?
-
LDM 可以一次加载两个寄存器,但是没有 ALU 指令可以对一对整数寄存器进行加法运算,因此您通常必须
add/adc。查看简单的int64_t函数的编译器输出 (godbolt.org) 如果您有 NEON,您当然可以将 64 位加载到诸如d0之类的寄存器中。我不知道 NEON 是否对 64 位元素的移位/添加/任何内容有很多支持,但您至少可以 AND 或其他不关心元素宽度的按位布尔运算。 -
@NateEldredge 我只想加载 2 个 64 位数字并添加它们。所以正如你所说,我应该编写我的汇编代码,这样当我添加 2 个数字时,它会反映在两个 32 位寄存器上,或者是否有任何指令可以做到这一点。
-
@PeterCordes 问题是我已指示使用 MOV 加载寄存器