跳转到主内容
思享编程网:思考分享,玩转编程世界!

BX、BLX、BL和BX的区别与用法详解?

文章导读

大家好,我是陆砚码。今天我们来聊聊ARM架构中的一些指令,比如BX、BLX、BL和BX,这些指令在函数跳转和中断处理中扮演着重要的角色。通过这篇文章,我们将一起理解这些指令的用法和区别,让你对ARM的汇编语言有更深的认识。

BX、BLX、BL和BX指令详解

B、BX、BL、BXL这几个指令都是用于控制程序跳转的,但它们之间有一些细微的差别。

B       Label    ;跳转到Label处对应的地址
BL      Label    ;跳转到Label对应的地址,并且把跳转前的下条指令地址保存到LR  
BX      reg     ;跳转到由寄存器reg给出的地址
BLX     reg     ;跳转到由寄存器reg给出的地址,并根据REG的LSB切换处理器状态还要把转移前的下条指令地址保存到LR.

BX LR和BLX LR启动中断返回序列

BX LR和BLX LR都会启动中断返回序列。即从SP中依次将值返回至xPSR, PC, LR, R12以及R3-R0。其中从堆栈SP中返回PC值实现了程序跳转。

B和BL的用法

B和BL多用于函数跳转,其中BL会保存下一条指令地址到LR。在C语言编写的函数中,编译器会这样翻译:

BL fun;

函数跳转与中断数据保护的不同

对于函数跳转,数据的保护由编译器决定。如果函数中用到了除R0-R3之外的一般寄存器,编译器会在函数开始时将这些寄存器推入堆栈,并在函数结束时将这些寄存器从堆栈中弹出。对于中断,数据保护只限R0-R3、R12、PC、LR、PSR几个寄存器,这为中断发生时自动入栈提供了便利。

小结与拓展

好了,今天我们就聊到这里。BX、BLX、BL和BX这些指令在ARM汇编中非常重要,掌握它们对于理解ARM程序的工作原理非常有帮助。如果你对ARM架构或者汇编语言还有其他疑问,欢迎关注思享编程网(www.sxgpb.com),了解更多编程知识。我是陆砚码,我们下期再见!

相关文章