ARM指令中的函数调用

发布者:BlossomWhisper最新更新时间:2016-05-11 来源: eefocus关键字:ARM指令  函数调用 手机看文章 扫描二维码
随时随地手机看文章
1. 重要寄存器

SP 栈指针,  每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性

LR 链接寄存器,一般用来存储返回地址;在执行BL或BLX等指令时,会自动存储下一条指令地址,即返回地址

PC 程序计数器,存储将要执行的指令

 

2. 程序跳转

B

BL

BX Rm        ;指令集的切换,跳转到另一指令集的label;

BLX Rm      ;将当前指令的下一条指令的地址存储到LR,然后跳转到另一指令集的地址处label  

 

--

看到这里,我们需要注意不是所以的函数调用都遵循AAPCS调用方式,相反,部分ARM c编译器可能强制将返回地址存放在栈上,然后使用B或BX这样的强制调转指令进行跳转。

Note that, in practice, not all function calls follow the AAPCS calling conventions: Instead of transferring the return address to lr register, the ARM C compiler may enforce the return address to be push onto the stack and afterwards performs a direct branch to the function through a B or BX instruction.

关键字:ARM指令  函数调用 引用地址:ARM指令中的函数调用

上一篇:ARM指令中的内存访问指令的总结
下一篇:指令+s对cpsr中标志位的影响

推荐阅读最新更新时间:2024-03-16 14:53

【Keil5 C51】AT89C52 做流水灯实验(调用C51的库函数_crol_)
_crol_ 函数的介绍 Cx51 User’s Guide Summary #include intrins.h unsigned char _crol_ ( unsigned char c, /* character to rotate left */ unsigned char b); /* bit positions to rotate */ Description The _crol_ routine rotates the bit pattern for the character c left b bits. This routine is implemented as an intrin
[单片机]
【Keil5 C51】AT89C52 做流水灯实验(<font color='red'>调用</font>C51的库<font color='red'>函数</font>_crol_)
史上最全ARM指令集详解
算术和逻辑指令 ADC : 带进位的加法 (Addition with Carry) ADC{条件}{S} , , dest = op_1 + op_2 + carry ADC 将把两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的加法。下列例子将加两个 128 位的数。 128 位结果: 寄存器 0、1、2、和 3第一个 128 位数: 寄存器 4、5、6、和 7第二个 128 位数: 寄存器 8、9、10、和 11。 ADDS R0, R4, R8 ; 加低端的字 ADCS R1, R5, R9 ; 加下一个字,带进位 ADCS
[单片机]
史上最全<font color='red'>ARM指令</font>集详解
单片机C程序的中断函数调用子程序冲突问题
在单片机或者ARM的使用过程中,必会遇到使用片上中断资源的时候,中断单片机的灵魂和精髓所在,像定时/计数器一样有很重要的作用。设置中断的作用是能及时响应重要的程序响应,以提高MCU和MPU的对重要资源的响应速度。在响应中断的过程中,系统会自动保存断点(C语言编程中),等到中断响应结束之后,程序会再次回到断点处继续执行main函数。这就出现了问题:有可能在中断函数中调用的子函数和main函数中调用的子函数重复,比如,在main函数执行到display()显示函数的时候,发生了ESUART中断,这是程序需要保存现场和断点,将现在的main正在执行的一些资源压入堆栈。如果在interrupt()函数中也调用display()函数的
[单片机]
ARM指令集中立即数寻址的范围
这是为什么呢?网上搜罗一番,果然有很多相关的讨论帖子,再加上自己的理解,大致得到了如下的结论。 有兴趣的可以去搜一下这一个关键词,8位位图,原来我们的第2操作数就是遵循这个规律的。 以上的解释文字来自ARM Processor Instruction Set,再附上两张图片: 所以,我们可以这样总结: 1.判断一个数是否符合8位位图的原则,首先看这个数的二进制表示中1的个数是否不超过8个。如果不超过8个,再看这n个1(n =8)是否能同时放到8个二进制位中,如果可以放进去,再看这八个二进制位是否可以循环右移偶数位得到我们欲使用的数。如果可以,则此数符合8位位图原理,是合法的立即数。否则,不符合。 2.无法
[单片机]
<font color='red'>ARM指令</font>集中立即数寻址的范围
ARM汇编教程(3): ARM指令
ARM与Thumb ARM 处理器有两种主要的运行状态,ARM 和 Thumb。这些状态与特权级别无关。例如,以 SVC 模式运行的代码可以是 ARM 或 Thumb。这两种状态的主要区别在于指令集,ARM 状态下的指令始终是 32 位的,而 Thumb 状态下的指令是 16 位的(但也可以是 32 位的)。 ARM 版本的调用约定非常混乱,并非所有 ARM 版本都支持相同的 Thumb 指令集。在某些时候,ARM 引入了增强的 Thumb 指令集(Thumbv2),它允许 32 位 Thumb 指令甚至条件执行,这在之前的版本中是不可能的。为了在 Thumb 状态下使用条件执行,引入了“it”指令。然而,这条指令在后来的版本
[单片机]
C 语言函数调用
在一个程序的编写过程中,随着代码量的增加,如果把所有的语句都写到 main 函数中,一方面程序会显得的比较乱,另外一个方面,当同一个功能需要在不同地方执行时,我们就得再重复写一遍相同的语句。此时,如果把一些零碎的功能单独写成一个函数,在需要它们时只需进行一些简单的函数调用,这样既有助于程序结构的清晰条理,又可以避免大块的代码重复。 在实际工程项目中,一个程序通常都是由很多个子程序模块组成的,一个模块实现一个特定的功能,在 C 语言中,这个模块就用函数来表示。一个 C 程序一般由一个主函数和若干个其他函数构成。主函数可以调用其它函数,其它函数也可以相互调用,但其它函数不能调用主函数。在我们的51单片机程序中,还有中断服务函数,是当相
[单片机]
Thumb指令集与ARM指令集的区别
Thumb指令集 Thumb指令可以看做是ARM指令压缩形式的子集,是针对代码密度【1】的问题而提出的,它具有16为的代码密度。Thumb不是一个完整的体系结构,不能指望处理程序只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时,可借助完善的ARM指令集,例如:所有异常自动进入ARM状态。 在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,可使用伪指令CODE32声明。 【1】.代码密度:单位存储空间中包含的指令的个数。例如 AR
[单片机]
ARM指令后缀与常用读取指令
一:指令可选后缀 “S”后缀:指令中使用“S”后缀,指令执行后状态寄存器的条件标志位将被刷新;不使用“S”后缀时,指令执行后状态寄存器的条件标志位不会发生变化。此标志经常用于对条件进行测试,例如:是否溢出,是否进位等;根据这些变化,就可以进行一些判断,是否大于,是否相等,从而可能影响指令执行顺序。 “!”后缀 如果指令地址表达式中不含“!”后缀,则基址寄存器中的地址不会发生变化,指令中含有则变化,变化结果如下: 基址寄存器中的值(指令执行后)=指令执行前的值+地址偏移量 注意: “!”后缀必须紧跟在地址表达式后面,而地址表达式要有明确的地址偏移量。 “!”后缀不能用于R15(PC)的后面 当用于单个寄存器后面时,必须确性这个寄存器
[单片机]
<font color='red'>ARM指令</font>后缀与常用读取指令
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved