个人总结,如有错误,欢迎纠正,谢谢!!!
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区别
推荐阅读最新更新时间: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只要将地址发送给存储控制器,由存储控制器
[单片机]
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中个寄
[单片机]
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
[单片机]
ARM的希望:两种嵌入式操作系统的比较
引言 随着现代计算机技术的飞速发展和互联网技术的广泛应用,从PC时代过渡到了以个人数字助理、手持个人电脑和信息家电为代表的3C(计算机、通信、消费电子)一体的后PC时代。后PC时代里,嵌入式系统扮演了越来越重要的角色,被广泛应用于信息电器、移动计算机设备、网络设备和工控仿真等领域。嵌入式系统的开发也成为近年IT行业的技术热点。 完成简单功能的嵌入式系统一般不需要操作系统,如以前许多MCS51系列单片机组成的小系统就只是利用软件实现简单的控制环路。但是随着所谓后PC时代的来临,嵌入式系统设计日趋复杂,嵌入式操作系统就必不可少了。 一般而言,嵌入式操作系统不同于一般意义的计算机操作系统,它有占用空间小、执行效率高、
[单片机]
ARM之异常
异常的介绍 概念 异常会导致处理器暂停程序执行以处理事件,例如外部生成的中断或试图执行未定义的指令。异常可以由内部和外部源生成,通常,当出现异常时,处理器状态会在处理异常之前立即保存。这意味着,当事件被处理后,可以从发生异常的地方恢复原始状态并恢复程序执行。 可能会同时生成多个异常,并且在处理器处理异常时可能会生成一个新的异常(异常也可以嵌套) 下图为ARM所用工作模式的介绍 他的中断又分为以下这些 我们4412的板子的异常向量表在0XFFFF 0000这个位置,所以我们首先要开启MMU,才可以去访问这个异常向量表,这时候我们就需要用到汇编来定义 .align 2 .text .global _start _s
[单片机]