本文主要是介绍arm调用thumb(相同文件和不同文件)并且返回 简单小例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、同一个文件下arm调用thumb并且返回:
AREA EXAMPLE,CODE,READONLY
CODE16 ;thumb 代码
ThumbSeg
MOV R0,#10
BX LR ;返回到arm状态
ENTRY ;程序入口处
CODE32
Start
MOV R0,#1
ADR R1,ThumbSeg + 1
MOV LR,PC ; 保存返回地址
BX R1 ; 切换到thumb状态
MOV R0,#20
NOP ; 空操作
END
二、两个文件下arm调用thumb并且返回:
注意此时用的是BL进行跳转,因为中间要经历一个veneers
1、arms.s文件,内容为:
AREA EXAMPLE,CODE,READONLY
IMPORT ThumbSeg ;导入thumb标号
ENTRY ;程序入口处
CODE32
Start
MOV R0,#1
BL ThumbSeg ; 切换到thumb状态,注意用的是BL,内部会经历一个veneers
MOV R0,#20
NOP ; 空操作
END
2、thumb.s文件,内容为:
AREA EXAMPLE,CODE,READONLY
EXPORT ThumbSeg; 导出标号
CODE16 ;thumb 代码
ThumbSeg
MOV R0,#10
BX LR ;返回到arm状态
END
3、如果直接这样make会用这样的错误
需要设置:
调试时会看到VENEERS:
这篇关于arm调用thumb(相同文件和不同文件)并且返回 简单小例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!