ARM 汇编指令学习:[2]ARM指令集
一、跳转指令
1、 B(跳转指令)及BL(带返回跳转指令)
B{L}{
<cond>} <target_address>
其中:
L 决定是否保存当前PC寄存器地址到LR寄存器中。
<target_address> 为指令跳转的目标地址。这个地址的计算方法是:将指令中的24位带符号的补码立即数扩展为32位(扩展其符号位);将此32位数左移两位;将得到的值加到PC寄存器中,即得到跳转的目标地址。由这种计算方法可知跳转的范围大致为-32MB~+32MB。
2、 第一种BLX(带返回和状态切换的跳转指令)
BLX <target_address>
其中,<target_address>的用法与B及BL指令中的用法相同。
3、 第二种BLX(带返回和状态切换的跳转指令)
BLX{
<cond>} <Rm>
其中:
<Rm> 该寄存器中为跳转的目标地址。当<Rm>寄存器的bit[0]值为0时,目标地址处的指令为ARM指令;当<Rm>寄存器的bit[0]值为1时,目标地址处的指令为Thumb指令。当<Rm>寄存器为R15(PC)时,会产生不可预知的结果(跑飞)。
4、 BX(带状态切换的跳转指令)
BX{
<cond>} <Rm>
其中,<Rm>的用法与BLX指令中的用法相同。
二、数据处理指令
1、 MOV 数据传送指令
MOV{
<cond>}{S} <Rd>, <shifter_operand>
MOV指令将<shifter_operand>表示的数据传送到目标寄存器<Rd>中,并根据操作的结果更新CPSR中相应的条件标志位。
2、 MVN 数据求反传送指令
MVN{
<cond>}{S} <Rd>, <shifter_operand>
MVN指令将<shifter_operand>表示的数据的反码传送到目标寄存器<Rd>中,并根据操作的结果更新CPSR中相应的条件标志位。
3、 CMP 比较指令
CMP{
<cond>} <Rn>, <shifter_operand>
CMP指令从寄存器<Rn>中减去<shifter_operand>表示的数据,并根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。
4、 CMN 基于相反数的比较指令
CMN{
<cond>} <Rn>, <shifter_operand>
CMN指令从寄存器<Rn>中加上<shifter_operand>表示的数据,并根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。
5、 TST 位测试指令
TST{
<cond>} <Rn>, <shifter_operand>
TST指令将<shifter_operand>表示的数据与寄存器<Rn>的值按位作逻辑与操作,并根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。
6、 TEQ 相等测试指令
TEQ{
<cond>} <Rn>, <shifter_operand>
TEQ指令将<shifter_operand>表示的数据与寄存器<Rn>的值按位作逻辑异或操作,并根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行。
7、 ADD 加法指令
ADD{
<cond>}{S} <Rd>, <Rn>, <shifter_operand><