ARM 汇编指令学习:[2]ARM指令集

本文深入介绍了ARM指令集中关于跳转、数据处理和程序状态寄存器(PSR)传输的指令,包括B、BL、BLX、BX等跳转指令,以及MOV、MVN、ADD、SUB等数据处理指令,还有异常中断如SWI和BKPT的生成。此外,还提及了协处理器指令和Load/Store指令的相关内容。
摘要由CSDN通过智能技术生成

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><
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值