当前位置: 首页 > news >正文

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} 目的寄存器&#xff0c;源操作数 2、含义解析&#xff1a; &#xff08;1&#xff09;&#xff1a;mov 指令传送数据 案例&#xff1a; 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入门技能树中部分的练习题解析&#xff0c;包括分支管理&#xff0c;Git标签&#xff0c;在Mac和Windows上使用GitVSCode的步骤。强调了git cherry-pick不直接支持从标签中选择提交&#xff0c;git tag -d只能删除本地标签&#xff0c;Mac系统的终端可以…...

Springboot+vue的企业财务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的企业财务管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业财务管理系统&#xff0c;采用M&#xff08;model&…...

手撕spring bean的加载过程

这里我们采用手撕源码的方式&#xff0c;开始探索spring boot源码中最有意思的部分-bean的生命周期&#xff0c;也可以通过其中的原理理解很多面试以及工作中偶发遇到的问题。 springboot基于约定大于配置的思想对spring进行优化&#xff0c;使得这个框架变得更加轻量化&#…...

Linux系统中安装JDK

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Stable Diffusion 模型下载:国风3 GuoFeng3

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十推荐提示词下载地址模型介绍 欢迎使用GuoFeng3模型 - 这是一个中国华丽古风风格模型,也可以说是一个古风游戏角色模型,具有2.5D的质感。 条目内...

VUE项目导出excel

导出excel主要可分为以下两种&#xff1a; 1. 后端主导实现 流程&#xff1a;前端调用到导出excel接口 -> 后端返回excel文件流 -> 浏览器会识别并自动下载 场景&#xff1a;大部分场景都有后端来做 2. 前端主导实现 流程&#xff1a;前端获取要导出的数据 -> 把常规数…...

Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES

&#x1f4c1;前情提要&#xff1a;Springboot整合Elasticsearch&#xff08;一&#xff09;&#xff1a;Linux下安装 Elasticsearch 8.x 目录 一、使用 elasticsearch-head 插件连接 1、下载压缩包 2、在 chrome 浏览器中添加扩展程序 3、修改IP地址&#xff0c;点击连接 …...

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) 这幅图展示了传统网络节点的结构。在这种设置中&#xff0c;控制层和数据层是集成在同一个设备内。 以太网交换机&#xff1a;在传统网络中&#xff0c;交换机包括控制层和数据层&#xff0c;它不仅负责数据包的传输&…...

【精选】java继承进阶,子类继承父类(内存图、内存分析工具)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…...

Google Play上架:因行为透明度被拒审或下架的政策自查(基于区块链的内容)

近期很多朋友的项目出现因行为透明度问题被谷歌拒审或者已经上架的包被下架甚至封号,今天解释一下为什么会被封号下架,根据是什么? 目录 政策发布时间与截止时间政策内容政策背景政策解析和问题讲解政策发布时间与截止时间 基于区块链的内容相关政策,于2023-07-12 公布,…...

备战蓝桥杯---搜索(剪枝)

何为剪枝&#xff0c;就是减少搜索树的大小。 它有什么作用呢&#xff1f; 1.改变搜索顺序。 2.最优化剪枝。 3.可行性剪枝。 首先&#xff0c;单纯的广搜是无法实现的&#xff0c;因为它存在来回跳的情况来拖时间。 于是我们可以用DFS&#xff0c;那我们如何剪枝呢&#…...

ResizeObserver的使用

这篇说下ResizeObserver API。ResizeObserver接口监视 Element 内容盒或边框盒或者 SVGElement 边界尺寸的变化。 ResizeObserver避免了通过回调函数调整大小时&#xff0c;通常创建的无限回调循环和循环依赖项。它只能通过在后续的帧中处理 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这两个函数&#xff0c;不论是算法竞赛还是找工作面试笔试&#xff0c;对…...

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过滤器获取请求的参数

一、背景 在项目开发过程中&#xff0c;需要对于某些接口统一处理。 这时候就需要获取请求的报文&#xff0c;再对获取的报文进行统一处理。 二、了解过滤器 首先了解一下过滤器拦截器的区别&#xff1a; JAVA中的拦截器、过滤器&#xff1a;https://blog.csdn.net/qq_38254…...

幻兽帕鲁mac可以玩吗?

《幻兽帕鲁》&#xff08;英文&#xff1a;Palworld&#xff09;是一款近期在 Steam 爆红的动作冒险生存游戏&#xff0c;游戏设置在一个居住着「帕鲁」的开放世界中&#xff0c;玩家可以战斗并捕捉帕鲁&#xff0c;也能用它们来建造基地、骑乘和战斗。 不过目前《幻兽帕鲁》仅…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...