程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转:

  • 使用专门的跳转指令 B
  • 直接向程序计数器PC 写入跳转地址值
    这是几乎是任何一种CPU必备的机器,PC表示CPU当前执行语句位置,改变PC的值,相当于实现程序跳转
    如实现类似C语言的Return 语句,就是用MOV PC,LR
    这里可以在任意4G的空间进行跳转

B指令(Branch)表示无条件跳转.

   B main ;跳转到标号为main地代码处

BL指令(Branch with Link)表示带返回值的跳转.

BL比B多做一步,在跳转前,BL会把当前位置保存在R14(即LR寄存器),当跳转代码结束后,用MOV PC,LR指令跳回来,这实际上就是C语言执行函数的用法,
汇编里调子程序都用BL,执行完子函数后,可以用MOV PC,LR跳回来.

   BL delay ;执行子函数或代码段delay ,delay可以为C函数.

与MOV PC,XXX能在4G空间跳转不同,B语句只能32M空间跳转,(因为偏移量是一个有符号26bit的数值=32M)