上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
5.3 子程序呼叫及转移指令
Cortex-M3中,最基本的无条件转移指令有如下两条。
· B Label:转移到Label处对应的地址。
· BX reg:转移到由寄存器reg给出的地址。
在BX指令中,reg的最低位指示出在转移后,将进入的状态是ARM(LSB=0)还是Thumb(LSB=1)。而Cortex-M3只在Thumb中运行,因此就必须保证reg的LSB=1,否则出错。
在呼叫子程序时,如果需要保存返回地址,则可以使用如下指令。
· BL Label:转移到Label处对应的地址,并且把转移前的下条指令地址保存到LR。
· BLX reg:转移到由寄存器reg给出的地址,根据REG的LSB切换处理器状态,并且把转移前的下条指令地址保存到LR。
执行这些指令后,就把返回地址存储到LR(R14)中了,从而才能使用“BX LR”等形式返回。
使用BLX要小心,因为它还带有改变状态的功能。因此reg的LSB必须是1,以确保不会试图进入ARM状态。