"stmdb r3!,{sp,lr}“是否等同于序列?
和
"ldmia r0!,{sp,lr}“是否等同于序列?
发布于 2015-03-30 22:26:55
我误解了stmdb的功能。"stmdb r3!,{sp,lr}“的等效值将是替换顺序"lr”,后面是"sp":
谢谢你,维杰
发布于 2015-03-31 09:39:35
stmdb r3!,{sp,lr}
r3,#-4!
r3,#-4!
stmdb r3!,{sp,lr} -在每次传输之前存储多个寄存器和取消地址。r3 -基本寄存器和!-将开始r3地址+ offcet写回r3 .DB -由于4种堆栈类型(全降堆栈、满升堆栈、空降序堆栈、空升空堆栈)。对于STM,DB对应于完全降序堆栈。因此sp -堆栈指针和lr -链接寄存器存储到内存中,内存由r3和r3 += sizeof(sp) + sizeof(ls)寻址。r3 += 8;
r3,#-4!(预索引变量)-将sp存储到r3-4内存地址并保存r3-=4;
str lr,r3,#-4!-将lr存储在(r3-4)-4中,保存r3-=4;
因此stmdb r3!,{sp,lr} -进入较高地址lr的位置。(str sp,r3,#-4!) + (str lr,r3,#-4!)重新定位到更高的地址。
介绍ARM汇编语言
r0!,{sp,lr} -加载多个增量之后。
从r0指向的内存中获取值,并将其保存到sp中。从内存中获取下一个值并保存到lr中。r0 += 8;
ldr sp,r0,#4 -从内存r0+4加载值到sp。(r0,#4) -后索引变量第一次加载,然后编辑r0,r0+=4.
ldr lr,r0,#4 -从内存r0+4加载值到lr.
将较高内存中的两个变体值复制到lr中。
https://stackoverflow.com/questions/29357115
复制相似问题