C中嵌入汇编PLD指令:asm("PLD [%0,#128]": :"r" (psrc) );
copy自官方文档:
4.2.7. PLD、PLDW 和 PLI
预载数据和预载指令。 处理器可向内存系统发送信号,告诉内存系统在不久的将来可能要从某个地址加载数据或指令。
语法
PLtype{cond} [Rn{, #offset}]
PLtype{cond} [Rn, +/-Rm{,shift}]
PLtype{cond}label
其中:
type-
可以是下列项之一:
D-
数据地址
DW-
要写入的数据地址
I-
指令地址
如果语法指定了
label,则不能为typeDW。 cond-
是一个可选的条件代码(请参阅条件执行)。
Note
只能用在 Thumb-2 代码中,且前面要有condIT指令。 这是 ARM 中的无条件执行指令,请一定不要使用。cond Rn-
是内存地址所基于的寄存器。
offset-
是直接偏移量。 如果省略偏移量,则该地址为
中的值。Rn Rm-
是一个寄存器,包含要用作偏移量的值。
不能为 r15。 对于 Thumb 指令,Rm还不能为 r13。Rm shift-
是一个可选的移位。
label-
是一个程序相对的表达式。 有关详细信息,请参阅相对寄存器和程序相对的表达式。
偏移量范围
预载前,会先将偏移量应用到 中的值。 所得结果将用作预载的内存地址。 偏移量的允许范围为:Rn
-
–4095 到 +4095(ARM 指令)
-
–255 到 +4095(适用于
不是 r15 时的 Thumb-2 指令)。Rn -
–4095 到 +4095(适用于
为 r15 时的 Thumb-2 指令)。Rn
汇编器会计算相对 PC 的偏移量。 如果 超出范围,则汇编器会生成错误。label
寄存器或寄存器移位偏移量
在 ARM 中, 中的值既可与 Rm 中的值相加,也可从其中减去。 在 Thumb-2 中,Rn 中的值只能与 Rm 中的值相加。 所得结果将用作预载的内存地址。Rn
移位的允许范围为:
-
LSL#0 到 #3(对于 Thumb-2 指令) -
对于 ARM 指令,可为以下范围之一:
-
LSL#0 到 #31 -
LSR#1 到 #32 -
ASR#1 到 #32 -
ROR#1 到 #31 -
RRX
-
预载的地址对齐
对于预载指令,系统不执行对齐检查。
体系结构
ARM PLD 可用于 ARMv5TE 及更高版本。
32 位 Thumb PLD 可用于 ARMv6T2 及更高版本。
PLDW 只能用于实现了多重处理扩展的 ARMv7 及更高版本。
PLI 只能用于 ARMv7 及更高版本。
不存在 16 位 Thumb PLD、PLDW 或 PLI 指令。
这些是提示指令,其实现是可选的。 如果未实现,则这些指令作为 NOP 执行。
参考:http://blog.csdn.net/waverider2012/article/details/8538923