STM32--汇编语⾔:⼦程呼叫与⽆条件跳转指令B、BL、BX和
BLX
1、B:⽆条件转移
B指令是最简单的跳转指令。⼀旦遇到⼀个B指令,ARM处理器将⽴即跳转到给定的⽬标地址,从那⾥继续执⾏。注意,存储在跳转指令中的实际值是相对当前PC值的⼀个偏移量,⽽不是绝对地址,它的值由汇编器来计算。
例:B Label ;程序⽆条件跳转到标号Label处执⾏
2、BL:转移并连接,⽤于呼叫⼀个⼦程序,返回地址被存储在LR中
BL指令是带连接的跳转,在跳转之前,会在寄存器R14中保存PC的当前内容,因此可以通过将R14的内容重新加载到PC中,来返回到跳转指令的那个指令处执⾏。该指令是实现⼦程序调⽤的⼀个基本但常⽤的⼿段。通常可以在⼦程序的尾部添加:MOV PC,LR返回
以下指令:
BL Label;当程序⽆条件跳转到Label处执⾏时,同时将当前的PC值保存到R14中
1. BX:带状态切换的跳转
BX指令使程序跳转到指令中指定的地址执⾏程序。
1. BLX:带连接和状态切换的跳转
BLX指令结合了BX与BL功能,BLX 指令从ARM 指令集跳转到指令中所指定的⽬标地址,并将处理器的⼯作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。因此,当⼦程序使⽤Thumb 指令集,⽽调⽤者使⽤ARM 指令集时,可以通过BLX 指令实现⼦程序的调⽤和处理器⼯作状态的切换。
⼦程序的返回可以通过将寄存器R14的值复制到PC中来完成。
最基本的⽆条件跳转指令有两条:
B Label ;跳转到 Label 处对应的地址
BX reg ;跳转到由寄存器 reg 给出的地址
呼叫⼦程序时,需要保存返回地址,正确的指令是:
BL Label ;跳转到 Label 对应的地址,并且把跳转前的下条指令地址保存到 LR
BLX reg ;跳转到由寄存器 reg 给出的地址,并根据 REG 的 LSB 切换处理器状态,
;还要把转移前的下条指令地址保存到 LR
汇编语言结束指令执⾏这些指令后,就把返回地址存储到 LR(R14)中了,从⽽才能使⽤”BX LR”等形式返回。
注:
R14:连接寄存器(LR)
R15:程序计数器(PC)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论