ARM常用汇编指令

ARM—V7架构与ARM常用汇编指令 ARMv7的多种模式是为了处理不同的任务需求,提供不同的特权级别和硬件资源访问权限。用户模式(USR)和系统模式(SYS)用于正常的应用程序和操作系统;中断模式(IRQ、FIQ)用于处理硬件中断;异常模式(SVC、ABT、UND)处理异常和错误;Monitor和Hyp模式用于安全扩展和虚拟化应用。每种模式的设计都有助于ARM处理器提高效率、安全性和灵活性,适用于从嵌入式系统到虚拟化和安全需求的广泛场景。ARM的寄存器组在执行过程中起着核心作用。通用寄存器用于函数参数和临时数据的存储,sp和lr。 阅读详情
(1)GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为{False}。
GBLL BOOTLOADER
BOOTLOADER SETL {TRUE}
(2)GET(或 INCLUDE)
GET 伪指令用于将一个源文件包含到当前的源文件中,并将被包含的源文件在当前位置进行汇编处理。可以使用 INCLUDE 代替 GET。
INCLUDE ..\\..\\kernel\\oal\\startup.s
(3)IMPORT 伪指令用于通知编译器要使用的标号在其他的源文件中定义,但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中。
IMPORT BootloaderMain
IMPORT MMUSetup
(4)BL 带返回的跳转指令
(5)BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转
B Label ;程序无条件跳转到标号Label处执行
CMP R1,#0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行
BEQ Label
(6)LDR 指令的格式为:
LDR{条件} 目的寄存器,<存储器地址>
LDR 指令用于从存储器中将一个 32 位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取 32 位的字数据到通用寄存器,然后对数据进行处理。当程序计数器 PC 作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
指令示例:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1,R2] ! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1
LDR R0,[R1,#8] ! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。
LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
LDR R0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
(7)STR 指令的格式为:
STR{条件} 源寄存器,<存储器地址>
STR 指令用于从源寄存器中将一个 32 位的字数据传送到存储器中。与LDR对应
(8)采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多 16 个通用寄存器的值。以下指令:
LDMIA R0,{R1,R2,R3,R4} ;R1←[R0]
;R2←[R0+4]
;R3←[R0+8]
;R4←[R0+12]
该指令的后缀 IA表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到 R1~R4。
(9)SBC 指令的格式为:
SBC{条件}{S} 目的寄存器,操作数 1,操作数 2
SBC指令用于把操作数1减去操作数2,再减去 CPSR 中的C 条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于 32 位的减法。注意不要忘记设置 S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。
指令示例:
SUBS R0,R1,R2 ; R0 = R1 - R2 - !C,并根据结果设置CPSR的进位标志位
(10)BX 带状态切换的跳转指令
(11)MCR 指令的格式为:
MCR{条件} 协处理器编码,协处理器操作码 1,源寄存器,目的寄存器 1,目的寄存器 2,协处理器操作码 2
MCR 指令用于将 ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1和协处理器操作码2为协处理器将要执行的操作,源寄存器为 ARM 处理器的寄存器,目的寄存器1和目的寄存器2均为协处理器的寄存器。
指令示例:
MCR P3,3,R0,C4,C5,6 ;该指令将ARM处理器寄存器R0中的数据传送到协处理器P3的寄存器C4和C5中。
(12)CMP 指令的格式为:
CMP{条件} 操作数 1,操作数 2
CMP 指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新 CPSR 中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数 1 与操作数 2 的关系(大、小、相等),例如,当操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指令将可以执行。
指令示例:
CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位
CMP R1,#100 ;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位
(13)批量数据加载/存储指令LDM(或 STM)指令的格式为:
LDM(或 STM){条件}{类型} 基址寄存器{!},寄存器列表{∧}
LDM(或 STM)指令用于从由基址寄存器所指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈(SDM)或出栈(LDM)。其中,{类型}为以下几种情况:
IA 每次传送后地址加 1;
IB 每次传送前地址加 1;
DA 每次传送后地址减 1;
DB 每次传送前地址减 1;
FD 满递减堆栈;
ED 空递减堆栈;
FA 满递增堆栈;
EA 空递增堆栈;
{!}为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不改变。
STMFD R13!,{R0,R4-R12,LR} ;将寄存器列表中的寄存器(R0,R4 到R12,LR)存入堆栈
LDMFD R13!,{R0,R4-R12,PC} ;将堆栈内容恢复到寄存器(R0,R4到R12,LR)
(14)ORR 指令的格式为:
ORR{条件}{S} 目的寄存器,操作数 1,操作数 2
ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数 1
应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数 1 的某些位。
指令示例:
ORR R0,R0,#3 ; 该指令设置R0的0、1位,其余位保持不变。
(15)BIC 指令的格式为:
BIC{条件}{S} 目的寄存器,操作数 1,操作数 2
BIC指令用于清除操作数1 的某些位,并把结果放置到目的寄存器中。操作数 1 应是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即数。操作数 2 为 32 位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不变。
指令示例:
BIC R0,R0,#%1011 ; 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变。
(16)
ADR(小范围的地址读取伪指令)
ADRL(中等范围的地址读取伪指令)
LDR(大范围的地址读取伪指令)
ldr r0, =0xFFFFC000
用于将基于PC的地址或基于寄存器的地址读取到寄存器中。
///伪指令通过汇编编译器替换成对应的ARM/Thumb 指令。

ARM常用汇编指令_gcc arm 汇编 定义4字节空间 你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-WTbeTAA0-1712230000579)][外链图片转存中…(img-3ebecOGd-1712230000579)][外链图片转存中…(img-6siHBpTj-1712230000580)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化! 阅读详情

相关推荐

ADS 使用教程(十八)Encrypting Designs using RFIP Encoder in ADS

在这一节,我们使用RFIP Encoder进行设计加密,这是一种保护知识产权和敏感设计数据的重要方法。RFIP Encoder提供了一种安全的方式来加密设计文件,确保只有授权人员能够访问和使用这些文件。

Dirge19的博客 1169

常用的ARM汇编指令

MRS (读状态寄存器)  MRS r1, CPSR     ;   CPSR--->r1MSR (写状态寄存器) MSR cpsr_c, #0xD3 ;  CPSR[7...0] = 0xD3 STMFD SP! {R8-R9}含义:(1)SP=SP-4字节 (2) R9--->SP  (3)SP=SP-4  (4) R8-->SP LDMFD SP! {R8-R9,

学海无涯,回头是岸........ 1863

扣子(coze)实战 | 一键生成爆款书单视频

摘要:本文介绍了一个基于DeepSeek和Coze平台实现短视频高效生成的工作流方案。该方案耗时仅1-2分钟即可完成"假如书籍会说话"类短视频制作,包含书籍内容深度解读、对话台词生成、自动配音、素材合成等环节,支持通过剪映进行二次编辑。作者分享了完整开发思路和8个工作模块,并开放了包含该工具在内的100+智能体共享空间,提供会员专属服务。该方案为非真人出镜短视频的批量化生产提供了可行方案。

yueyehuguang的博客 2395

状态寄存器传送指令 —— 访问(读写)CPSR寄存器

状态寄存器传送指令 —— 访问(读写)CPSR寄存器

challenglistic的博客 2078

SAP PS模块实战指南:从项目启动到结算的全流程解析

本文详细解析SAP PS模块在项目管理中的全流程应用,从项目启动到结算的关键操作与实战技巧。通过WBS设计、预算控制和资源调配等核心功能,帮助管理者高效协调项目进度与成本,特别适用于交付型和成本型项目管理。掌握PS模块能显著提升项目管理效率与精准度。

weixin_42553471的博客 448

IGBT基础知识

IGBT

u010783226的专栏 1万+

【摘录】RH850用户手册:软件

2 处理器模型 2.5 寄存器 2.5.3 寄存器更新 有几种方法可以用来更新寄存器。通常,当使用指令更新寄存器时没有特殊的限制。但是使用下面的指令更新寄存器时,根据工作模式,可能会存在一些限制。 LDSR STSR (1) LDSR和STSR LDSR和STSR指令可以访问所有的系统寄存器。但是,如果没有使用合适的权限访问系统寄存器,会发生PIE异常或者UCPOP异常。关于每个寄存器的访问权...

qq_29450419的博客 4679

基于APDL语言的结构优化设计

同理,二次微分值称为二阶值。通俗地讲优化分析,指的找到一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。设计方案的任何方面都是可以优化的,比如说:尺寸(如厚度),形状(如过渡圆角的大小),支撑位置,制造费用,自然频率,材料特性等。完成分析文件的建立后,就可以进行优化分析了,如果在交互方式下进行优化的话,最好先在ANSYS数据库中用分析文件建立参数,其优点有:初始参数可以作为一阶分析方法的起点,且对于优化过程参数在数据库中可以在GUI下进行操作,便于定义优化变量。

m0_73816777的博客 1175

ARM指令学习之load/store

存储器数据传送指令: //内容必须通过寄存器作为载体进行数据传输 load载入(从存储器给寄存器)方式 ldrb rd,[rn,#offset] //从地址rn+offset处读取一个字到rd ldrh rd,[rn,#offset] //从地址rn+offset处读取一个半子到rd ldr rd,[rn,#offset] //从地址rn+offset处读取一个字到rd ldrd rd1,rd...

weixin_42734120的博客 783

鸿蒙应用发布实战:应用热更新的实现

在移动应用开发领域,应用更新是持续交付价值的关键环节。传统的应用更新方式需要用户手动下载完整安装包,不仅用户体验差,而且更新率往往不理想。热更新技术(也称为OTA更新)允许应用在不重新安装的情况下动态更新部分功能,极大提升了用户体验和迭代效率。本文专注于鸿蒙操作系统下的应用热更新实现方案,涵盖从原理到实践的完整知识体系。鸿蒙热更新的技术架构差分更新算法实现动态部署机制实际项目中的最佳实践安全与性能优化策略首先介绍鸿蒙热更新的背景和核心概念深入分析技术原理和算法实现。

操作系统内核探秘的博客 965

【即插即用模块】Transformer篇 | MICCAI 2025 | ReLULA:Q/K双ReLU线性注意力,既轻又准!

本文介绍了一种基于线性注意力的多实例学习模块(Lin-MIL),适用于高分辨率视觉任务。该模块通过转置计算顺序和使用ReLU激活,将计算复杂度从O(n²d)降至O(nd²),同时提升特征判别性。核心创新包括Q/K双ReLU激活、可学习温度系数和数值稳定归一化。实验表明,该模块在轻量化视觉任务中优于传统线性注意力和Mamba架构。代码实现了模块化矩阵乘法,支持即插即用替换ViT自注意力层。该模块特别适合计算病理学等需要处理大量图像补丁的任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

LDSR 指令详解

【代码】LDSR 指令详解。

weixin_43588305的博客 226

Laser-Marking 激光振镜打标机的开源代码 - 下载 - 搜珍网

为了方便开发者的使用和定制化需求,我们在这里提供激光振镜打标机的开源代码,并附带详细的描述。首先,让我们来了解一下激光振镜打标机的基本原理。振镜系统由两个可移动的反射镜组成,可以控制激光束在水平和垂直方向上的偏转角度,从而实现对工件的精确控制。通过这段开源代码,开发者可以根据自己的需求对激光振镜打标机进行二次开发和定制化。你可以修改振镜角度、打标速度等参数,也可以添加其他功能,例如自动识别和追踪等。首先,我们创建了一个串口对象,用于与激光振镜打标机进行通信。函数实现了对用户输入文本的打标操作。

TechProX的博客 1278

ARM 常用汇编指令

{R4-R7};递减地址存储R4-R7,SP递减(堆栈操作), {R1-R3};递增地址加载R1-R3,R0递增。按位清除(R1 & ~R2)STR R2, [R1, #4];将R2存储到R1+4地址。从R1指向的地址加载数据到R0。跳转并链接,保存返回地址到LR。BGE label;

wangjinjin180的博客 791

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ARM 常用汇编指令讲解

ARM 常用汇编指令讲解 指令名称 作用EQU 给数字常量取一个符号名,相当于 C 语言中的 define AREA 汇编一个新的代码段或者数据段 SPACE 分配内存空间 PRESERVE8...

iyy123IUU的博客 811

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【ARM系列】ARM常用汇编指令

在调试芯片启动代码或者分析ARM core运行流程的过程中,尝尝需要对照软件代码的反汇编文件进行分析,因此有必要掌握一些常用的arm汇编指令。

Laplace2008 4199

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ARM架构与常用ARM汇编指令介绍

Q:为什么需要学习汇编语言?A:C语言->编译器->机器码(汇编就是机器码的注释)展开能力,C语言与汇编的后沟就是编译器,C语言是高级语言编程工具,汇编语言是结果判断结果是否符合预期?学会看反汇编如何控制结果符合预期?学会一定的C语言语法以及编译器的工作特性编译器往往会根据他们的想法对我们的程序作出一定的优化,一般情况下这个优化是不会出什么问题的,但是一旦优化结果图理我们预期我们需要找出这个其中的问题原因就需要学习一定的的汇编语言,

2303_76316997的博客 1114

STM32--ARM常用汇编指令

ARM常用汇编指令: 1、 EQU:给数字常量取一个符号名,相当于C语言中的define 2、 AREA:汇编一个新的代码段或者数据段 3、 SPACE:分配内存空间 4、 PRESERVE8:当前文件栈需要按照8字节对齐 5、 EXPORT:声明一个标号具有全局属性,可被外部的文件使用 6、 DCD:以字为单位分配内存,要求4字节对齐,并要求初始化这些内存 7、 PROC:定义子程序,与END...

tyustli 9398

常用的ARM汇编指令总结

第一次写博客,请各路大神多多关照。本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编指令与51的也有很大差别。故搞ARM汇编指令时,遇到不懂的就问度娘,并总结了下来,希望对从事相关行业的同仁有所帮助。闲话不多说,上干货。1、  IMPORT和EXPORTIMPORT ,定义表示这是一个...

zb861359的博客 1万+

ARM常用汇编指令汇总

ARM常用汇编指令汇总 .text表示代码段 .data初始化的数据段 .bss未初始化的数据段 .rodata只读数据段 .global表示全局变量 CPSR寄存器数据访问 指令 目的 源 描述 MRS R0 CPSR 将CPSR的数据放到R0中 MSR CPSR R1 将R1的数据放到CPSR中 RAM数据访问 指令 描述 LDR Rd , [Rn,#offset] 从寄存器Rn+offset的位置读取寄存器的值到Rn STR Rd , [Rn,#of.

麦子点点的博客 1145

ARM常用汇编指令集

我们经常在调试ARM芯片的时候遇到这样那样问题, 但大部分时间需要去看反汇编代码。 这时汇编的功底不行就很难看懂里面具体讲的是什么, 今天我们需要讲解一些调试过程中常用的汇编指令。 常用汇编指令: (1)相对跳转指令 b ;跳转 bl ;除了跳转之外,还将返回(bl下一条指令的地址)保存在lr寄存器中。 ...

shao15232的博客 813

arm 常用汇编指令

说到汇编,一般操作的是处理器内部的寄存器,所以我们先来看看ARM cortex-A系列的寄存器组对于Cortex-A系列寄存器组,ARM 架构提供了 16 个 32 位的通用寄存器(R0~R15)供软件使用,前 15 个(R0~R14)可以用作通用的数据存储,R15 是程序计数器 PC,用来保存将要执行的指令。ARM 还提供了一个当前程序状态寄存器 CPSR 和一个备份程序状态寄存器 SPSR,SPSR 寄存器就是 CPSR 寄存器的备份。以前的ARM处理器有7中运行模型:UserFIQ。

weixin_39995288的博客 2052

ARM常用的几种汇编指令

汇编语言是一种低级别的计算机编程语言,与计算机硬件体系结构直接相关。它使用符号和助记符来代表机器指令、寄存器和内存位置,相比高级语言,汇编语言更接近计算机硬件的操作方式。通过汇编语言,程序员可以直接控制计算机的底层操作,编写更为高效的程序,但也需要更深入地理解计算机体系结构和指令集。

xiewengeng的博客 590

Linux进阶-ARM_V7架构和ARM常用汇编指令

User(USR):用户模式。linux系统用户进程,资源访问受限。System(SYS):系统模式。linux内核,共用寄存器,资源自由访问。IRQ:一般中断模式。硬件产生中断信号。FIQ:快速中断模式。时间紧急的中断,高速信号的传输、采集。Supervisor(SVC):管理模式。默认模式,系统初始化,软中断。Abort(ABT):数据访问终止模式。非法访问地址或寄存器、段错误。Undef(UND):未定义指令模式。程序跑飞、纂改。Monitor:用于用户安全扩展模式。Hyp:用于虚拟化扩展。r0~r3

weixin_47077788的博客 1905
上一篇: C程序的BSS段 代码段 数据段
下一篇: linux系统函数container_of浅析
LinuxWorking
博客等级 码龄10年 24粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值