arm调用thumb(相同文件和不同文件)并且返回 简单小例子

来源:互联网 发布:苹果手机验钞机软件 编辑:程序博客网 时间:2024/06/05 07:21

一、同一个文件下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:


原创粉丝点击