ldmia.w sp, {r1, r2} 和 ldmia.w sp!, {r1, r2} 之间的区别?

difference between ldmia.w sp, {r1, r2} and ldmia.w sp!, {r1, r2}?

我在二进制分析项目中工作,遇到了两种不同的 ldmia arm 汇编指令变体。

ldmia.w sp, {r1, r2}

ldmia.w sp!, {r1, r2}

我知道ldmia.wsp!, {r1, r2} 是 pop {r1,r2} 的同义词。 但是 ldmia.w sp, {r1, r2} 呢? .我是使用存储在 sp 中的值作为内存地址加载到 r1 和 r2 中,这对我来说没有多大意义,还是我从堆栈中弹出而不更新 sp 的值,这也没有意义。

A​​RM汇编语言各部分的含义参见ARM体系结构参考手册。 ! 符号表示新地址被写回寄存器。 IE。 ldmia.w sp!, {r1, r2}sp 加 8,但 ldmia.w sp, {r1, r2} 保持 sp 不变。