joe 发表于 2022-10-17 23:13:36

Arm指令后缀!^

1: !的作用
ldmia r0, {r2 - r3}
ldmia r0!, {r2 - r3}
感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。
2: ^ 的作用
ldmfd sp!, {r0 - r6, pc}
ldmfd sp!, {r0 - r6, pc}^
//stmfd sp!,{r0-r6,pc}^(有没有问题????)
^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。

joe 发表于 2022-10-17 23:22:57

stm/ldm指令语法格式:
CMD{cond}Rn{!}, reglist{^}

CMD为命令有LDM*/STM*
cond为条件码(可选)
Rn    为基址寄存器
{!}   可选后缀,选用后缀后表示请求回写,即当数据传输完成后将最后的地址写入到基址寄存器Rn中,不选用则基址寄存器内容不改变
{^}该后缀表示后面的寄存器都是用户模式下的寄存器;其次当CMD为LDM且寄存器列表中包含R5(PC)时,除正常传输数据还需要将SPSR复制到CPSR



页: [1]
查看完整版本: Arm指令后缀!^