ARM汇编语言中MOV MVN LDR区别

发布者:心怀感恩最新更新时间:2019-10-30 来源: 51hei关键字:ARM  汇编语言  MOV  MVN  LDR 手机看文章 扫描二维码
随时随地手机看文章

个人总结,如有错误,欢迎纠正,谢谢!!!


MOV指令可以完成从另一个寄存器,被移位的寄存器或将一个立即数加载到目的寄存器。

例如:

MOV  R1,     R0

MOV  R1,  R0,  LSL   #3

MOV  R1 ,    #3

但把立即数赋给一个寄存器,对立即数的范围有要求。只能是由8bit连续有效位通过偶

数次移位能得到的数。如果立即数超出这个范围,就没办法用一条MOV指令给寄存器赋值。

例如:

MOV   R0,    #0xFF

这条指令的意思是将0xFF这个立即数复制到R0寄存器中去,且MOV 指令只能将寄存器

中的数相互的复制。


MVN指令可以完成从另一个寄存器,被移位的寄存器或将一个立即数加载到目的寄存器。

与MOV指令不同之处传送之前按位取反了,即把一个被取反的值传送到目的寄存器中。

例如:

MVN  R0,  #0  //是将立即数0去反后传送给寄存器R0的。

这条指令的意思是将MOV指令不能操作的一些立即数进行操作!也是只能在寄存器中相互

复制。


ARM指令集中,LDR通常都是作为加载指令的,但是它也可以作伪指令。

LDR,STR作为加载指令, 用于寄存器和存储器之间的数据传输。一般用在寄存器间接寻址

或基址变址寻址。

例如:

LDR   R1,  [R0]    //寄存器间接寻址

LDR   R1,  [R0,#3]  //基址变址寻址


LDR 作为伪指令和ARM的LDR指令很像,但是作用不太一样。LDR伪指令可以在立即数前

加上=,以表示把一个地址写到某寄存器中。

LDR   R1,  =0xxxxx

当第二个操作数0xxxxx没有超过MOV或者MVN 第二个操作数的范围,就会将指令之间编

译成MOV    R1 ,    #0xxxxx或者MVN    R1 ,    #0xxxxx(取反后的值)


当第二个操作数0xxxxx超过MOV或者MVN 第二个操作数的范围,编译器将该常数放在数据缓冲区中,同时用一条基于PC的LDR指令读取该常数。但是LDR伪指令处到数据缓冲区(也叫做  文字池)的目标数据所在的地址偏移量一定要小于4KB,否则出错。这也是能不用

LDR伪指令就不用的原因。


关键字:ARM  汇编语言  MOV  MVN  LDR 引用地址:ARM汇编语言中MOV MVN LDR区别

上一篇:ARM的开发步骤:看后开发思路会比较清晰了
下一篇:ARM与嵌入式入门的建议

推荐阅读最新更新时间:2024-11-12 19:14

ARM、飞思卡尔和IBM联手推出物联网开发套件
日前,ARM联合飞思卡尔及IBM,共同开发了一套专供物联网的开发套件。套件基于mbed开发平台,提供开发板、软件和控制板的全套产品,软件包括了完整的IBM Bluemix云平台,提供包括数据存储、网页寄存、分析以及移动资源等。 ARM物联网市场部副总裁Zach Shelby表示: 这款产品非常适合入门级学习,它为云连接的物联网提供了一个交钥匙方案,让初学者尽快的尝试物联网的创意,开发者应该专注于应用程序而不是繁琐的网络连接问题。 当该套件连网后,会自动连接其专属页面,并开始上传传感器数据。 开发板采用的是飞思卡尔Freedom系列开发板,此外有一个包含一个操纵杆,两个分压器、一个三轴加速度计和一个温度传感器的
[物联网]
ARM学习笔记】三、S3C2440A的存储控制器及启动过程
存储控制器 S3C2440A是32位处理器,理论上拥有32根地址线,寻址空间0x00000000~0xFFFFFFFF,即4G 而实际上,S3C2440A只拥有27根地址线,实际物理寻址空间为0x00000000~0x07FFFFFF,即128MB 除了这27根地址线,S3C2440A还对外引出了8根片选信号线,这样组合起来就能达到1G的物理寻址空间,即0x00000000~0x3FFFFFFF 每一块称为一个BANK,每一块都有128MB,共有BANK0~BANK7,其中BANK0、BANK6、BANK7比较特殊。 为了便于使用,S3C2440A拥有独立的存储控制器,这样,CPU只要将地址发送给存储控制器,由存储控制器
[单片机]
【<font color='red'>ARM</font>学习笔记】三、S3C2440A的存储控制器及启动过程
ARM之汇编与C混合编程
于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,详细内容可以查看ADS1.2 Online Books ——Developer Guide的2.1节。这篇文档要讲的是 汇编代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。 不同于x86的参数传递规则,ATPCS建议函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4,大于4的部分必须通过堆栈进行传递。 ATPCS中个寄
[单片机]
<font color='red'>ARM</font>之汇编与C混合编程
ARM-Linux移植之(一)——内核启动流程分析
内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少。 内核启动分为三个阶段,第一是运行head.S文件和head-common.S,第三个阶段是允许第二是运行main.c文件 对于ARM的处理器,内核第一个启动的文件是arc/arm/kernel下面的head.S文件。当然arc/arm/boot/compress下面也有这个文件,这个文件和上面的文件略有不同,当要生成压缩的内核时zImage时,启动的是后者,后者与前者不同的时,它前面的代码是做自解压的,后面的代码都相同。我们这里这分析arc/arm
[单片机]
arm 力天电子lpc2148无字库12864显示一行多个汉字(串行)
力天电子lpc2148开发板中配的12864小屏是不带字库的,并且没有所谓的左右屏,上下屏之分,是一个整屏.(是北京集粹电子设备有限公司生产的,资料详见 http://download.csdn.net/detail/yueniaoshi/4508801 此资料是12864的数据手册 http://download.csdn.net/detail/yueniaoshi/4507741 此资料介绍的12864的更进一步介绍 http://download.csdn.net/detail/yueniaoshi/4507754 此资料介绍的是驱动函数 http://download.csdn.net/detail/yue
[单片机]
<font color='red'>arm</font> 力天电子lpc2148无字库12864显示一行多个汉字(串行)
ARM的希望:两种嵌入式操作系统的比较
引言   随着现代计算机技术的飞速发展和互联网技术的广泛应用,从PC时代过渡到了以个人数字助理、手持个人电脑和信息家电为代表的3C(计算机、通信、消费电子)一体的后PC时代。后PC时代里,嵌入式系统扮演了越来越重要的角色,被广泛应用于信息电器、移动计算机设备、网络设备和工控仿真等领域。嵌入式系统的开发也成为近年IT行业的技术热点。   完成简单功能的嵌入式系统一般不需要操作系统,如以前许多MCS51系列单片机组成的小系统就只是利用软件实现简单的控制环路。但是随着所谓后PC时代的来临,嵌入式系统设计日趋复杂,嵌入式操作系统就必不可少了。   一般而言,嵌入式操作系统不同于一般意义的计算机操作系统,它有占用空间小、执行效率高、
[单片机]
ARM之异常
异常的介绍 概念 异常会导致处理器暂停程序执行以处理事件,例如外部生成的中断或试图执行未定义的指令。异常可以由内部和外部源生成,通常,当出现异常时,处理器状态会在处理异常之前立即保存。这意味着,当事件被处理后,可以从发生异常的地方恢复原始状态并恢复程序执行。 可能会同时生成多个异常,并且在处理器处理异常时可能会生成一个新的异常(异常也可以嵌套) 下图为ARM所用工作模式的介绍 他的中断又分为以下这些 我们4412的板子的异常向量表在0XFFFF 0000这个位置,所以我们首先要开启MMU,才可以去访问这个异常向量表,这时候我们就需要用到汇编来定义 .align 2 .text .global _start _s
[单片机]
<font color='red'>ARM</font>之异常
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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