ARM汇编指令学习笔记(一)【为明天BOOTLOADER学习准备】

本文介绍了ARM汇编语言中的关键指令,包括MOV、ADD、SUBB、B/BL、LDR、STR等,并详细解释了它们的功能及应用场景。特别强调了MOV指令的多种用法及其在跳转操作中的独特作用。

href="file:///C:/Users/BJX/AppData/Local/Temp/msohtmlclip1/01/clip_filelist.xml" rel="File-List" /> href="file:///C:/Users/BJX/AppData/Local/Temp/msohtmlclip1/01/clip_themedata.thmx" rel="themeData" /> href="file:///C:/Users/BJX/AppData/Local/Temp/msohtmlclip1/01/clip_colorschememapping.xml" rel="colorSchemeMapping" />

ARM汇编指令学习笔记(一)

汇编真的需要自己学.网上的资料满天飞,又能有多少能让人看进去?

闲话少说,切入正题:ARM(单片机)汇编常用指令用法总结,纯属原创,如有谬误,还望指正.

【这里带“【】”的是笔者随笔,贻笑大方,还望见谅】

MOV

传送指令MOVMove)把一个字节、字或双字的操作数从源位置传送到目的位置,源操作数的内容不变。可以实现立即数到通用寄存器或主存的传送,通用寄存器与通用寄存器、主存或段寄存器之间的传送,主存与段寄存器之间的传送。该操作属于复制性质,不属于搬家性质。 例如: MOV EAX,050ah ;将十六进制数050a 传送到通用寄存器eax

注意:【感悟:猜想是程序出错的可能原因之一】

  1.目的操作数要与源操作数类型要一致

  2.目的操作数要和源操作数类型之一必须要有明确的类型

使用方法:

1.  累加器A为目的操作数的源操作数:#datadirectRn@Ri(指令中的Ri表示取值可以是R0或者R1Rn表示可以取R0R7Ri一般用于间接寻址。具体一个R0R1是用于Ri还是Rn要看这条指令是什么

2.  工作寄存器Rn为目的操作数的源操作数:Adirect#data【疑问:工作寄存器之间能不能MOV?

3.  直接地址direct为目的操作数的源操作数:A,Rn,@Ri,direct2,#data

4.  寄存器间接地址@Ri为目的操作数的源操作数:A,direct#data

5.  除此之外还有涉及到DPTR,MOVX,MOVC的指令,在总结寻址时会提及。

应用:

ARM的两种跳转方式之一:MOV PC,地址;向程序计数器直接写跳转地址,能在4G连续空间内任意跳转。此外还可通过B,BL,BLX,BX在前后32MB范围内跳转,详见后文相关笔记。

ADD

没找到资料,简而言之:ADD A,Rn就是把Rn里的数加入A

应用:

1.  目的操作数必为A,源操作数可为:Rn@Ridirect#data

2.  此外,ADD课替换为ADDC,带上了Cy(进位标志位)

SUBB

SUBB【全称没找到,但地球人都知道这是减】。

应用:

         1.和ADD同,目的操作数必为A,源操作数可为:Rn@Ridirect#data【这也在一定程度上证明了SUBBADD本质是相同的】

B/BL

BARM最简单的跳转指令,但注意跳转的是相对当前PC值的偏移量【就像单片机的SJMPBL很常用。它在跳转之前会在寄存器LRR14)中保存PC的当前内容。BL经典用法如下:

bl NEXT;跳转到NEXT

……

NEXT:……

……

Mov pc,lr;从子程序中返回

【附:单片机中跳转的用法:(addr :代表8位地址 addr16:代表16位地址)

长转移指令:         LJMP addr16    ;addr16~0PC

短转移指令:         AJMP addr11   ;PC+2PC,addr10~0PC10~0

相对转移指令:     SJMP rel            ;PC+2PC,PC+relPC

间接转移指令:     JMP @A+DPTR;A+DPTRPC

LDR

LDR【具体全称也没查到L估计是LOAD,R估计是ROM或者RAM】就是把数据总存储器传到寄存器。

注意:

         有个伪指令也用LDRLDR Rn,=expr;作用是装载一个32bit地址或者常量到寄存器Rn。比如:ldr   r2,=0x55aa;其实MOV R2,#OX55AA也可以做到,但是LDR是伪指令,也就是说编译时编译器会处理它的:如果该数字常量在MOV指令范围内,汇编器会把这个指令作为MOV;如果不在MOV范围内,汇编器把该常量放在程序后面,用LDR来读取,PC和该常量的偏移量不能超过4KB【大致可以明白了】

应用

LDR R0,=0X12345678;伪指令,但这点MOV就做不到,MOV限制立即数长度为8位,即小于25628次方【一定注意是8次方】)!

STR

STR 字数据存储指令 【注意方向和MOV等相反是Rdaddr
格式:STR{<cond>} <Rd>,<addr>;
功能:把寄存器Rd中的字数据(32位)保存到addr所表示的内存地址中,同时还可以把合成的有效地址写回到基址寄存器。 地址addr可以是一个简单的值、一个偏移量,或者是一个被移位的偏移量。 寻址方式同LDR指令。
例如:
STR R0,[R1],#5;
R0中的字数据保存到以R1+5为地址的内存中,然后R1R1+5(如果是[人,#5]的话R1不变)

(时间太晚了,后面的就明天解决!还好常用的几个都解决了)

LDMFD

STMFD

MRS

MSR

SWI

MRC

MCR

【轴承故障诊断】加权多尺度字典学习模型(WMSDL)及其在轴承故障诊断上的应用(Matlab代码实现)内容概要:本文介绍了加权多尺度字典学习模型(WMSDL)在轴承故障诊断中的应用,并提供了基于Matlab的代码实现。该模型结合多尺度分析与字典学习技术,能够有效提取轴承振动信号中的故障特征,提升故障识别精度。文档重点阐述了WMSDL模型的理论基础、算法流程及其在实际故障诊断中的实施步骤,展示了其相较于传统方法在特征表达能力和诊断准确性方面的优势。同时,文中还提及该资源属于个涵盖多个科研方向的技术合集,包括智能优化算法、机器学习、信号处理、电力系统等多个领域的Matlab仿真案例。; 适合人群:具备定信号处理和机器学习基础,从事机械故障诊断、工业自动化、智能制造等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习并掌握加权多尺度字典学习模型的基本原理与实现方法;②将其应用于旋转机械的轴承故障特征提取与智能诊断;③结合实际工程数据复现算法,提升故障诊断系统的准确性和鲁棒性。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注字典学习的训练过程与多尺度分解的实现细节,同时可参考文中提到的其他相关技术(如VMD、CNN、BILSTM等)进行对比实验与算法优化。
【硕士论文复现】可再生能源发电与电动汽车的协同调度策略研究(Matlab代码实现)内容概要:本文档围绕“可再生能源发电与电动汽车的协同调度策略研究”展开,旨在通过Matlab代码复现硕士论文中的核心模型与算法,探讨可再生能源(如风电、光伏)与大规模电动汽车接入电网后的协同优化调度方法。研究重点包括考虑需求侧响应的多时间尺度调度、电动汽车集群有序充电优化、源荷不确定性建模及鲁棒优化方法的应用。文中提供了完整的Matlab实现代码与仿真模型,涵盖从场景生成、数学建模到求解算法(如NSGA-III、粒子群优化、ADMM等)的全过程,帮助读者深入理解微电网与智能电网中的能量管理机制。; 适合人群:具备定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、电动汽车等领域技术研发的工程人员。; 使用场景及目标:①用于复现和验证硕士论文中的协同调度模型;②支撑科研工作中关于可再生能源消纳、电动汽车V2G调度、需求响应机制等课题的算法开发与仿真验证;③作为教学案例辅助讲授能源互联网中的优化调度理论与实践。; 阅读建议:建议结合文档提供的网盘资源下载完整代码,按照目录顺序逐步学习各模块实现,重点关注模型构建逻辑与优化算法的Matlab实现细节,并通过修改参数进行仿真实验以加深理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值