第2-3章 ARM指令集介绍

跳转指令

  • 在ARM处理器中有两种方式可以实现程序流程的跳转:

    • 使用专门的跳转指令
    • 直接向程序计数器PC写入跳转地址值
  • 通过向程序计数器PC写入跳转地址值,可以实现在4GB地址空间中的任意跳转,这种跳转指令称为长跳转。

  • 在ARMv5版本以上的体系中,指令使用目标地址的bit[0]来确定程序的类型:

    • bit[0]为1时,目标程序为Thumb指令
    • bit[0]为0时,目标程序为ARM指令
  • ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间内的跳转

    助记符指令功能描述指令格式
    b跳转指令b {<Cond>} <target_address>
    bl带返回的跳转指令bl {<Cond>} <target_address>
    bx带返回状态的跳转指令bx {<Cond>} <Rm>
    blx带返回和状态切换的跳转指令blx <target_address>
    blx {<Cond>} <Rm>

    一旦遇到一个b指令,ARM处理器将立即跳转到给定的目标地址,并从那里继续执行。存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算。它是一个24位有符号数,左移两位后扩展为32位有符号数,表示的有效偏移为26位(前后32MB的地址空间)

    使用bl指令跳转之前,会在寄存器r14中保存当前的PC内容。可以通过将r14的内容重新加载到PC中,来返回跳转指令之后的那个指令处执行

数据处理指令

助记符指令功能描述指令格式
mov数据传送指令mov {<Cond>}{S} <Rd>, <shifter_operand>
mvn数据取反传送指令mvn {<Cond>}<S> <Rd>, <shifter_operand>

mov指令将立即数或者寄存器传送到目的寄存器

mvn指令将立即数或者寄存器按位取反后,传送到目的寄存器

比较指令

比较指令不保存运算结果,只更新CPSR中相应的条件标志位

助记符指令功能描述指令格式
cmp比较指令cmp {<Cond>} <Rn>, <shifter_operand>
cmn负数比较指令cmn {<Cond>} <Rn>, <shifter_operand>
tst位测试指令tst {<Cond>} <Rn>, <shifter_operand>
teq相等测试指令teq {<Cond>} <Rn>, <shifter_operand>

1. CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更新条件标志位。标志位表示的是操作数1与操作数2的关系
2. CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位
3. TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置来特定的位
4. TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值