首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ARM子例程调用和链接寄存器使用

ARM子例程调用是指在ARM架构中,程序通过调用子例程(也称为子程序或函数)来实现模块化编程的一种方式。子例程是一段可重复使用的代码片段,它可以接收参数、执行一定的任务,并返回结果。在ARM中,子例程的调用通常使用特定的指令(如BL、BX等)进行。

链接寄存器是ARM处理器中的一组寄存器,用于存储子例程的返回地址。当程序调用一个子例程时,当前的指令地址会被保存到链接寄存器中,以便在子例程执行完成后返回到正确的位置。

使用链接寄存器有助于实现函数调用的跳转和返回,同时可以保持程序的结构清晰和模块化。通过使用链接寄存器,可以避免在每个函数中都进行返回地址的压栈和弹栈操作,提高了代码的执行效率。

ARM子例程调用和链接寄存器的使用在各种ARM架构的应用中都非常常见。它们被广泛应用于嵌入式系统、移动设备、物联网等领域的软件开发中。

推荐的腾讯云相关产品:

  1. 腾讯云云服务器(ECS):腾讯云提供的高性能云服务器,可用于部署ARM架构的应用程序。产品介绍链接:https://cloud.tencent.com/product/cvm
  2. 腾讯云函数计算(SCF):腾讯云提供的事件驱动的无服务器计算服务,适用于快速部署和运行函数式代码。产品介绍链接:https://cloud.tencent.com/product/scf
相关搜索:ARM架构(thumb/arm)中R7和R11与链接寄存器的关系调用约定VBA -使用字符串连接调用子例程在子例程中传递和使用可选掩码Fortran是否通过函数和子例程调用保留内部变量的值?如何使用selenium获取所有链接(标题和子链接)如何使用ARM模板同时创建存储帐户和链接服务使用PublicClientApplicationBuilder和AcquireTokenSilent链接Web API调用使用ARM编译器6编译和链接时的标准C库链接器问题如何使用回调重构链接的$http调用和库调用我的计算收据的Visual Basic程序(使用子例程和验证函数)无法运行使用arm-none-eabi- STM32、newlib和cmake链接C/C++ eabi项目使用AppsFlyer和React Native启动通用链接时未调用continueUserActivity使用父类方法和子实例,调用最具体的方法(子方法)在core Java中使用indexOf、子串和模式匹配从网页中提取链接如何修复:(不能有隐式的远跳转或调用近标签)和(使用假定为错误的寄存器)如何使用链接列表中存在的变量在链接列表类外部调用函数和接收函数中的参数使用子进程和多次调用脚本以并行运行-如何检查任何错误的返回代码IllegalStateException:在使用GridView和ViewPager时,必须首先在子级的父级上调用removeView()如果使用python和子进程从pycharm调用_common,gsutil将不起作用,"cannot import name gsutil“使用F2PY创建一个Fortran扩展模块,并将自定义签名文件和子例程存储在单独的Fortran文件中?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ARM汇编语言模块结构条件执行

ARM汇编语言 模块结构 模块示例 ENTRY 指令 start 应用程序执行 stop 应用程序终止 END 指令 调用例程 ALU 状态标记 条件执行 模块结构 ARM汇编语言是指 ARM 汇编程序...大小写规则,指令助记符、指令符号寄存器名称可以用大写或小写编写,但不能混合使用大小写。 反斜杠符 (\) :在行尾放置反斜杠符 (\),可以将较长的源代码行拆分为多个行。...调用例程 若要调用例程,应使用跳转链接指令,其语法是:BL destination BL 指令:将返回地址存放到链接寄存器中,将pc设置为例程的地址。...destination是例程的第一个指令处的标签,也可以是程序相对表达式。 在执行例程代码后,可以使用 BX lr 指令返回。...按照约定,寄存器 r0 到 r3 用于将参数传递给例程,并且 r0 还用于将结果传递回调用方。

94540

ARM汇编基础知识

对于使用ARM处理器的 Android手机来说,它最终会生成相应的ARM elf (so)可执行文件,分析软件的核心功能只能从 elf(so)文件入手。...R14 别名LR(linked register)链接寄存器:用于存放子程序的返回地址,它是ARM程序实现子程序调用的关键所在。...被调用函数返回之前必须恢复这些寄存器的值。...其中有些指令使用最低有效位来确定跳转到的目标代码是 Thumb 代码还是 ARM 代码。...跳转指令 此类指令用于: 向后跳转以构成循环 在条件结构中向前跳转 跳转到例程ARM 状态 Thumb 状态之间转换处理器状态 数据处理指令 此类指令用于对通用寄存器执行运算,它们可对两个寄存器的内容执行加法

45820
  • 嵌入式:ARM转移指令(分支指令)

    文章目录 转移转移链接指令(B,BL) 二进制编码 汇编格式 (1)无条件转移 (2)执行10次循环 (3)调用子程序 汇编语言子程序调用及返回 (4)子程序的嵌套调用 (5)条件子程序调用 转移交换转移链接交换...ARM的转移指令可以从当前指令向前或向后的32MB的地址空间跳转,根据完成的功能它可以分为以下4种 : B 转移指令 BL 带链接的转移指令 BX 带状态切换的转移指令 BLX 带链接状态切换的转移指令...在返回调用子程序时,转移链接指令保存到LR寄存器(r14)中的值需要拷贝回程序寄存器PC(r15)。...转移交换转移链接交换(BX,BLX) 这些指令用于支持Thumb(16位)指令集的ARM芯片,程序可以通过这些指令完成处理器从ARM状态到Thumb状态的切换。...ARM的状态寄存器CPSR中的状态控制位T-bit(位[5])决定了当前处理器的运行状态,因此,可以通过MSRMRS指令来直接修改CPSR的状态位,也能够改变处理器运行状态 但由于ARM采用多级流水线的结构

    1.2K20

    如何开发嵌入式中断控制系统?

    中断向量表在整个程序的最前面,比如 STM32F103 的中断向量表如下所示: 中断向量表都是链接到代码的最前面,比如一般 ARM 处理器都是从地址 0X00000000 开始执行指令的,那么中断向量表就是从...这意味着一个高优先级的中断可以打断一个低优先级的中断服务例程,使得系统能够及时响应更紧急的任务。 向量化中断处理:每个中断都有一个唯一的向量地址,该地址指向相应的中断服务例程。...这有助于更好地理解控制系统的行为。 低功耗模式支持:在低功耗模式下,NVIC可以帮助处理器在接收到中断信号时唤醒,这对于节能延长电池使用寿命至关重要。...要使用某个外设的中断,肯定要先使能这个外设的中断,以 STM32F103 的 PE2 这个 IO 为例,假如我们要使用 PE2 的输入中断肯定要使用如下代码来使能对应的中断: NVIC_InitStructure.NVIC_IRQChannel...当特定的中断事件发生时,系统自动调用对应的中断服务函数来处理该事件。 当中断发生时,处理器暂停当前正在执行的任务,保存当前任务的上下文(如寄存器状态),然后跳转到相应的中断服务函数执行中断处理。

    27310

    STM32 结构

    因此,在使用外设前需要操作复位时钟寄存器(Reset and Clock Control,RCC)开启所需外设的时钟。...ARM公司只是大概的规定了存储器空间的映射,允许各芯片厂商在指定范围内自行定义使用这些存储空间,未分配的空间为保留的地址空间。...)Cortex-M3包含两个堆栈指针寄存器;同一时刻只能看到其中一个; (1)主堆栈指针寄存器(Main Stack Pointer,MSP):操作系统(OS)内核异常处理程序使用的默认堆栈指针;...(2) 进程堆栈指针寄存器(Process Stack Pointer,PSP):用于用户代码; R14(Link Register,LR):链接寄存器调用例程时,返回地址将存储在链接寄存器中;...)组成; PRIMASK、FAULTMASKBASEPRI:中断屏蔽寄存器;用于控制异常中断的屏蔽; CONTROL:控制寄存器;用于定义特权状态当前使用哪一个堆栈指针; 【总结】 STM32由

    1K20

    ARM Linux 启动时的自解压过程 | Linux 内核

    本文将对 ARM Linux 的自解压过程进行一个简单介绍。arch/arm/* 下的大多数机器都会使用压缩的内核,其自解压过程是一样的。...接下来,内核设置一个局部的栈指针 malloc() 区域,以便我们可以处理例程调用进行小内存分配,简单地说,就是可以执行 C 代码了。...如果找到附加的 DTB,并设置了 CONFIG_ARM_ATAG_DTB_COMPAT,我们首先将 DTB 扩展 50% 并调用 atagstofdt,它将使用来自 ATAG 的信息(例如内存块内存大小...调用的 _decompress() 函数将取决于链接到图像的 lib/decompress*.c 中的哪个解压缩器。...在调用解压器之前,解压器需要的所有关于压缩内核位置变量都设置在寄存器中了。

    2.8K10

    【嵌入式】基于ARM的嵌入式Linux开发总结

    5、寄存器: (1)ARM处理器均为32位寄存器; (2)ARM1176寄存器数量:40个 (3)ARM1176寄存器包括:未分组寄存器、分组寄存器、CPSR、SPSR; (4)未分组寄存器(所有模式通用...、根目录、资源限制控制终端等,而进程所独有的只有它的进程号、资源使用计时器等。...pid=-1:等待任何一个进程退出,此时wait作用一样。 pid=0:等待其组ID等于调用进程的组ID的任一进程。 pid<-1:等待其组ID等于pid的绝对值的任一进程。...pid=-1:等待任何一个进程退出,此时wait作用一样。 pid=0:等待其组ID等于调用进程的组ID的任一进程。 pid<-1:等待其组ID等于pid的绝对值的任一进程。...函数返回值 正常:结束的进程的进程号 使用选项WNOHANG且没有进程结束时:0 调用出错:-1 进程结束:exit()_exit() 所需头文件 exit:#include <stdlib.h

    18.4K21

    纯干货|最经典的STM32概述!

    主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程) 进程堆栈指针(PSP):由用户的应用程序代码使用。...两种操作模式分别为:处理者模式线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码异常服务例程的代码——包括中断服务例程的代码。...在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。...一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。...指令总线和数据总线被分开,取值访内可以并行不悖 。 Thumb-2的到来告别了状态切换的旧世代,再也不需要花时间来切换于 32位 ARM状态16位Thumb状态之间了。

    1.1K20

    进程、线程、轻量级进程、协程go中的Goroutine

    另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。...切换只CPU寄存器值需要存储,并随后用将要切换到的线程的原先存储的值重新加载到CPU寄存器中去。 用户级线程主要缺点在于对引起阻塞的系统调用调用会立即阻塞该线程所属的整个进程。...例程的生命期遵循后进先出(最后一个被调用例程最先返回);相反,协程的生命期完全由他们的使用的需要决定。...从操作系统有没有调度权上看,协程就是因为不需要进行内核态的切换,所以会使用它,会有这么个东西。赖永浩dccmx 这个定义我觉得相对准确 协程-用户态的轻量级的线程。...(http://blog.dccmx.com/2011/04/coroutine-concept/) 为什么要用协程: 协程有助于实现: 状态机:在一个例程里实现状态机,这里状态由该过程当前的出口/入口点确定

    1.5K60

    【STM32F429的DSP教程】第32章 STM32F429的实数FFT的逆变换(支持单精度双精度)

    双精度函数arm_rfft_fast_f64实现FFT正变换逆变换 32.6 实验例程说明(MDK) 32.7 实验例程说明(IAR) 32.8 总结 32.1 初学者重要提示 STM32H7支持硬件单精度浮点硬件双精度浮点...32.4.2 使用举例 下面通过函数arm_rfft_fast_f32将正弦波做FFT变换,并再次通过函数arm_rfft_fast_f32做FFT逆变换来比较原始波形转换后波形效果。...32.5.2 使用举例 下面通过函数arm_rfft_fast_f64将正弦波做FFT变换,并再次通过函数arm_rfft_fast_f64做FFT逆变换来比较原始波形转换后波形效果: /* ****...该函数配置CPU寄存器外设的寄存器并初始化一些全局变量。...该函数配置CPU寄存器外设的寄存器并初始化一些全局变量。

    64530

    【STM32F407的DSP教程】第32章 STM32F407的实数FFT的逆变换(支持单精度双精度)

    双精度函数arm_rfft_fast_f64实现FFT正变换逆变换 32.6 实验例程说明(MDK) 32.7 实验例程说明(IAR) 32.8 总结 32.1 初学者重要提示 STM32H7支持硬件单精度浮点硬件双精度浮点...32.4.2 使用举例 下面通过函数arm_rfft_fast_f32将正弦波做FFT变换,并再次通过函数arm_rfft_fast_f32做FFT逆变换来比较原始波形转换后波形效果。...32.5.2 使用举例 下面通过函数arm_rfft_fast_f64将正弦波做FFT变换,并再次通过函数arm_rfft_fast_f64做FFT逆变换来比较原始波形转换后波形效果: /* ****...该函数配置CPU寄存器外设的寄存器并初始化一些全局变量。...该函数配置CPU寄存器外设的寄存器并初始化一些全局变量。

    72210

    嵌入式:ARM异常中断指令SWI、BKPT、CLZ详解

    SWI SWI(SoftWare Interrupt)代表“软件中断”,用于用户调用操作系统的系统例程,常称为“监控调用”。它将处理器置于监控(SVC)模式,从地址0x08开始执行指令。...二进制编码 SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。...操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用户程序调用系统例程的类型,相关参数通过通用寄存器传递。...当指令中24位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器R0的内容决定,同时,参数通过其他通用寄存器传递。...ARM异常入口程序进入监控(SVC)程序(管理模式),这时处理器的行为是: 将SWI后面指令的地址保存到R14_svc 。

    2.5K10

    学 Linux 必会的 ARM 汇编指令

    或SPSR)_,操作数 MSR CPSR,R0 ;传送R0的内容到CPSR MSR SPSR,R0 ;传送R0的内容到SPSR 四.加载/存储指令 ARM 微处理器支持加载/存储指令用于在寄存器存储器之间传送数据...LDRB LDRH 指令大家可以百度。 2、【STR指令】 STR 源寄存器, STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。...该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。 STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。...STRB STRH指令大家可以百度。 五.异常产生指令 1、【SWI指令】 SWI 24位的立即数 SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。...SWI 0x02 ;该指令调用操作系统编号位02的系统例程。 2、【BKPT指令】 BKPT 16位的立即数 BKPT指令产生软件断点中断,可用于程序的调试。 六.伪代码 1.

    3.9K10

    进程、线程、轻量级进程、协程go中的Goroutine 那些事儿

    另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。...切换只CPU寄存器值需要存储,并随后用将要切换到的线程的原先存储的值重新加载到CPU寄存器中去。 用户级线程主要缺点在于对引起阻塞的系统调用调用会立即阻塞该线程所属的整个进程。...例程的生命期遵循后进先出(最后一个被调用例程最先返回);相反,协程的生命期完全由他们的使用的需要决定。...从操作系统有没有调度权上看,协程就是因为不需要进行内核态的切换,所以会使用它,会有这么个东西。赖永浩dccmx 这个定义我觉得相对准确  协程-用户态的轻量级的线程。...(http://blog.dccmx.com/2011/04/coroutine-concept/) 为什么要用协程: 协程有助于实现: 状态机:在一个例程里实现状态机,这里状态由该过程当前的出口/入口点确定

    1.7K30

    【STM32F429的DSP教程】第15章 DSP统计函数-标准偏差、均方根方差

    第15章       DSP统计函数-标准偏差、均方根方差 本期教程主要讲解统计函数中的标准偏差,均方根方差的计算。...(MDK) 15.8 实验例程说明(IAR) 15.9 总结 15.1 初学者重要提示   特别注意本章13.5.2小节的问题,定点数求解平方根,本章节几个函数的源码都有调用到求平方根。  ...15.7 实验例程说明(MDK) 配套例子: V6-210_DSP统计运算(标准偏差,均方根方差) 实验目的: 学习统计运算(标准偏差,均方根方差) 实验内容: 启动一个自动重装软件定时器,每100ms...该函数配置CPU寄存器外设的寄存器并初始化一些全局变量。...该函数配置CPU寄存器外设的寄存器并初始化一些全局变量。

    86410

    操作系统(3)实验相关原理——bootloader启动uCore

    IDT中每一项称为中断门或者陷阱门(之前的全局描述符表类似,也是个数组),通过中断号来选中IDT中的陷阱门,通过这个陷阱门/中断门可以获得陷阱门/中断门相关的段的选择(类似段机制的选择段类偏移)...上图为陷阱门/中断门的信息,可以看到每一项包含了段选择偏移。通过这两个东西可以确定例程的起始地址。...上图表示了怎么通过IDTGDT/LDT来确定中断服务例程的确切地址,首先中断向量进来,变成index在IDT中选择相应的陷阱门/中断门,提取出对应的偏移段选择,最后通过段选择在GDT中选中段描述符...最后的最后,基地址偏移结合,得出最终的中断例程的地址(中断例程也是操作系统要实现的)。CPU会自动根据这两个表来进行处理,所以操作系统只需要构建这两个表例程就行。以上就是中断处理初始化的过程。...油用户态切换到内核态变化的时候: 注意红框中的SSESP,这是用来指明用户态下使用的栈的地址,即中断前后不是使用同一个栈。

    76830
    领券