您的位置:首页 > 其它

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

2012-11-15 14:43 260 查看
一、同一个文件下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:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐