嵌入式开发学习(3)

发布者:Serendipity22最新更新时间:2024-11-19 来源: cnblogs关键字:ARM 手机看文章 扫描二维码
随时随地手机看文章

汇编指令分为指令和伪指令

指令:针对于CPU设计的指令。作用在CPU上。

伪指令:针对于编译器设计的指令。作用在编译器上,用来知道编译过程,经过编译后伪指令最终不会生成机器码。要知道,汇编指令是机器指令的助记符,最终要通过编译器翻译成CPU能直接识别的由01组成的代码(机器码)。

LDR/STR架构:

ARM采用RISC架构,CPU不能直接操作内存中的内容,而需要先将内存中的内容加载到CPU中的通用寄存器中才能被CPU处理。

LDR(load register)指令将内存中的内容加载的通用寄存器中。

STR(store register)指令与LDR指令相反,将寄存器中的内容存入到内存中。

CPU通过LDR指令和STR指令实现内存与寄存器之间的数据交换。

ARM的八种寻址方式:

1、寄存器寻址 直接用寄存器名称操作数据,与内存地址无关。如:MOV r1,r2 相当于mysql 的set r1=r2,即把r2寄存器的内容赋值给r1寄存器。

2、立即寻址 数据与寄存器之间内容传送。如MOV r0,#0xFF00 ,把16进制的数据0xFF00赋值给r0寄存器,相当于mysql的set r1=0xFF00,加#表示0xFF00是一个数字,不是地址。

3、寄存器移位寻址  数据在寄存器之间赋值的过程中还带有移位运算。如MOV r0,r1 lsl#3,把r1寄存器里的内容左移三位后再赋值给r0寄存器,lsl是左移指令。

4、寄存器间接寻址 寄存器与内存之间的数据操作。如MOV r1,[r2],将r2寄存器里所存地址的里的内容赋值给r1寄存器,r2寄存器类似于与c语言里的指针,存放的是内存的地址。中括号[]相当于c语言指针的取值运算。

5、基址变址寻址 在通过寄存器访问内存地址的时候还带有地址的移位。如ldr r1,[r2,#4] ,将r2寄存器里存放的地址+4后再取其内容赋值只给r1寄存器,是基于上一种寻址方式演变而来。

6、多寄存器寻址 从内存往寄存器加载内容。如ldmia r1!,{r2-r7,r12},将起始地址为r1寄存器所存的地址的后n个地址的内容对应的赋值给{}里对应的寄存器,n的大小取决于{}里寄存器数量。

7、堆栈寻址 从堆栈往寄存器加载内容。如stmfd sp!,{r2-r7,lr},跟上一种寻址非常类似,只不过这种的起始地址不是普通的寄存器里存放的地址,而是堆栈指针sp里存放的地址。stmfd 进栈,sdmfd 出栈。

8、相对寻址 与基址变址方式相类似。相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。如BL haha,BL是跳转指令,haha是程序中的一个标记点,相当于javaScipt中锚点跳转的锚点。

指令后缀:同一指令加上不同的后缀,变成了不同的指令。常用的后缀有:

B后缀(byte) 功能不变,操作长度变成8位。ARM默认处理的32位。

H后缀(half word)功能不变,操作长度变为16位。

S后缀 (signed)功能不变,操作数变为有符号。

如ldr指令,加载指令。从内存的加载四个字节到寄存器。衍生出来的指令有 ldrb(加载一个字节)、ldrh(加载两个字节)、ldrsb(加载一个有符号字节),ldrsh(加载两个有符号字节)。

S后缀(S标志)功能不变,影响CPSR标志位,一般用在数据传输指令,如MOV,MOV r1,#0 ,将数字0赋值给r1寄存器,不会影响CPSR里的零标志位,如果写成MOVS r1,#0,将会影响。

条件执行后缀:

先介绍一下CPRS程序状态寄存器的条件位:

N (negative)运算结果负标志位。Z(zero)运算结果是零。C(carried out)运算中有进位。V(verflowed)运算中有溢出,当条件成立时为1。

 如MOV r1,r0,写成条件执行指令为 MOVEQ r1,r0,表示如果上一条指令的执行结果使得CPSP(程序状态)寄存器的条件位Z(运算结果是零)的零标志位为1,则执行这条条件指令,否则不执行。

特点:条件后缀是否成立,取决于上一条语句或语句块所执行的结果。条件后缀只决定本句语句是否执行。


关键字:ARM 引用地址:嵌入式开发学习(3)

上一篇:嵌入式开发学习(1)
下一篇:嵌入式开发学习(4)

推荐阅读最新更新时间:2026-03-24 10:25

嵌入式开发学习(4)<ARM汇编指令集详解>
数据传送指令:   MOV 两个寄存器之间传递。例 MOV r1,r0,将寄存器r0中的内容赋值给r1。   MVN 同MOV用法一样,区别是MOV是原值传递,而MVN是按位取反后传递。 算数运算指令:   ADD SUB RSB ADC SBC RSC 逻辑指令:   AND ORR EOR BIC   BIC的用法:BIC r0,r1,#0x1f,将r1中的数的bit0到bit4清零后赋值给r0;为什么是bit0到bit4呢,这个是由#0x1f来决定,#0x1f有五个bit位是1。如写成#0xf,就有四个bit位是0。 比较指令:   CMP CMN TST TEQ 比较指令用来比较两个寄存器中的数。特点:比较指令不用后加S后
[单片机]
学习嵌入式开发ARM的方法
1、嵌入式是什么?   2、嵌入式需要哪些知识?      知道了这两点,好办!我就开始规划学习路线。计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统、c++.同时论坛上了解到,实时操作系 统ucos是一个很好的嵌入式操作系统,对初学者很好。于是我就买了一本书,但是代码在电脑里调不通,网上也有很多相同的问题,我就看书,分析代码,一遍 不行就两遍,三遍,这样才看了入了门,才知道什么是进程。原来看操作系统书时,根本就不知道进程是个什么东西。在这段时间掌握的东西不多,但是,对我以后 的影响很大,我想起了大学时一个同学跟我说过了一句话:大学里最重要的不是学到了什么,最重要的是学会怎么学!大概是这个意思。     学习嵌入式
[单片机]
初学嵌入式开发ARM学习方法
  这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸!     工作三年、几成废人!     我2000年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入it的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交4000元的违约金,对我来说是天文数字。大学里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的
[单片机]
嵌入式开发学习(10)<汇编写启动代码之设置栈、调用c语言、开关看门狗和开关iCache>
C语言运行时需要和栈的意义: “C语言运行时(runtime)”需要一定的条件,这些条件由汇编来提供。C语言运行时主要是需要栈 C语言与栈的关系:C语言中的局部变量都是用栈来实现的。如果我们汇编部分没有给C部分预先设置合理合法的栈地址,那么C代码中定义的局部变量就会落空,整个程序就死掉了。 我们平时在编写单片机程序(譬如51单片机)或者编写应用程序时并没有去设置栈,但是C程序还是可以运行的。原因是:在单片机中由硬件初始化时提供了一个默认可用的栈,在应用程序中我们编写的C程序其实并不是全部,编译器(gcc)在链接的时候会帮我们自动添加一个头,这个头就是一段引导我们的C程序能够执行的一段汇编实现的代码,这个代码中就帮我们的C程序设
[单片机]
<font color='red'>嵌入式开发</font><font color='red'>学习</font>(10)<汇编写启动代码之设置栈、调用c语言、开关看门狗和开关iCache>
嵌入式开发学习(6)
刷系统:利用刷机工具,向开发板中烧录预先编译好的镜像。使之在开发板上跑起来。 一、刷android4.0.4   S5PV210厂家默认安装的是android4.0.4。   1、安装usb转串口驱动(如果电脑上有串口,则跳过这一步)。   2、安装串口监听软件:secureCRT、超级终端、minicom(linux系统),我使用的cecureCRT。注意   3、打开secureCRT软件,按下图设置:(注意端口要与串口端口一致)      4、用串口线连接电脑与开发板。   5、打开开发板电源,可以看到secureCRT中有启动新输出,这就是开发板的控制台,可以使用linux命令操作你的开发板系统。      6、破坏开
[单片机]
<font color='red'>嵌入式开发</font><font color='red'>学习</font>(6)<S5PV210开发板刷系统那点破事儿之二>
4412嵌入式开发学习笔记(一)
新手在进行开发学习前,建议先看01-迅为电子开发板入门视频。对开发板和开发环境有一定的了解后,不要盲目接线开机。以下是个人的一点经验,和大家分享一下。 补充:这是第一份笔记,主要是提供给刚拿到板子的同学,2、3分钟就可以看完,避免你走歪路。实际上视频上都有,我只是整理了一下。之后我大概不定期会陆续上传一些我的学习笔记分享给大家,希望大家可以给出建议。以后可以的话会整理一下,打包上传,也给后来学习的人一个参考,方便大家共勉。 注:我使用的是4412精英版+7寸屏+SCP封装+2G内存+16G闪存。其他版本可能会有一点点区别,但不影响学习。 一、开机前检查: 1.电源适配器(5V/2A):插到图上左下角POWER
[单片机]
4412<font color='red'>嵌入式开发</font>板<font color='red'>学习</font>笔记(一)
CES 2026 开幕,Arm 引领五大技术趋势
随着物理 AI 与边缘 AI 的应用日益成熟,盘点 2026 年国际消费电子展的现场亮点 2025 年是人工智能 (AI) 发展的关键转折点。曾经尚处实验探索阶段的技术,如今已全面落地于汽车、消费电子、智能家居系统以及新一代机器人领域。2026 年国际消费电子展 (CES 2026) 恰逢行业关键节点——智能系统正朝着更智能、更快速的方向演进,并加速融入人们的日常生活。 在今年的 CES 上,以下趋势将成为 AI 领域发展的核心动能: 物理 AI:汽车、机器人及各类设备可感知、理解现实环境,并在实际场景中安全可靠地运行; 边缘 AI:智能持续向用户端迁移,驱动日常设备实现更快速、更私密、更个性化的体验; 部分场景
[嵌入式]
深入解析Arm Neoverse计算平台的技术架构与性能优势
十年前,云基础设施主要承担Web应用和企业级工作负载,其性能与功耗相对稳定且可预测;如今,云基础设施必须应对多样化工作负载的规模化扩展,保障多租户环境的安全,并将计算能力从数据中心延伸至数据产生的源头。 如今的云平台在全球各地运行,AI 工作负载对内存带宽和性能提出了更高的要求;与此同时,分布式系统使算力更加接近于用户和设备,而运营商则面临提升能效比、加强架构安全性、缩短部署时间的多重压力。 基础设施正朝着分布式、软件定义和 AI 赋能的方向演进,必须在固定功耗与成本限制内,实现高性能,并高效扩展。这正是 Neoverse 平台诞生的使命。 详解 Arm Neoverse 平台 Arm Neoverse 平台是一系
[单片机]
深入解析<font color='red'>Arm</font> Neoverse计算平台的技术架构与性能优势
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved