ARM与Thumb指令集的深入解析与应用
1. ARM与Thumb状态切换
在ARM开发中,要在ARM和Thumb状态之间进行切换,可分别使用GCC指令 .arm 和 .thumb 。这两个指令取代了以往常见的 .code32 和 .code16 ,虽然旧版本指令在当前树莓派的GCC版本中仍可使用,但已逐渐被淘汰。
当使用这些指令时,必要情况下会自动插入填充字节,对于ARM状态最多插入3个字节以对齐到下一个字边界,对于Thumb状态最多插入1个字节以对齐到下一个半字边界,因此无需再使用 .align 指令。
下面是一个简单的示例,展示如何调用Thumb状态并运行Thumb代码:
@ Use of Thumb code on Raspberry Pi
@ This divide routine is R0/R1
@ with R2=MOD and R3=DIV
.global main
.func main
.arm
main:
ADR R0, thumbcode+1
MOV LR, PC
BX R0
exit:
MOV R0, #0
MOV R7, #1
SWI 0
@ All Thumb code to be placed here
.thumb
thumbcode:
MOV R3, #0
loop:
ADD R3, #1
SUB R0, R1
BGE loop
SUB R3, #1
ADD R2, R0, R1
BX LR
超级会员免费看
订阅专栏 解锁全文
88

被折叠的 条评论
为什么被折叠?



