美文网首页
04.指令篇-跳转指令

04.指令篇-跳转指令

作者: 秦砖 | 来源:发表于2016-09-03 11:28 被阅读726次

在ARM中,有两种形式的跳转方式:长跳转与短跳转。两种方式在本质上都是一样的:都是通过改变PC寄存器的值来实现指令的跳转。

长跳转

长跳转通过直接向PC寄存器中写入目标值来实现在4GB的地址空间中的任意跳转。这里解释下4GB是如何算出来的:我们知道汇编指令的寄存器是32位的,也就是说PC寄存器的最大值为232次方,说的更明白一点就是232=(210)*(210)*(210)*(22)=1024*1024*1024*4=1KB*1024*1024*4=1MB*1024*4=1GB*4=4GB。

短跳转

短跳转指令可以实现向前或向后32MB的地址空间跳转。目标地址的计算方法是将指令中的24位带符号的补码立即数扩充为32位(扩充其符号位),将此32位数左移2位后与PC寄存器值相加后写入PC寄存器中。跳转指令有如下四种形式:

  • B:普通跳转指令
  • BL:带返回的跳转指令,与变通跳转指令的区别是该指令在跳转前会将当前PC寄存器的值保存到LR寄存器中
  • BX:带状态转换的跳转指令,它意味着指令跳转后,指令状态(ARM指令或Thumb指令)的切换。
  • BLX:带返回和状态切换的跳转指令。

这里要说明下Thumb指令,该指令是将ARM指令集的一个子集重新编码而形成的一个指令集,指令的长度为16位。相比与ARM指令,Thumb指令集能够得到密度更高的代码。

应用

子程序调用

BL function
...
function
...
MOV PC, LR```
### 条件执行
下面的C语言判断语句用汇编实现:

if(a==0||b==1)
func1();
else
func2();

CMP R0, 0
CMPNE R1, 1
BEQ func1
BNE func2
...
func1
...
func2
...

### 循环
跳转到循环最先开始的地方,进而来达到循环的目的。

MOV R0,100
loop
...
SUBS R0, R0, #1
BNE loop
...

相关文章

  • 04.指令篇-跳转指令

    在ARM中,有两种形式的跳转方式:长跳转与短跳转。两种方式在本质上都是一样的:都是通过改变PC寄存器的值来实现指令...

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

    ARM 汇编指令学习:[2]ARM指令集 一、跳转指令 1、 B(跳转指令)及BL(带返回跳转指令) 其中: L决...

  • Cortex-M0指令集——B

    跳转指令: (1)可条件执行的跳转指令 B 此指令在计算跳转地址时...

  • ARM汇编之跳转指令

    b跳转指令 单个标签 可以有多个同名数字标签 bl跳转指令 bl跳转指令在执行的时候,自动将当前指令下一条指令的地...

  • MIPS指令集与简要分析

    R格式指令 基本格式 指令 算数类指令 逻辑类指令 位移类指令 跳转指令 I格式指令 基本格式 指令 算数指令 逻...

  • <> 一

    1.入门指令 jz指令:跳转指令,可以理解成如果前面比较指令的比较结果相同则跳转到指定的地址;jnz指令:与jz指...

  • ARM 64 常见汇编指令

    ARM64常用的汇编指令 运算指令 程序跳转指令

  • 条件跳转指令

    条件跳转指令通常和比较指令结合使用。在条件跳转指令执行前,一般可以先用比较指令进行栈顶元素的准备,然后进行条件跳转...

  • 比较条件跳转指令

    比较条件跳转指令类似于比较指令和条件跳转指令的结合体,它将比较和跳转两个步骤二合为一。 这里指令有:if_icmp...

  • 编译器笔记34-中间代码生成-布尔表达式的回填

    回填 (Backpatching) 基本思想:生成一个跳转指令时,暂时不指定该跳转指令的目标标号。这样的指令都被放...

网友评论

      本文标题:04.指令篇-跳转指令

      本文链接:https://www.haomeiwen.com/subject/tnpkettx.html