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

2023-12-04 06:08

本文主要是介绍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(相同文件和不同文件)并且返回 简单小例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452419

相关文章

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相