Mov 是把立即数赋给一个寄存器,但对立即数的范围有要求。只能是由8bit连续有效位通过偶数次移位能得到的数。如果立即数超出这个范围,就没办法用一条MOV指令给寄存器赋值。
LDR除了普通的读数之外,也有给寄存器赋立即数的功能。
你只要写 LDR R0,=0xabcdef
它没有立即数范围的限制。因为这是一条伪指令。如果立即数在MOV的要求内,那就用一条汇编来实现。如果不在Mov的范围内,就用其它方式实现,如变成两条指令,或从PC偏移地址读一个32位数给寄存器。
MOV是从一个寄存器或者移位的寄存器或者立即数的值传递到另外一个寄存器
从本质上是寄存器到寄存器的传递,为什么会有立即数,其实也是有限制的立即数,不是所有立即数都可以传递的
这个立即数要符合一个8位数循环右移偶数位的取值
原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值x2),8bit用来表示要移位的一个基数。
还有一点是关于ldr的,其实ldr可以装载一个32bit立即数的说法并不确切,因为实际上并不是这一条语句装载了一个32bit立即数,比如
ldr r1, =0x12345678
其实真正的汇编代码是将某个地址的值传递给r1,就是说需要一个地址存放0x12345678这个立即数,实际上可以看作是一条伪指令
而且如果这个立即数可以用mov指令的形式来表达,会被编译器实际用mov来代替
比如:
ldr r1,=0x10
会变成
mov r1,#0x10
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。想把数据从内存中某处读取到寄存器中,只能使用ldr。比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。
而mov不能干这个活,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,这个和x86这种CISC架构的芯片区别最大的地方。 x86中没有ldr这种指令,因为x86的mov指令可以将数据从内存中移动到寄存器中。
另外还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:
ldr r0, =0x12345678
这样,就把0x12345678这个地址写到r0中了。所以,ldr伪指令和mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。
ldr伪指令和ldr指令不是一个同东西。
关键字:ARM 立即数 LDR MOV
引用地址:
ARM立即数讲解LDR和MOV的区别 .
推荐阅读最新更新时间:2024-03-16 14:53
ARM Linux根文件系统(Root Filesystem)的制作
简介:介绍根文件系统的组成:目录、Shell、库、脚本。 目录 根文件系统要包含这些必须有的目录:/dev、/bin、/usr、/sbin、/lib、/etc、/proc、/sys /dev是devfs(设备文件系统)或者udev的挂在点所在。在使用devfs的内核里如果没有/dev,根本见不到Shell启动的信息,因为内核找不到/dev/console;在使用udev的系统里,也事先需要在/dev下建立console和null这两个节点。关于devfs和udev的区别,网上很多文章说。当然如果你的内核已经不支持devfs了(2.6.12以后),可以使用纯纯的静态节点。也就是用mknod人工生成。 /bin、/usr/
[单片机]
ARM裸机开发bootloader—点亮LED灯
1、编写LED驱动的流程 a、原理图分析 b、芯片手册 c、思维导图 d、编写代码 2、为什么要点亮led 在嵌入式软件(bootloader、kernel)开发初期,由于串口等硬件尚未进行初始化,所以可以用来调试的手段很有限。这时通常运用点亮led作为调试的重要手段。也就是说不断改动led点亮程序的位置,来查看那段代码出现了问题,然后进行针对性的修改。 下面我用6410为例进行点亮led的介绍,其他的如2440和210流程相似。 a、原理图分析 从led的原理图我们可以看到,nLED_*低电平有效,也就是对应的s3c6410GPK4-7低电平,这个时候要引出一个概念:GPIO 什么是GPIO GP
[单片机]
曾联合Arm成立芯擎科技,亿咖通科技获百度领投13亿元融资
10月26日,亿咖通科技宣布完成A轮融资,融资额13亿人民币,投后估值过百亿人民币。 本轮由百度领投,海纳亚洲创投(SIG)跟投,各方将为亿咖通科技快速发展提供全面资源协同,聚焦汽车智能化核心技术。 本轮融资资金将用于持续深耕汽车芯片产品,投入高精度地图、自动驾驶技术研发,推进公司国际化进程。预计2020年底,亿咖通科技将正式成立欧洲研发中心,面向欧美市场提供技术及平台服务能力;在汽车芯片方面,也已围绕智能座舱、自动驾驶、微控制器等产品领域,制定完善的产品战略及量产研发计划。 亿咖通科技是吉利控股集团战略投资、独立运营的汽车智能化科技公司,聚焦汽车芯片、智能座舱、智能驾驶、高精度地图、大数据及车联网云平台等核心技术产品。 20
[手机便携]
恩智浦将ARM Cortex-M0引入DALI和DMX512照明控制系统
中国上海,2012年5月28日讯 —— 恩智浦半导体NXP Semiconductors N.V.(纳斯达克:NXPI)近日发布了业界第一个基于低成本、低功耗32位ARM® Cortex™-M0处理器的DALI和DMX512有线照明控制系统开发平台。此新型评估系统使用恩智浦LPC1100XL系列微控制器,旨在解决使用DALI和DMX的智能照明项目的通信要求。此外,DMX512系统内置的主控制板使用基于Cortex-M0、高度灵活的USB微控制器LPC11U00。在即将到来的2012广州国际照明展览会上(6月9日至12日),恩智浦将在展台(13.2 展厅B43)展出使用DALI和DMX的一款单独系统。恩智浦参展广州国际照明展的详情请
[电源管理]
ARM指令集----杂项指令
ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load、Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种是直接向PC寄存器写入目标地址的值 通过直接向PC寄存器写入目标寄存器的数字可以实现在4GB 地址空间的任意跳转,这种跳转又称为长跳转,如果在残肢令前面使用MOV LR,PC等指令,可以保存返回来的地址值,这样就实现了在4GB空间中的子程序调用 ARM的跳转指令可以从当前指令向前或者是向后的32位的地址进行空间跳转,这类跳转指令有一下4种 B 跳转指令 BL带换回的跳转指令 BLX 带返回的跳转和切换指令
[单片机]
OpenCV答题卡识别模拟-测评米尔ARM+FPGA异构开发板
前言 米尔基于ARM+FPGA异构开发板的SDK发布说明 米尔基于ARM+FPGA异构开发板,根据下图文件内容可以知道myir-image-full系统支持的功能,其支持OpenCV,也就不用在格外安装相关驱动包等,省了很多事情。 02. 米尔基于ARM+FPGA异构开发板软件评估指南 本文介绍了Python的基本操作,在文档中10.1开发语言支持。 03.米尔基于ARM+FPGA开发板历程路径 /usr/share/OpenCV/samples//usr/share/opencv4/samples/python/ 文件目录中有一些python程序。 04.米尔基于ARM+FPGA开
[嵌入式]
ARM的体系结构与编程系列博客——ARM体系变种
ARM体系变种的简介 有人会很奇怪一件事情,ARM居然会变种,不会是基因突变了吧,呵呵,其实ARM变种通俗一点来讲呢,就是ARM突然具备了一种特定的功能!并非是基因突变哦!ARM是reboot好不好? 回到顶部 ARM体系变种 首先让我们通过一个表格来看看ARM变种。了解ARM变种涉及到了什么! 现在让我来为大家解释一下这张图: ARMv你就不用去管它了 v后面对应的是ARM指令集的版本号 有x呢,表示排除某项功能 要说的是自版本4之后M变种就为标准功能了,不再列出了! 那么这个就是ARM/Thumb的命名格式啦!不要着急还不了解什么ARM体系变种,且听我细细道来! T变种 t变种的全名——Thumb指令集,
[单片机]
基于ARM的嵌入式SMTP远程控制设计
随着WWW 的不断发展,人们对以IP 网络为基础的Internet 应用提出了更高的需求,将来的Internet 必将实现“利用IP 技术传输控制行为(AcTIon over IP)”。在工业控制领域怎样实现仪器仪表的远程数据采集,实现异构网络互连及远程监控成为技术的关键。因此需要一种合理的通讯模式来实现数据的远程传输 。
在本课题中,通过SMTP协议的方式提供了一种新的嵌入式远程通讯模式。即在ARM处理器中实现SMTP协议,并通过双绞线连接到Internet上。在该平台上开发的远程控制设备或仪器仪表实现了通过Internet进行数据的远程传输,在任意一台上网的计算机上都可以通过Internet对其进行远程监视和控制。
[嵌入式]