arm 汇编积累
C语言函数与汇编对应关系

一、MOV 系列指令
1、指令格式
MOV{条件}{S} 目的寄存器,源操作数
2、含义解析:
(1):mov 指令传送数据
案例:
MOV R0,R1 ; R0 = R1;
MOV PC,R14 ;PC = R14;
MOV R0,R1,LSL#3 ;R0=R1<<3;
(2):movs
s(s标志)功能不变,影响CPSR标志位
movs r0, #0 默认结果为零但不影响CPSR的Z位,加上s以后会影响CPSR标志位

N[31]:负的条件标记 T[5]:决定的是用的是ARM指令集还是Thumb指令集
Z[30]:零的条件标记 A[6]:异常终止的频闭位
C[29]:操作进位 I [7]:中断的频闭位
V[28]:操作溢出 F[8]:快速中断的频闭位
E[9]: 大小端序的设置

二、LDR 与 STR 系列命令

1、LDR 命令
// 格式:LDR{条件} 目的寄存器,<存储器地址>
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
LDR R1, =0x00000001 ; 把内容 0x00000001 写入 R1 寄存器。
LDR R1,0x00000002 ; 把内存地址 0x00000002 里的内容转到 R1 中。
MOV 与 LDR 的区别:
mov
1.用于寄存器和寄存器之间传递数据
2.把立即数(立即数表示数值的数字,前面加#)传递给寄存器
str/ldr
可以用于寄存器与内存之间的数据交换,STR是将寄存器中的数载入内存,LDR是将内存中的数载入到寄存器,LDR可以载入立即数。
2、STR 命令
// 格式:STR{条件} 源寄存器,<存储器地址>
STR R0,[R1],#8 // 将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1
STR R0,[R1,#8] // 将R0中的字数据写入以R1+8为地址的存储器中
三、多内存操作指令(此部分为借鉴,多谢博主)
指令格式 : <opcode><cond> Rn{!} {register_list}
Rn 中保存一个 内存地址值
{!} 表示是否更新 Rn 中的地址值
{register_list} 寄存器列表
1. 【 stm 】 多个寄存器中的值写入内存中
mov r0, #0x40000000
ldr r1, =0x11111111
ldr r2, =0x22222222
ldr r3, =0x33333333
ldr r4, =0x44444444
stm r0!, {r1,r2,r3,r4} @ 把 此条指令改为 stm r0,{r1,r2,r3,r4} 不会更新r0中的地址值

对于多个寄存器的操作指令【stm】说明:
(1)加 ! 表示更新 r0 中的地址值
(2)寄存器列表中是连续的寄存器可以用 - 连接 如 {r1, r2, r3, r4, r6} 可以表示为 {r1-r4, r6}
(3)编号晓得寄存器数据,保存到低地址中
(4)编号大的寄存器数据,保存到高地址中
2. 操作多个寄存器 读内存数据
mov r0, #0x40000000
ldr r1, =0x11111111
ldr r2, =0x22222222
ldr r3, =0x33333333
stm r0, {r1-r3} @把寄存器 r1-r3 中的值写入 r0 指向的内存地址中ldm r0!, {r5-r7} @读出r0指向的内存地址中的放在寄存器 r5-r7 中

四、栈操作指令 【入栈: stmfd,出栈:ldmfd 】
栈的 4 种特性 Full满栈 Empty空栈 Ascend增栈 Descend降栈
组合 4 种栈:
stmfa fa 满 增
stmfd fd 满 降 ARM 汇编默认使用
stmea ea 空 增
stmed ed 空 减
指令格式:<opcode><cond> sp! {register_list} : sp 堆栈指针 r14
ldr sp, =0x40000100 @初始化栈指针
ldr r1, =0x11111111
ldr r2, =0x22222222
ldr r3, =0x33333333stmfd sp!, {r1-r3} @把数据 入栈 到sp指向的地址, 增满栈类型, sp指针跟着更新
ldmfd sp!, {r4-r6} @出栈, 把栈内数据弹出到 r4-r6寄存器中

案例:
ldr sp, =0x40000100 @初始化栈指针mov r0, #0x12mov r1, #0x11bl add_funmov r2, #0x22mov r3, #0x33b loopadd_fun:stmfd sp!, {r0-r3, lr} @ 入栈 r0-r3 ,lr指向跳转此处的吓一跳指令,也就是跳转到 , 第5行mov r0, #0x1mov r1, #0x2add r4, r0, r1ldm sp!, {r0-r3, pc} @ 出栈,把 lr 的地址弹到 pc指针中执行loop:b loop

相关文章:
arm 汇编积累
C语言函数与汇编对应关系 一、MOV 系列指令 1、指令格式 MOV{条件}{S} 目的寄存器,源操作数 2、含义解析: (1):mov 指令传送数据 案例: MOV R0,R1 ; R0 R1; MOV PC,R14 ;PC R14; MOV R0,R…...
SpringBoot整理-安全(Spring Security)
在 Spring Boot 应用中实现安全性通常涉及到集成 Spring Security 框架。Spring Security 是一个功能强大且高度可定制的认证和访问控制框架,非常适合用于保护 Spring Boot 应用。 核心特性 认证: 认证是确认某个实体的身份,Spring Security 支持多种认证机制,如表单登录、L…...
【技能树学习】Git入门——练习题解析
前言 本篇文章给出了Git入门技能树中部分的练习题解析,包括分支管理,Git标签,在Mac和Windows上使用GitVSCode的步骤。强调了git cherry-pick不直接支持从标签中选择提交,git tag -d只能删除本地标签,Mac系统的终端可以…...
Springboot+vue的企业财务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目
演示视频: Springbootvue的企业财务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的企业财务管理系统,采用M(model&…...
手撕spring bean的加载过程
这里我们采用手撕源码的方式,开始探索spring boot源码中最有意思的部分-bean的生命周期,也可以通过其中的原理理解很多面试以及工作中偶发遇到的问题。 springboot基于约定大于配置的思想对spring进行优化,使得这个框架变得更加轻量化&#…...
Linux系统中安装JDK
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
Stable Diffusion 模型下载:国风3 GuoFeng3
文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十推荐提示词下载地址模型介绍 欢迎使用GuoFeng3模型 - 这是一个中国华丽古风风格模型,也可以说是一个古风游戏角色模型,具有2.5D的质感。 条目内...
VUE项目导出excel
导出excel主要可分为以下两种: 1. 后端主导实现 流程:前端调用到导出excel接口 -> 后端返回excel文件流 -> 浏览器会识别并自动下载 场景:大部分场景都有后端来做 2. 前端主导实现 流程:前端获取要导出的数据 -> 把常规数…...
Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES
📁前情提要:Springboot整合Elasticsearch(一):Linux下安装 Elasticsearch 8.x 目录 一、使用 elasticsearch-head 插件连接 1、下载压缩包 2、在 chrome 浏览器中添加扩展程序 3、修改IP地址,点击连接 …...
npm 淘宝镜像到期
npm 淘宝镜像到期了 npm ERR! request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expired npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/cnpm failed, reason: cer…...
计算机网络——新型网络架构:SDN/NFV
1. 传统节点与SDN节点 1.1 传统节点(Traditional Node) 这幅图展示了传统网络节点的结构。在这种设置中,控制层和数据层是集成在同一个设备内。 以太网交换机:在传统网络中,交换机包括控制层和数据层,它不仅负责数据包的传输&…...
【精选】java继承进阶,子类继承父类(内存图、内存分析工具)
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…...
Google Play上架:因行为透明度被拒审或下架的政策自查(基于区块链的内容)
近期很多朋友的项目出现因行为透明度问题被谷歌拒审或者已经上架的包被下架甚至封号,今天解释一下为什么会被封号下架,根据是什么? 目录 政策发布时间与截止时间政策内容政策背景政策解析和问题讲解政策发布时间与截止时间 基于区块链的内容相关政策,于2023-07-12 公布,…...
备战蓝桥杯---搜索(剪枝)
何为剪枝,就是减少搜索树的大小。 它有什么作用呢? 1.改变搜索顺序。 2.最优化剪枝。 3.可行性剪枝。 首先,单纯的广搜是无法实现的,因为它存在来回跳的情况来拖时间。 于是我们可以用DFS,那我们如何剪枝呢&#…...
ResizeObserver的使用
这篇说下ResizeObserver API。ResizeObserver接口监视 Element 内容盒或边框盒或者 SVGElement 边界尺寸的变化。 ResizeObserver避免了通过回调函数调整大小时,通常创建的无限回调循环和循环依赖项。它只能通过在后续的帧中处理 DOM 中更深层次的元素来做到这一点…...
CleanMyMac X 4.14.7帮您安全清理Mac系统垃圾
CleanMyMac X 4.14.7是一款强大的 Mac 清理、加速工具和健康卫士,可以让您的 Mac 再次恢复巅峰性能。 移除大型和旧文件、卸载应用,并删除浪费磁盘空间的无用数据。 5倍 更多可用磁盘空间 CleanMyMac X 4.14.7帮您安全清理Mac系统垃圾 CleanMyMac X 4.14.7一键深度扫描mac系统…...
C语言实现memcpy、memmove库函数
目录 引言一、库函数介绍二、库函数详解三、源码实现1.memcpy源码实现2.memmove源码实现 四、测试1.memcpy函数2.memmove函数 五、源码1.memcpy源码2.memmove源码 六、参考文献 引言 关于memcpy和memmove这两个函数,不论是算法竞赛还是找工作面试笔试,对…...
MySQL数据库④_表的约束(主键_自增长_唯一键_外键等)
目录 1. 约束概念和常见的约束 2. 空属性null/not null 2. 默认值default 3. 列描述comment 4. 自动填充zerofill 5. 主键primary key 5.1 主键 5.2 复合主键 6. 自增长auto_increment 7. 唯一键unique key 8. 外键forei…...
SpringBoot过滤器获取请求的参数
一、背景 在项目开发过程中,需要对于某些接口统一处理。 这时候就需要获取请求的报文,再对获取的报文进行统一处理。 二、了解过滤器 首先了解一下过滤器拦截器的区别: JAVA中的拦截器、过滤器:https://blog.csdn.net/qq_38254…...
幻兽帕鲁mac可以玩吗?
《幻兽帕鲁》(英文:Palworld)是一款近期在 Steam 爆红的动作冒险生存游戏,游戏设置在一个居住着「帕鲁」的开放世界中,玩家可以战斗并捕捉帕鲁,也能用它们来建造基地、骑乘和战斗。 不过目前《幻兽帕鲁》仅…...
Vue 3.4+ 实验性/新特性深度实战(2026版)
一、背景:从“稳定”到“极致体验”截至 2026 年,Vue 3.4 与 3.5 已全面普及,但许多能显著降低心智负担的特性(如 defineModel)在早期被标记为“实验性”,或仅在 3.5 才完全稳定。如果你还在写“Pr…...
从零构建树莓派人脸识别门禁:硬件选型、环境部署与实战避坑
1. 硬件选型与采购清单 第一次玩树莓派人脸识别项目时,我在淘宝上花了整整三天对比各种硬件参数。当时最纠结的就是摄像头模块——普通USB摄像头才30块钱,而官方推荐的Raspberry Pi Camera Module V2要200多。后来实测发现,这差价真不能省。 …...
如何为华硕笔记本安装轻量级性能控制工具:G-Helper完整指南
如何为华硕笔记本安装轻量级性能控制工具:G-Helper完整指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Stri…...
【Cornerstone3D实战】从零构建医学影像三视图渲染器:Dicom文件加载与多平面重建
1. 医学影像三视图渲染器入门指南 第一次接触医学影像开发的朋友可能会被"Dicom"、"三视图重建"这些专业术语吓到。其实用现代Web技术实现一个基础的医学影像查看器,比你想象中简单得多。Cornerstone3D这个开源库就像医学影像界的jQuery&#x…...
05. 微交互设计模式解析:让界面更有生命力
05. 微交互设计模式解析:让界面更有生命力 引言 微交互是用户与界面之间的小互动,它们虽然微小,却能给用户带来巨大的愉悦感。作为一名把代码当散文写的 UI 匠人,我始终认为:好的微交互不是简单的动画效果,…...
Open UI5 源代码解析之740:SearchManager.js
源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.f\src\sap\f\SearchManager.js SearchManager.js 深度解析:在 openUI5 中的职责、机制与落地价值 文件定位与总体判断 这个文件定义了一个名为 sap.f.SearchManager 的类。它位于 sap.f 库路径下,却明…...
Qt 实时数据可视化工程实践:环形缓冲区实践
目录 前言 一、架构设计 1.1 分层架构图 1.2 数据写入流 1.3 数据刷新流 (定时器驱动 → 视图更新) 1.4 核心设计思想 二、核心实现详解 2.1 RingBuffer:环形缓冲区实现 2.1.1 append函数(线程安全写入) 函数主体实现: …...
好用还专业!AI智能降重工具深度测评与推荐
2026年真正好用的AI论文降重与改写工具,核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
2026年,市面上正规SSL证书品牌众多,哪家才是真正专业之选?
在当今数字化时代,网络安全至关重要,SSL证书作为保障网站安全的关键工具,其重要性不言而喻。2026年,市面上正规的SSL证书品牌众多,企业在选择时往往会感到困惑。本文将为大家分析如何选择专业的SSL证书品牌,…...
06. Flutter Hero动画实现:让界面过渡更加优雅
06. Flutter Hero动画实现:让界面过渡更加优雅 引言 Flutter 的 Hero 动画是一种神奇的过渡效果,它能让元素在不同页面之间平滑过渡,创造出连贯且令人愉悦的用户体验。作为一名把代码当散文写的 UI 匠人,我始终认为:好…...

