【发布时间】:2019-10-03 04:37:07
【问题描述】:
我想知道是否有办法将存储在内存中的单词数组加载到寄存器数组中。
我知道 ldm 可用于一次加载多个寄存器,但我的理解是您需要为它提供一个已经保存第一个元素的寄存器。
是否有一些伪指令可以提供帮助?类似 ldm =array, {r0,r1,r2} (仿照实际的伪指令 ldr)。
提前致谢!
【问题讨论】:
-
在最近的 ARM 上,
ldp加载了一对寄存器。不确定ldm是否可以使用附近的 PC 相对寻址模式。如果数据距离较远,则无论如何都需要寄存器中的标签地址。您可以只使用要加载的最后一个寄存器作为地址的暂存寄存器。 -
@PeterCordes 我认为
ldm会将源加载到内部加载/存储管道寄存器中,因此可以在目标列表中加载来破坏它。问题在于回写。从内存中加载寄存器 AND 写回结束值有点无意义。但是OP不想要这个。如果某处的某些 ARM 不支持ldm rN, {...,rN},我不会感到惊讶,但它应该可以工作。 -
@artlessnoise:是的,我正在想象使用
ldm没有写回来覆盖地址寄存器。如果可能的话。 (而且由于我在第一条评论中提到了这种可能性,因此 PC 相对ldm是不可能的。指令使用指令字中的空间来加载要加载的寄存器的位图,而不是位移。感谢您的提醒ldm 需要寄存器中的指针,而不是普通的 addr 模式。)