ARM汇编的特点

以下内容源于网络资源的学习与整理,如有侵权请告知删除。

一、LDR/STR架构

ARM采用RISC架构,CPU本身不能直接读取内存,需要先将内存中的内容加载到CPU的通用寄存器中才能被CPU处理。换言之,寄存器是CPU和内存进行数据交换的中介。

通过ldr与str命令组合,可以实现CPU和内存数据交换。其中ldr(load register)指令将内存的内容加载到通用寄存器,str(store register)指令将寄存器的内容存入内存空间中。比如 ldr r0,[r1]  和 str r0,[r1],注意前者是向左,后者是向右。

注意,寄存器之间数据交换用mov指令,内存和寄存器之间用ldr和str指令。

二、寻址方式

(1)寄存器寻址

mov r1, r2     @把r2中的内容赋给r1

(2)立即数寻址

mov r0, #0xFF00   @#后面直接加数字,#表示后面的是数字,把0xFF00赋值给r0

(3)寄存器移位寻址

mov r0, r1, lsl #3   @把r1左移3位后,赋给r0

(4)寄存器间接寻址

 ldr r1, [r2]  @ r2寄存器中的内容是一个内存地址,[r2]表示该这个内存地址中的内容。@ 即r2相当指针,[r2]相当指针解引用。

(5)基址变址寻址

 ldr r1, [r2, #4]    @ r2存的内容是一个地址,该地址加上4,才是真正的地址

(6)多寄存器寻址

 ldmia r1!, {r2-r7, r12} @ r1相当于数组名,将以其为开始的内容,分别存入后面的寄存器中。

(7)堆栈寻址

 stmfd sp!, {r2-r7, lr}    @ 类似于上述

(8)相对寻址

beq flag @ flag表示标号,表示一个入口点。@ 因为用pc和相对偏移量,所以叫相对寻址。

三、指令后缀

同一指令可以附带不同后缀,其基本功能不变,但表示更多含义。

(1)B(byte),功能不变,操作长度变为8位。

(2)H(half word),功能不变,长度变为16位。

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

(4)S(S标志),功能不变,影响CPSR标志位。比如mov和movs:

movs r0, #0  @ 这指令会影响标志位:只要最后运算结果为0,那么z就会为1

四、条件后缀

(1)条件后缀是否成立,取决于该句代码的上一句代码的运行结果。如果成立,本句代码将得以执行,如果不成立,则忽略本句代码而去执行下一句代码。

mov r0,r1  @相当于C语言中的r0=r1
moveq r0,r1  @如果条件后缀eq成立,直接执行mov r0,r1;如果eq不成立则本句代码不执行@这个例子中,如果标志z=1,则该句代码执行

(2)下面是一些条件后缀列表。其中常用的是EQ和NE,如beq就是b和eq的组合。

五、多级指令流水线

为增加处理器指令流的速度,ARM使用多级流水线,下图为3级流水线工作原理示意图。

注意,PC指向正被取址的指令,而非正在执行的指令。这会影响中断返回的地址。

因为ARM模式下,3级流水线差2个周期,每个周期4个字节,所以差8个字节。 

六、伪指令与伪操作

1、伪指令

伪指令和汇编指令一样,在汇编的时候都会生成机器码。

它们的不同点在于汇编时,汇编指令只对应着一条机器码,伪指令可以对应着多条机器码,或者说一条伪指令对应着多条汇编指令。

ARM伪指令有LDR、ADR、ADRL和NOP,具体描述见博文ARM官方汇编指令_天糊土的博客。

2、伪操作

伪操作一般用来指导汇编器的汇编工作,本身不对应着任何机器码。

不同的汇编器对应的伪操作是不同的,这里讨论的伪操作是基于GNU汇编器而言的,GNU汇编器下的伪操作一般都用点号“.”作为开头。

3、宏指令

宏指令是由用户按照宏定义格式编写的一段代码,其中的语句可以是指令与伪指令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

持久代是方法区还是堆中的?

2019独角兽企业重金招聘Python工程师标准>>> 昨天跟一哥们讨论,持久代在方法区,属不属于堆中的? 它的意思是持久代不属于堆,属于方法区,而我则认为持久代属于方法区也属于堆。 结果今天上网一查,还真的是。下面是解释: 持久代”仅…

妈的我好像发现是哪出问题了

我不能被这个破玩意卡这么久。 今晚的第一个收获是,我在下载方法里面,获取了API写完了文件而且关闭了之后又加上了一段代码用来测试。 内容是打开刚刚写好的文件,把里面的内容打印到日志上,结果我发现不但文件存在,而且…

Web 前端攻防(2014版)-baidu ux前端研发部

http://fex.baidu.com/articles/page2/ Web 前端攻防(2014版) zjcqoo | 20 Jun 2014禁止一切外链资源 外链会产生站外请求,因此可以被利用实施 CSRF 攻击。 目前国内有大量路由器存在 CSRF 漏洞,其中相当部分用户使用默认的管理账…

plsqlnbsp;分页

select * from (select rownum rn,ps.* from (select * from user_t) ps ) where rn>1 and rn<10 //从第一页开始&#xff0c;第十行结束版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 转载于:https://www.cnblogs.com/jamesf/p/4751701.ht…

Silverlight动态设置WCF服务Endpoint

2013-02-02 05:57 by jv9, 1763 阅读, 3 评论, 收藏, 编辑 去年12月收到一位朋友的邮件&#xff0c;咨询Silverlight使用WCF服务&#xff0c;应用部署后一直无法访问的问题&#xff0c;通过几次交流&#xff0c;才发现在他的项目中&#xff0c;全部使用静态URL作为WCF服务的End…

SqlServer 的IDENTITY_INSERT设置为OFF问题

其实是表的主键设为GenerationType.AUTO 为自动写入 只要手动填写其他字段的值就可以&#xff0c;不需要写主键值&#xff08;否则不能添加数据&#xff09; 也可以尝试set IDENTITY_INSERT 表名 on 转载于:https://www.cnblogs.com/fengyu9/p/3620942.html

第6季2:基于RTSP协议的实时视频流传输的源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 前言 博文第一季2&#xff1a;HI3518EV200的初体验中&#xff0c;所提供的测试文件sample_venc实现了基于RTSP协议的实时视频流传输功能。当时直接提供了二进制文件&#xff0c;现在我们来分析其对…

安卓获取星期几

Date t new Date();int day t.getDay();switch (day) {case 0:break;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;}转载于:https://blog.51cto.com/luoguoxin/1613493

MemCached的telnet命令行参数

1、启动Memcache 常用参数 -p <num> 设置TCP端口号(默认不设置为: 11211) -U <num> UDP监听端口(默认: 11211, 0 时关闭) -l <ip_addr> 绑定地址(默认:所有都允许,无论内外网或者本机更换IP&#xff0c;有安全隐患&#xff0c;若设置为127.0.0.1…

Kernel Memory Layout on ARM Linux

这是内核自带的文档&#xff0c;讲解ARM芯片的内存是如何布局的&#xff01;比较简单&#xff0c;对于初学者可以看一下&#xff01;但要想深入理解Linux内存管理&#xff0c;建议还是找几本好书看看&#xff0c;如深入理解Linux虚拟内存&#xff0c;嵌入系统分析&#xff0c;L…

第4季3:Hi3518e的sensor接口引脚复用设置(load3518e文件)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 在第2、3季的内容中&#xff0c;在板载系统的配置脚本即/etc/profile文件中&#xff0c;都有如下这句代码&#xff1a; ./load3518e -i -sensor ar0130 -osmem 32 -total 64 在第4季1&#xff1a…

iOS游戏开发 几个有利工具

2019独角兽企业重金招聘Python工程师标准>>> iOS游戏开发 几个有利工具 本文介绍的是iOS游戏开发 几个有利工具&#xff0c;为友们介绍几款开发工具&#xff0c;游戏爱好者记住了&#xff01;先来看内容。 AD&#xff1a; iOS游戏开发 几个有利工具是本文要介绍的内…

关于editor网页编辑器ueditor.config.js 配置图片上传

最近公司项目在做一个门户网站&#xff0c;其中新闻和简介等部分使用到了ueditor编辑器&#xff0c;但是上级明确指示需要图片上传这个功能&#xff0c;这时却发现图片上传功能不能正常使用&#xff0c;上传时一直报错&#xff0c;网上收了好几个处理办法&#xff0c;都说的不够…

[歪谈]拽一个贵人出来给你当炮架子

[歪谈]拽一个贵人出来给你"当炮架子" 我们在古装神话剧中经常会听到某个“先知”对前来算命的人说&#xff1a;你会在某某时刻遇到你的贵人。而这个贵人会在事业上助你一臂之力。 这里有个问题&#xff1a;贵人到底是什么&#xff1f;我们怎样去寻找我们的贵人。 前几…

【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

1 LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr SS:SP&#xff01;&#xff01;&#xff01; 2 MOV ES:[BX2], SS ;将当前SS&#xff08;栈的基地址&#xff09;寄存器值存放至当前任务控制块的2&#xff0c;3内存单元 3 …

J2SE J2EE J2ME的区别

J2SE J2EE J2ME的区别 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能&#xff0c;在Java中&#xff0c;类库以包&#xff08;package&#xff09;的形式提供&#xff0c;不同版本的Java提供不同的包&#xff0c;以面向特定的应用。 Java2平台包括…

配置ssh

首先肯定要先更改ssh的端口号&#xff0c;比如&#xff1a;8899 以及安全选项 gedit /etc/ssh/sshd_configPermitRootLogin noMaxAuthTries 3AllowUsers ***** 更改Port参数 Port8899 然后更改services文件ssh端口号 gedit /etc/services 更改对应ssh的tcp和udp端口 都为8899 s…

第6季1:H264编码原理与基本概念

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 &#xff08;1&#xff09;H264 编码基本原理_ByteSaid的博客-CSDN博客_h264编码原理 &#xff08;2&#xff09;H264 编码简介_mydear_11000的博客-CSDN博客 &#xff08;3&#xff09;什么是I帧…

pureMVC简单示例及其原理讲解四(Controller层)

本节将讲述pureMVC示例中的Controller层。 Controller层有以下文件组成&#xff1a; AddUserCommand.asDeleteUserCommand.asModelPrepCommand.asViewPrepCommand.asStartupCommand.asAddUserCommand 。顾名思义&#xff0c;它是添加用户命令。让我们首先看看代码。 Addusercom…

ActiveMQ学习笔记(2)——JMS消息模型

2019独角兽企业重金招聘Python工程师标准>>> 1.1 JMS模型简介 JMS支持两种消息通信模型&#xff1a; 点对点模型(Point to Point&#xff0c;P2P)发布者/订阅者模型&#xff08;publish/subscribe&#xff0c; pub/sub&#xff09;P2P模型中&#xff0c;Sender把一…