购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.3 子程序呼叫及转移指令

Cortex-M3中,最基本的无条件转移指令有如下两条。

● B Label:转移到 Label 处对应的地址。

● BX reg:转移到由寄存器 reg 给出的地址。

在BX指令中,reg的最低位指示出在转移后,将进入的状态是ARM(LSB=0)还是Thumb (LSB=1)。而Cortex-M3只在Thumb中运行,因此就必须保证reg的LSB=1,否则出错。

在呼叫子程序时,如果需要保存返回地址,则可以使用如下指令。

● BLLabel:转移到 Label 处对应的地址,并且把转移前的下条指令地址保存到 LR。

● BLX reg:转移到由寄存器 reg 给出的地址,根据 REG 的 LSB 切换处理器状态,并且把转移前的下条指令地址保存到LR。

执行这些指令后,就把返回地址存储到LR(R14)中了,从而才能使用“BX LR”等形式返回。

使用BLX要小心,因为它还带有改变状态的功能。因此reg的LSB必须是1,以确保不会试图进入ARM状态。 PTNqUfo/VUpCijlhzmLlAY7goH6vZpjZR/rI7F9wJ9LxWg5VkLkZWvLkagcE+lws

点击中间区域
呼出菜单
上一章
目录
下一章
×