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{
<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。
<Rm>该寄存器中为跳转的目标地址。当
当
看一段简单程序的片段,不用考虑省略号的内容,看框架就可以了!
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处理了。
ARMBX指 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)