ARM中的MOV指令格式是这样的
op2是占了12位,其中bit11-bit8是移位数(rotate),bit7-0是一个8位的立即数(imm),MOV Rn, op2,执行之后,Rn=op2 >> (rotate * 2),这里的移位是循环右移,这就决定了MOV指令不是所有的立即数都能表示的,以下是几个例子:
1、mov r3, #0x56000000
虽然0x56000000是一个32位的数,但是可以找到这么一个8位立即数,通过右移得到,看下机器码e3a03456,展开成二进制,对照下格式
1110 0011 1010 0000 0011 0100 0101 0110
cond[31:28]=1110
[27:26]=00
L[25]=1,代表op2是一个立即数
OpCode[24:21]=1101
S[20]=0
Rn[19:16]=0000
Rd[15:12]=0011,R3
Op2[11:8]=0100,右移4 * 2位
Op2[7:0]=0101 0110,8位立即数,0x56
首先要将0x56扩展成32位的无符号数,0x00000056,然后循环右移8位,就得到了0x56000000
2、mov r3, #0x56000014
0x56000014是无法通过移位来得到的,这时编译器会报错,C语言编写的程序,编译器会这样来处理:
mov r3, #0x56000000
add r3, r3, #0x14
代替mov的另外一条指令就是ldr,或许会更方便点。
看了2440的datasheet,最令人费解的就是rotate了,习惯了C语言里的逻辑右移,把循环右移和逻辑右移混淆了。
关键字:ARM中 MOV指令
引用地址:
ARM中的MOV指令
推荐阅读最新更新时间:2024-03-16 14:53
单片机指令MOV、MOVC、MOVX的区别与联系
这三条都是单片机内数据传送指令。但是它们操作的对象有所不同。 1、MOV:MOV是内部数据传送指令,什么是内部数据传送呢?就是寄存器之间、寄存器与通用存储区之间的数据传送。 2、MOVX:MOVX是外部数据存储器(外部RAM)与累加器A之间的数据传送指令。因为内部与外部的RAM地址有重叠现象,所以需要用不 同的指令予以区分。 3、MOVC:MOVC是累加器与程序存储区之间的数据传送指令。它比MOV指令多了一个字母 C ,这个 C 就是 Code 的意思,翻译过来就是 代码 的意思,就是代码区(程序存储区)与A之间的数据传送指令。它可以用于内部程序存储区(内部ROM)与A之间的数据传送,也可以 用于外部程序存储区(外部ROM)与
[单片机]
arm汇编中ldr、str、stm、ldm的用法
这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令,关于LDM和STM的说明,见另外一个说明文件,说明了这两个文件用于栈操作时的注意事项。 (1)LDR:L表示LOAD,LOAD的含义应该理解为:Load from memory into register。下面这条语句就说明的很清楚: LDR R1, R1 就是把R2所指向的存储单元的内容的值(一个memory地址内的值),读取到R1中(一个register) (2)STR:S表示STORE,STORE的含义应该理解为:Store from a register into memory
[单片机]
ARM9系列嵌入式处理器S3C2410系统中LCD驱动开发
本文以三星公司ARM9内核芯片S3C2410的LCD接口为基础,介绍了在Linux平台上开发嵌入式LCD驱动程序的一般方法。 本文硬件采用三星公司的S3C2410芯片的开发板,软件采用Linux 2.4.19平台,编译器为arm-linux-gcc的交叉编译器,使用640×480分辨率的TFT彩色LCD,通过对其Linux驱动程序进行改写和调试,成功地实现了对该种屏的驱动和显示。 嵌入式驱动的概念 设备驱动程序是操作系统内核和机器硬件之间的接口,设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,
[单片机]
嵌入式系统设计中ARM仿真器的作用
本文提供了一些关于在线 ARM 仿真器的信息,以及给作为嵌入式系统设计师的你带来的好处。根据你的需要,你将在产品开发中对开发工具作出更恰当的选择。 一、嵌入式产品的开发周期 典型的嵌入式微控制器开发项目的第一个阶段是用C编译器从源程序生成目标代码,生成的目标代码将包括物理地址和一些调试信息。目前代码可以用软件模拟器、目标Monitor或在线仿真器来执行和调试。软件模拟器是在PC机或工作站平台上,以其CPU(如x86)及其系统资源来模拟目标CPU(如P51XA),并执行用户的目标代码;而目标Monitor则是将生成的目标代码下载到用户目标板的程序存储器中,并在下载的代码中增加一个Monitor任务软件,用来监视和控制用户
[单片机]
ARM内核目标系统中的代码运行时间测试方法
在ARM系统中,有时需要精确的时间测量。通常,取时间的C函数(如gettime()等)不仅通用性差(必须包含头文件DOS.H,且不支持Unix、Linux和标准C),明显不适用于ARM系统 ;更成问题的是,其最短时间只能到10-2 秒级,不能提供更短的时间分度。根本原因在于: 这类函数是基于系统实时时钟(RTC)的,而RTC通常采用标准化钟表晶振,频率只有32.768 kHz而已 。 然而很多应用涉及μs级的时间计量,这是标准化了的RTC以及基于它的时间函数所无能为力的。笔者在移植DES算法到ARM系统的实验过程中,便遇到过要定量评估加密算法耗时多少的问题,发现的确不能用上述常规的C函数解决。经对ARM芯片结构的考察,发
[单片机]
ARM中的特殊寄存器
SP(R13) 特殊寄存器 LR(R14) 1、当存在子程序时,保存有子程序的返回地址 2、当异常中断发生时,保存有异常模式的返回地址 PC(R15) 保存程序的当前地址 例 :(bootloader中start.S文件) reset: bl set_svc @设定svc模式,bl跳转至相应分支 bl disable_watchdog @关闭开门狗 set_sv mrs r0, cpsr @Current Program Status Register(CPSR)当前程序状态寄存器 ,mrs(move register from special register)
[单片机]
ARM中的CACHE机制
ARM cache架构由cache存储器和写缓冲器(write-buffer)组成,其中写缓冲器是CACHE按照FIFO原则向主存写的缓冲处理器。下图是ARM V5核的CACHE位置 Cache 位于MMU前面靠近CPU称为逻辑CACHE又叫虚拟Cache。CPU可以直接访问CACHE的数据,而ARM 11(ARMV6)的结构是CACHE 在MMU后面CPU访问CACHE要通过MMU地址转换 在DM6446的core用的是哈佛结构,即把CACHE分为8K的D-CACHE(数据CACHE)和16K的I-cache(指令CACHE) 一个完整的CACHE分为CACHE控制器和CACHE存储器 见下图: Davin
[单片机]
ARM中基于DMA的高效UART通讯及其应用
1、引言 由于UART串行口的广泛应用,在传统的8位和16位的处理器以及32位处理器中,一般都带有UART串行口。传统的基于UART的数据通讯中,采用的方式一般有两种,查询式和中断式。查询方式下CPU的负担较重,浪费了处理器的能力,不能够很好的处理其他的事件;中断方式可以在接收到信息或需要发送数据时产生中断,在中断服务程序中完成数据的接收与发送。相对于查询方式,中断方式的CPU利用率要高。在CPU任务简单的系统中,使用中断方式确实是一种好方法。但是在复杂的系统中,比如移动机器人,处理器需要处理串行口通信,多个传感器数据的采集以及处理,实时轨迹的生成,运动轨迹插补以及位置闭环控制等等任务,牵扯到多个中断的优先级分配问题。为了保证数
[单片机]