ARM学习(十八)jinkozone调试问题总结

news2025/1/16 21:05:24

笔者来聊聊ARM的函数的调用规则

1、ARM函数调用规则介绍首先介绍几个术语,+ AAPCS:Procedure Call Standard for the ARM Architecture+ APCS:ARM Procedure Call Standard+ TPCS:Thumb Procedure Call Standard+ ATPCS:ARM-Thumb Procedure Call Standard+ ABI:Application Binary Interface+ EABI:Embedded Application Binary Interface前三个基本就是ARM 架构的程序调用标准(包括ARM指令以及thumb指令),最后两个是程序二进制接口,描述是汇编下面寄存器名使用、函数调用、压栈、参数传递以及程序返回等一系列接口标准。比如x86与arm架构的ABI 就不兼容,寄存器都不一样,肯定就是无法互相使用,包括最近比较火热的RISC-V架构。## 2、ARM32/64 函数调用规则ARM架构下面分为32位以及64位的程序,其标准有些不同以及扩展,可分开来讲。### 2.1、ARM + 机器寄存器对于ARM以及thumb指令集来说,总有16个寄存器使用,不管大小写,在汇编语言里面都是可以识别的,一般来说大写的有特殊用途,详情见下文。 + R0-R3 作为函数参数传递以及返回值使用,也可以在程序中保存立即数。 + R12 (IP)链接器使用的暂存器 + R9 平台寄存器,ARM不推荐使用,避免平台依赖 + R4-R8,R10,R11 暂存器 + R11 作为栈指针,指向程序调用中开辟空间的栈底,可用来栈回溯,具体可以参考ARMARM学习(1) 寄存器的理解 ===》FP、SP、LR寄存器。 + R13 SP 栈指针 + R14 LR 链接寄存器 + R15 PC 程序计数器 + CPSR 状态寄存器 详情介绍见ARM学习(2) 寄存器的理解 ===》通用寄存器及状态寄存器。 + cp15 协处理 监控通用寄存器的使用在这里插入图片描述 + 程序处理、内存以及栈 一个程序的内存通常会划分为几部分:Code、read-only static data、writeable static data、heap and stack,Code段里面会包括read-only static data,DATA段会包括初始化好的全局变量,BSS包括堆栈以及未初始化和初始化为0的全局变量 + stack 临时存储变量以及传递额外的参数(程序调用时寄存器数量不足), + 栈有范围限制,Limit < SP < Base + 其次必须4 byte对齐, + 程序必须访问栈的部分范围内区域(SP ,base-1),不能访问之外的区域,在这里插入图片描述 + 子程序调用 - BL指令会跳到目标程序,并且修改LR为当前PC的按顺序下一条指令地址,指的是没跳转之前的PC的下一条。 - 需要注意修改LR最低位表示当前为什么状态,,0:是arm状态,无需修改(因为地址都是word 2Byte对齐的),1:是thumb状态,需要修改,在这里插入图片描述可以看到R14以及PC的值都是奇数,代表是thumb指令。在这里插入图片描述在这里插入图片描述R15(PC):0x0801247E 位于 DMA_GetFlagStatus,R14:0x08014ECB 位于 UART1_SentMsgL,保存了其返回的地址。 - 返回值 + R0:返回值是D-Word(32 bit),或者是单精度浮点型float, + R0-R1:返回值是Q-Word(64 bit),或者双精度浮点型double + R0-R3:返回值是128bit的向量在这里插入图片描述调用GetSysTime之后,r0则获取到值,然后r1计算好之后,则cmp进行比较r0,r1. - 参数传递 + R0-R3 和栈进行传递 + 参数少的函数,只用寄存器就可以了,减少访问内存带来的负载 + 优先寄存器,然后栈,寄存器从小到大,栈地址从小到大。 1、函数声明:void OLED_DrawBMP_test(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[],unsigned char state1,unsigned char state2); 2、共用7个参数:x0,y0,x1,y1,BMP[],state1,state2 3、前四个参数都分别存储在r0-r3, 4、后面三个参数存储在栈中,strd r7,r6,[r13] 以及str r6,[r13,#0x8] ,前面指令存储r7 r6 两个参数,后面地址偏移8之后,又存储一个参数,总计三个参数,存储顺序依次都是参数从左向右去存储。 5、不符合__cdecl、__stdcall、__fastcall这三种调用标准。 在这里插入图片描述 - 内部联合工作(ARM与Thumb指令) + 子程序调用和程序返回支持两张状态切换。bx或者blx都可以切换状态。### 2.2、ARM64## 参考文档 1、ARM Procedure Call Standard 2、Procedure Call Standard for the ARM 64-bit Architecture (AArch64)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.3 redis分布式锁【Java 面试第三季】

redis分布式锁【Java 面试第三季】前言推荐redis分布式锁概览47_redis分布式锁前情说明48_boot整合redis搭建超卖程序-上49_boot整合redis搭建超卖程序-下50_redis分布式锁0151_redis分布式锁0252_redis分布式锁0353_redis分布式锁0454_redis分布式锁0555_redis分布式锁0656_re…

【Java|golang】2363. 合并相似的物品---桶排序

给你两个二维整数数组 items1 和 items2 &#xff0c;表示两个物品集合。每个数组 items 有以下特质&#xff1a; items[i] [valuei, weighti] 其中 valuei 表示第 i 件物品的 价值 &#xff0c;weighti 表示第 i 件物品的 重量 。 items 中每件物品的价值都是 唯一的 。 请你…

报名投票链接怎么做做一个投票的链接怎么做微信投票链接怎么做

近些年来&#xff0c;第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放&#xff0c;更多人选择微信投票小程序平台&#xff0c;因为它有非常大的优势。1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

案例|政务大数据平台数据安全建设实践

《关于加强数字政府建设的指导意见》、《全国一体化政务大数据体系建设指南》&#xff0c;对全面开创数字政府建设新局面作出部署&#xff0c;保障数据安全&#xff0c;提升数字政府基础设施的支撑能力&#xff0c;也明确成为数字政府建设探索与实践中的重点任务。那么&#xf…

王道计算机网络课代表 - 考研计算机 第五章 传输层 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “传输层” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络》课程里的全…

klee内存模型

klee内存模型一.LLVM基础二.Klee中相关的类2.1.基础类2.2.内存管理相关类三.示例3.1.示例13.2.示例23.3.示例33.4.示例4这篇blog主要通过一些简单的示例来了解以下klee对内存的建模方式。 首先一个C语言程序在运行时&#xff0c;内存主要包括&#xff1a; 代码段&#xff0c;程…

如何从零到一的设计一套轻易云数据集成平台这样的系统架构

一个集成平台的架构设计需要考虑多个方面&#xff0c;包括系统架构、技术选型、数据存储、安全设计等。下面是参考轻易云数据集成平台的架构设计思路&#xff1a;系统架构首先需要确定系统的整体架构&#xff0c;这包括前后端分离、微服务架构、容器化部署等。根据需求和规模的…

老字号白酒企业——金徽酒借力泛微,升级门户,实现统一办公

金徽酒股份有限公司前身系康庆坊、万盛魁等多个徽酒老作坊基础上组建的省属国营大型白酒企业&#xff0c;曾用名甘肃陇南春酒厂&#xff0c;是国内建厂最早的中华老字号白酒酿造企业之一。2016年3月10日&#xff0c;金徽酒在上海证券交易所挂牌上市。 &#xff08;图片素材来自…

Airbnb(三) Managing Diversity in Airbnb Search 搜索多样性

abstract 搜索系统中一个长期的问题是结果多样性。从产品角度讲&#xff0c;给用户多种多样的选择&#xff0c;有助于提升用户体验及业务指标。 多样性需求和模型的目标是相矛盾的&#xff0c;因为传统ctr模型是 point wise&#xff0c;只看单个相关性不管相邻之间item差异。 …

字节前端一面常见vue面试题(必备)

Vue为什么没有类似于React中shouldComponentUpdate的生命周期 考点: Vue的变化侦测原理前置知识: 依赖收集、虚拟DOM、响应式系统 根本原因是Vue与React的变化侦测方式有所不同 当React知道发生变化后&#xff0c;会使用Virtual Dom Diff进行差异检测&#xff0c;但是很多组件…

如何顺利渡过三月“大考”?ScanV为您献上“通关秘籍”

随着网络安全形势日益复杂、严峻&#xff0c;在重大安全保障事件期间&#xff0c;重要业务系统&#xff0c;尤其是党政机关、国企央企、能源、金融等重要的关基单位更应重视网站及业务系统安全。 临近三月重保季&#xff0c;知道创宇推出“御黑行动-典型案例篇”&#xff0c;以…

美国近50%的企业都在使用ChatGPT!你的企业用了吗?

当一些人还在尝试向人工智能聊天程序ChatGPT提问、和它进行沟通交流时&#xff0c;不少美国企业已把ChatGPT应用到了日常工作中&#xff0c;甚至代替了部分员工&#xff0c;节省了企业成本。据美国《财富》杂志网站近日报道&#xff0c;本月早些时候&#xff0c;一家提供就业服…

王道计算机网络课代表 - 考研计算机 第四章 网络层 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “网络层” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络》课程里的全…

HTML标签——表格标签

HTML标签——表格标签 目录HTML标签——表格标签一、表格标题和表头单元格标签场景&#xff1a;注意点&#xff1a;案例实操小结二、表格的结构标签场景&#xff1a;注意点&#xff1a;案例实操&#xff1a;三、合并单元格思路场景&#xff1a;代码实现一、表格标题和表头单元格…

今天,我想去一个平行世界

基于云计算的大规模即时云渲染技术&#xff0c;让每个人都拥有了“数字生命”。2023的开年爆款&#xff0c;非《流浪地球2》莫属。 它展开了人类的新话题&#xff0c;关于平行空间&#xff0c;关于数字生命&#xff0c;关于人类文明。跟随这部科幻巨作&#xff0c;穿越平行空间…

hadoop-Yarn资源调度器【尚硅谷】

大数据学习笔记 Yarn资源调度器 Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等运算程序则相当于运行与操作系统之上的应用程序。 &#xff08;也就是负责MapTask、ReduceTask等任…

营收大涨Facebook复活? 要留住人心不能只靠改革

Facebook 作为全球最大的社交媒体平台之一&#xff0c;在过去几年中曾经面临着不少困难和挑战。但是最近&#xff0c;Facebook 在广告收入上的表现迅猛反弹&#xff0c;这表明 Facebook 已经成功地复活了。那么如何利用新功能来提高广告效果&#xff1f;一. 利用Facebook的自适…

通过对比学习改进生成式文本摘要

当前在文本摘要领域&#xff0c;利用深度模型的监督学习方式表现的最好&#xff0c;这类方法基本都是将摘要抽取看做seq2seq自回归的生成任务&#xff0c;训练时基于极大似然估计&#xff0c;让模型预测的序列的概率最大近似标注的参考序列。这类方法存在一个明显的问题就是&am…

福特FORD EDI需求分析

福特&#xff08;Ford&#xff09;是世界著名的汽车品牌&#xff0c;为美国福特汽车公司&#xff08;Ford Motor Company&#xff09;旗下的众多品牌之一。福特在其发展史中始终拥有先进的产业观念&#xff0c;从其“福特制”的生产管理模式可见一斑。 EDI是供应链企业信息整合…

实现RecyclerView二级列表

自定义RecyclerView的adapter实现二级列表 图片大于5MB&#xff0c;CSDN不让上传&#xff0c;使用github链接&#xff0c;如果看不到请使用科学上网 https://github.com/nanjolnoSat/PersonalProject/blob/recyclerexpandableadapter/Recyclerexpanableadapter/pic/pic1.gif 源…