ARM中的指令写回
Posted
技术标签:
【中文标题】ARM中的指令写回【英文标题】:Instruction writeback in ARM 【发布时间】:2021-02-08 18:17:11 【问题描述】:ARM 参考手册指出:
如果加载指令指定写回并且正在加载的寄存器也是基址寄存器,那么行为是 CONSTRAINEDUNPREDICTABLE
在这种情况下,“写回”一词是什么意思?
【问题讨论】:
类似于ldr r0, [r0, #4]!
的东西,索引计算的结果被写回基址寄存器。这也适用于后索引寻址模式,如ldr r0, [r0], #4
。
@fuz ldr 指令有什么作用?它未在 arm64 指令参考中列出。 developer.arm.com/documentation/100076/0100/…
@fctorial 您正在查看一般说明。在这种情况下,您应该查看the Data Transfer Instructions。
我建议从一些基本的教程内容和/或常见的编译器输出开始,以熟悉最常见的指令,然后再深入了解完整的手册;如果您对全局有所了解,细节会更有意义(例如 ldr
是什么。它是 ARM 的加载指令,因此它非常重要。)
【参考方案1】:
“ldr(立即)”指令有三种形式:
ldr x0, [x1, 8]
ldr x0, [x1, 8]!
ldr x0, [x1], 8
第一个应该很明显,是“常规”语法。 第二种称为预索引,相当于:
add x1, x1, 8
ldr x0, [x1]
而第三个称为后索引,相当于:
ldr x0, [x1]
add x1, x1, 8
手册所指的情况是这样的说明:
ldr x0, [x0, 8]!
ldr x0, [x0], 8
在这种情况下(来自the G.a version 的 K1-8255 页):
受约束的不可预测的行为 如果指令编码指定预索引寻址或后索引 寻址,并且 n == t && n != 31,则以下行为之一必须 发生: • 指令未定义。 • 该指令作为NOP 执行。 • 指令使用指定的寻址模式执行加载, 并且基址寄存器设置为 UNKNOWN 值。此外,如果一个 在这样的指令期间发生异常,基址寄存器可能是 损坏,因此指令不能重复。 • 对于在 EL0 或 EL1 上执行,当 EL2 被实现并为 当前安全状态且 HCR_EL2.TIDCP 为 1,指令被困 到 EC 值为 0x0 的 EL2。 - - - 笔记 - - - - - - 预索引寻址和后索引寻址意味着写回。 ----------------------【讨论】:
以上是关于ARM中的指令写回的主要内容,如果未能解决你的问题,请参考以下文章