ARM汇编指令

ARM结构知识点一 ARM(Advanced RISC Machine)是一种基于RISC(精简指令集计算机)原理的计算机处理器架构。 阅读详情

1.ARM寄存器那点知识

1.1 ARM处理器的八种工作模式(在ARMv8中加入了Monitor模式用于安全扩展)

usr模式:正常程序运行时的模式
fiq模式:当配置有快速中断时,如果产生fiq时间,ARM核将会切换到该模式
irq模式:中断模式,一般用于通用中断处理,被ROS使用
svc模式:操作系统使用的保护模式,当进行软中断,复位时会进入该模式
sys模式:运行具有特权的操作系统任务,属于特权模式
abt模式:当数据或者指令预取值终止则会进入该模式
und模式:当未定义指令执行时则会进入该模式
monitor模式:用于安全扩展,是安全世界TEE和普通世界REE中间的桥梁

1.2 通用寄存器和专用寄存器

ARM处理器中的寄存器可分为通用寄存器和专用寄存器两种。寄存器R0-R12属于通用寄存器,除了FIQ工作模式,在其他工作模式下这些寄存器都是共用、共享的。R0-R3通常用来传递函数的参数,R4-R11用来保存程序运算的中间结果或者函数的局部变量等,R12常用来作为函数调用过程中的临时寄存器。ARM处理器有多种工作模式,除了这些在各个模式下通用的寄存器,还有一些寄存器在各自的工作模式下独立存在,如R13,R14,R15,CPSP,SPSR寄存器。

寄存器备注
R0-R3通用寄存器,用于c 函数的形参传递
R4-R11通用寄存器,用来保存程序运算的中间结果或函数的局部变量等
R12临时寄存器,作为函数调用过程中的临时寄存器
R13堆栈指针寄存器SP,用来维护和管理函数调用过程中的返回值
R14链接寄存器LR,在函数调用过程中主要用来保存上一级函数调用者的返回地址
R15程序计数器PC,CPU从内存取指令执行,默认从PC保存的地址中取的
CPSR当前处理器状态寄存器,主要用于表征当前处理器的运行状态,能查询处理器当前的工作模式,中断使能控制,以及其他的一些状态位、标志位
SPSR程序状态保存寄存器,当处理器切换工作模式或者发生异常时,SPSR用来保存当前工作模式下的处理器现场,即将CPSR寄存器的保存到当前工作模式下的SPSR寄存器中,当处理器从异常返回时,就可以从SPSR寄存器中恢复原先的处理器状态

CRSR寄存器 每一位的作用如下
BIT[0:4] 处理器模式
BIT[5] 0:ARM指令集 1:Thumb指令集
BIT[6] 0:启动FIQ中断 1:关闭FIQ中断
BIT[7] 0:启动IRQ中断 1:关闭IRQ中断
BIT[8:27] 保留
BIT[28] 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时V=1表示符号位溢出。
BIT[29] 0:ARM指令集 1:Thumb指令集
BIT[30]调用CMP指令 0:运算结果不为0 1:运算结果为0
BIT[31] 0:表示结果为正数或零 1:表示运算结果为负数

2.ARM指令 (用到就更新)

2.1.存储访问指令

LDR R1, [R0]    ;将R0中的值作为地址,将该地址上的数据保存到R1
STR R1, [R0]    ;将R0中的值作为地址,将R1中的值存储到这个内存地址
LDRB/STRB     ;每次读写一字节,LDR/STR默认每次读写4字节
LDM/STM         ;批量加载/存储指令,在一组寄存器和一片内存之间传输数据
SWP R1,R1,[R0]    ;将R1与R0中地址指向的内存单元中的数据进行交换
SWP R1,R2,[R0]    ;将[R0]存储到R1,将R2写入[R0]这个内存存储单元

2.2.堆栈指令

在ARM中堆栈有四种形式

堆栈格式备注
FA满递增堆栈
FD满递减堆栈
EA空递增堆栈
ED空递减堆栈

在一个堆栈内存结构中,如果堆栈指针SP总是指向栈顶元素,那么这个栈就是满栈,否则指向栈后的一个元素就是空栈。ARM处理器使用的一般都是满递减堆栈,将一组寄存器入栈,或者从栈中弹出一组寄存器时,使用一下指令

LDMFD SP!,{R0-R2,R14}; //将内存栈中的数据依次弹出到R14,R2,R1,R0中
STMFD SP!,{R0-R2,R14};	//将R0,R1,R2,R14依次压入内存栈

除此之外,ARM还专门提供了PUSH和POP指令来执行栈元素的入栈和出栈操作。PUSH和POP的使用方法如下:

PUSH{R0-R2,R14} // 将R0、R1、R2、R14的值依次压入栈
POP{R0-R2,R14} // 将栈中的数据依次弹到R14、R2、R1、R0

2.3 数据传送指令

MOV R1, #1 ;将立即数1传送到寄存器R1中
MOV R1, RO ;将R0寄存器中的值传送到R1寄存器中
MOV PC,LR  ;将R14也就是LR中的返回地址给PC
MVN R0, #0xFF ;将立即数0xFF取反后赋值给R0
MVN R0,R1   ;将R1寄存器的值取反后赋值给R0

2.4 算数逻辑运算指令

ADD R2,R1,#1      ;R2 = R1 + 1
ADC R1,R1,#1      ;R1 = R1 + 1 + C (其中C为CPSR寄存器中的进位)
SUB R1,R1,R2      ;R1 = R1 - R2 
SBC R1,R1,R2      ;R1 = R1 - R2 - C
AND R0,R0,#3      ;R0 = R0 & 3
ORR R0,R0,#3	  ;R0 = R0 | 3
EOR R0,R0,#3      ;R0 = R0 异或 3
BIC R0,R0,#3      ;R0 = R0 & (~3)

2.5 移位指令

#constant,n   ;将立即数constant循环右移n位
ASR #n		   ;算数右移n位,n的取值范围:[1-32]
LSL #n         ;逻辑左移n位,n的取值范围:[0-31]
LSR #n         ;逻辑右移n位,n的取值范围:[1-32]
ROR #n         ;向右循环移n位,n的取值范围:[1-31]
RRX            ;向右循环移1位,带扩展位
type Rs        ;仅在ARM中可用,其中type指ASR ,LSL,LSR,ROR,  Rs是提供位移量的寄存器名称
//type Rs 和 #constant,n 具体使用方法如下
ADD R3,R2,R1, LSL #3      ;R3 = R2 + R1 << 3
ADD IP,IP, #16,20         ;IP = IP + 16 >> 20 (这里的右移是循环右移)

2.6比较指令

CMP R1 , #10    ;R1-10,运算结果会影响CPSR寄存器中的N、Z、C、V位
CMP R1 , R2     ;R1-R2,运算结果会影响CPSR寄存器中的N、Z、C、V位
CMN R0 , #1    ;R0-(-1),与CMP不同的是它将对第二个操作数取反然后做比较

2.7 条件执行指令

TODO

2.8 跳转指令

TODO

2.9 ARM伪指令

(1).align val_1 , val_2, val_3

其中第 1 个参数值 val_1 是所需要的对齐值;第 2 个是填充字节的值,填充值可以省略,若省略则编 译器使用 0 值填充。第 3 个用来指明最大用于填充或跳过的字节数。如果进行边界对齐会超过 val_3 指定的最大字节数,那么就根本不进行对齐操作。如果需要省略第 2 个参数 val_2 但还是需要使用第 3 个参数 val_3 ,那么只需要放置两个逗号即可。

.align 11, 0    // 11为对齐值 0为填充字节值
ARM汇编——PC和LR寄存器理解 寄存器,Arm汇编,PC,LR 阅读详情

相关推荐

Cortex‐M3内核学习笔记(一):概览

一、寄存器组 R0-R12:通用寄存器 R0‐R12 都是 32 位通用寄存器,用于数据操作。但是注意:绝大多数 16 位 Thumb 指令只能访问 R0‐R7,而 32 位 Thumb‐2 指令可以访问所有寄存器。 R13: 两个堆栈指针 Cortex‐M3 拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。 ●主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程) ● 进程堆栈指针(PSP):由用户的应用程序代码使用。 R14:连接

weixin_43952192的博客 2064

ARM中R0-R15寄存器的作用

ARM中R0-R15寄存器的作用 根据“ARM-thumb过程调用标准”: R0-R3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将R0-R3用于任何用途。被调用函数在返回之前不必恢复R0-R3。如果调用函数需要再次使用R0-R3...

3432

ARM 汇编指令

跳转指令 B/BL label:跳转到label指令地址处执行,会首先把该指令的下一条指令地址保存到lr寄存器。 label偏移地址的计算: A: B/BL指令的地址;B:即将要跳转到的函数地址 label = (B - A) >>2;最终结果右移2位,是因为指令地址是4字节对齐。 示例: 400608 - 400664 = FFFFFFa4 >> 2 = FFFFF...

lxb122435677的博客 8521

寄存器r0 - r12 是什么?

寄存器r0 - r12 是什么?

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 2688

ARM中的---汇编指令

一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text"、".data"、".bss" 依次表示的是“以下是代码段”, “以下是初始化数据段”, “以下是未初始化数据段”。 2.".global" 定义一个全局符号,通常是为ld使用。比如经常看到的 .global _start 3.".ascii"、".byte"、".shor...

weixin_34315189的博客 2670

ARM—V7架构与ARM常用汇编指令

ARMv7的多种模式是为了处理不同的任务需求,提供不同的特权级别和硬件资源访问权限。用户模式(USR)和系统模式(SYS)用于正常的应用程序和操作系统;中断模式(IRQ、FIQ)用于处理硬件中断;异常模式(SVC、ABT、UND)处理异常和错误;Monitor和Hyp模式用于安全扩展和虚拟化应用。每种模式的设计都有助于ARM处理器提高效率、安全性和灵活性,适用于从嵌入式系统到虚拟化和安全需求的广泛场景。ARM的寄存器组在执行过程中起着核心作用。通用寄存器用于函数参数和临时数据的存储,sp和lr。

qq_44839773的博客 1765

ARM常用汇编指令

转载来源: https://blog.youkuaiyun.com/qqliyunpeng/article/details/45116615 ...

Systemcall名屋 9752

语义通信高斯信道仿真代码

【代码】语义通信高斯信道仿真代码。

一去不复返的通信er 427

ARM常用的汇编指令

ARM属于RSIC指令集,不能自己对内存里的数据进行直接操作, 只能通过Load/Store的指令来实现, 所以当我们要对内存中的数据进行操作时, 先要将内存中的数据加载到寄存器中, 然后在寄存器中对数据进行处理,最后将结果重新存储在内存中。为了能在C程序中内嵌汇编代码,不同的编译器基于ANSI C标准扩展了不同的关键字,使用的汇编格式可能也可能不太一样,如GUN ARM编译器提供了一个__asm__ 关键字,它的使用方法如下.SUB {cond} {S} Rd, Rn, operand2;

u010268337的博客 2181

手把手教你用Zemax优化MTF:从‘离焦平衡球差’到高频像差控制的实战技巧

本文详细介绍了如何使用Zemax优化MTF性能,从基础设置到高级技巧的全流程。通过具体案例,讲解了如何利用离焦平衡球差提升中频MTF,以及识别和控制高频像差的方法,帮助光学设计工程师和学生有效提升成像质量。

weixin_30752699的博客 748

STM32 CubeMX实战:手把手教你用I2C驱动IST8310磁力计(附完整代码)

本文详细介绍了如何使用STM32 CubeMX和I2C驱动IST8310磁力计,从硬件连接到代码实现的完整流程。重点讲解了I2C通信异常处理、传感器初始化序列优化以及中断驱动数据采集方案,帮助开发者快速搭建可靠的地磁场数据采集系统。

weixin_42531163的博客 189

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的博客 788

相位偏折PMD全栈技术拆解 | 四步相移解算+梯度积分形貌重建,助力镜面工件微米级缺陷高精度稳定检测

工业精密检测领域中,高反光镜面类工件长期存在检测瓶颈,涵盖汽车高亮车漆、半导体抛光晶圆、光学透镜、精密抛光模具、玻璃盖板等主流产品。传统2D机器视觉仅能识别表面明显污渍、大尺寸破损,完全无法捕捉微米级划痕、凹坑、橘皮、曲面微形变等微观缺陷;常规线激光3D、普通结构光3D检测设备,面对镜面材质会产生严重镜面反射杂光,激光条纹、结构光图案完全失真,必须喷涂显影粉辅助检测,不仅破坏工件表面完整性,还无法适配自动化量产产线,检测效率与良率极低。

getusushu的博客 539

[内核开发手册] ARM汇编指令速查表

ARM汇编指令速查摘要 本文整理了ARM处理器常见汇编指令及其功能描述和语法示例。主要内容包括: 数据传送指令:mov、ldr、str等 算术运算指令:add、sub、mul等 逻辑运算指令:and、orr、eor等 移位指令:lsl、asr等 控制流指令:b、bl、bx等跳转指令 栈操作指令:push、pop 条件执行指令:cmp、it系列等 特殊指令:如mla(乘加)、uxtb(位扩展)等,本表可作为ARM汇编程序开发的快速参考手册。

qq_36016038的博客 1680

【全局路径规划模块运动学算法】无人机Kinodynamic A*算法、Kinodynamic RRT*算法(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Kinodynamic A*算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容啃这个Kinodynamic A_star算法,建议先啃一啃高飞fast_planner那篇论文,把理论打好,如果还是比较迷,就先看Dijksta、再看A_star、再看hybrid A_star 三个的流程,因为往上资料比较多,再看这个Kinodynamic A_star算法,流程已经很相像了。如果。

qq_35635374的博客 2600

【模型之美】3、文本聚类与智能摘要,让AI帮你做个总结

在信息过载时代,文本聚类与摘要技术成为关键工具。本文提出了一种结合OpenAI Embedding与传统机器学习的方法,实现从文本预处理到智能分析的完整流程。技术方案分为三阶段:1)通过Embedding将文本转化为语义向量;2)采用K-Means等算法进行无监督聚类;3)利用大模型生成可解释的标签和摘要。实验证明,该方法能有效提升信息处理效率,如在新闻聚合系统中自动分类10,000篇文章,准确率较传统方法提高15%。方案包含实用代码示例,涵盖文本清洗、向量化、聚类优化等关键技术细节,可应用于对话记忆、舆情

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1438

ARM汇编指令的一些总结

2. ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了。比较有用的是MOV  B  BL  LDR  STR还是通过具体汇编代码来学习吧。       @ disable watch dog timer           mov r1, #0x53000000   //立即数寻址方式    mov r2, #0x0    str r2, [r1]          MOV没有什么好说的,只要掌握几个寻址方式就可以了,而且A

sunshineyy85的专栏 517

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1727

ARM Cortex汇编指令

在ARM架构的MCU开发中,汇编指令集是底层编程的核心。

创新改变世界! 1962

osgEarth 球上显示地形数据库

osgEarth 球上显示地形数据库 本文展示了一种由DSM和DEM得到Osgb工程,并在osgEarth球上显示的方法。其中DSM、DOM到Osgb工程的转换由VPB(VirtualPlanetBuilder)来实现,并采用Model图层将Osgb工程在球上显示。 本文主要解决一下问题: VPB编译 VPB生成地形 地形在球上显示 目录 1 前言 2 VPB编译与使用 3 地形在osgEarth球上显示 内容 1 前言 VirtualPlanetBuilder是一个开源代码工具,用于根据

CPWWHSU的博客 2433

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Windows Audio无法启动 错误 0x80070005:拒绝访问 ~~~解决分享~~~
下一篇: ATF中smc指令详解
瓜皮张先生
博客等级 码龄8年 23粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值