微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM的BX指令

ARM的BX指令

时间:11-10 来源:互联网 点击:
bx的语法格式
BX{} <Rm>
<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。
<Rm>该寄存器中为跳转的目标地址。当寄存器的bit[0]为0时,目标地址处的指令为ARM指令;
寄存器的bit[0]为1时,目标地址处的指令为Thumb指令。

看一段简单程序的片段,不用考虑省略号的内容,看框架就可以了!

EXPORT LEDTEST
AREA testasm,CODE,READONLY
CODE32
LEDTEST
。。。。。。。。。。
。。。。。。。。。
。。。。。。。。
。。。。。。。。。
。。。。。。。。。。。
ledon
...............
...............
。。。。。。。。。。。。
。。。。。。。。。。。
adr r4,delay1+1
bx r4

ledoff
..............
...............
.............
.............
.............
..............

AREA testasm,CODE,READONLY
CODE16
delay1
............
...........
.............
ldr r1,=ledoff
bx r1
........
.............
.............
END

关于delay1+1:
ARM指令是字对齐(指令的地址后两位为[1:0]=0b00),Thumb是半字对齐(指令的地址后两位为[1:0]=0bx0,x为0或1)。指令的地址的最后一位必为0。
因此bx(不管往ARM还是往Thumb跳转)的跳转指令必须保证指令地址的最后一位为0,上例中bx指令能自
动地将目标地址值置为r4的值和0xFFFFFFFE的与后的结果,就会使指令地址的最后一位必为0了。
那么delay+1的这个1不就被0与掉了么,就没有什么作用了?其实,在执行bx指令时,它是首先判
断指令地址的后一位为0或1(这样就知道要跳转的地方是ARM还是Thumb指令。0跳转arm,1跳转thumb。),然后再PC=r4 AND 0xFFFFFFFE。这样,当我们需要要跳转到Thumb指令处执行时,必须将指令地址的最后以为置1。

而bx再跳转到ARM指令时就无需考虑这些了,就不用像上面的+1处理了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top