标签:
S后缀:
在指令后面加上S后缀后,指令运行后的结果会改变CPSR中条件标志位的值。某些指令不加S后缀也会无条件改变CPSR中的条件标志位,如CMP、TST等指令。其他的指令不加S后缀的话,其指令运行的结果是不会改变CPSR中条件标志位。
!后缀:
使用!后缀后,那么基址寄存器的值在操作完成后将会改变(后索引寻址方式除外,因为后索引寻址的基址寄存器不需要加!后缀也会改变)。注意!后缀只能跟在表示地址的寄存器后面
比如:
LDR R0, [R4, #05]! 这样在R0<--(R4+05)后,便会更新R4的值R4=R4+05。
LDMIA R0!, {R1-R6} 这样在将数据加载到R1-R6后,基址寄存器R0的值将会更新。
^后缀:
此标志不能在用户模式或者系统模式中使用,使用^后缀可分为以下两种情况:
1、在LDM操作中,如果寄存器列表中含有R15(PC),那么该标志说明需要将当前模式的spsr寄存器的内容复制给cpsr。如ldmfd sp,{r0-r3, PC}^
2、如果寄存器列表中没有R15,则说明此时操作的寄存器属于用户模式下的寄存器而不是当前模式下的寄存器组。
B后缀 / H后缀:
使用B后缀,让指令操作的是一个字节,而不是一个字,用于LDR/STR指令中。
使用H后缀,让指令操作的是一个半字(16位),而不是一个字,用于LDR/STR指令中。
条件后缀:
条件后缀是用来控制条件是否执行的后缀,共有16种后缀。根据条件标志位来决定是否执行指令,和S后缀不一样,S后缀的作用是改变条件标志为,而条件后缀是控制指令是否执行。
ARM指令集(一)
标签:
原文地址:http://www.cnblogs.com/frank-yxs/p/5926192.html