程序流程的跳转,在 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)