LDR 和MOV 指令区别

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指令不是一个同东西
----------------------------------------------------------------------------------------------------------

LDR指令的格式:

LDR{条件}   目的寄存器     <存储器地址>

作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。

LDR指令的寻址方式比较灵活,实例如下:

LDR R0,[R1]                                                      ;将存储器地址为R1的字数据读入寄存器R0。

LDR R0,[R1,R2]                                             ;将存储器地址为R1+R2的字数据读入寄存器R0。

LDR R0,[R1,#8]                                             ;将存储器地址为R1+8的字数据读入寄存器R0。

LDR R0,[R1],R2                                               ;将存储器地址为R1的字数据读入寄存器R0,并将R1+R2的值存入R1。

LDR R0,[R1],#8                                               ;将存储器地址为R1的字数据读入寄存器R0,并将R1+8的值存入R1。

LDR R0,[R1,R2]!                                          ;将存储器地址为R1+R2的字数据读入寄存器R0,并将R1+R2的值存入R1。

LDR R0,[R1,LSL #3]                                   ;将存储器地址为R1*8的字数据读入寄存器R0。

LDR R0,[R1,R2,LSL #2]                         ;将存储器地址为R1+R2*4的字数据读入寄存器R0。

LDR R0,[R1,,R2,LSL #2]!                       ;将存储器地址为R1+R2*4的字数据读入寄存器R0,并将R1+R2*4的值存入R1。

LDR R0,[R1],R2,LSL #2                            ;将存储器地址为R1的字数据读入寄存器R0,并将R1+R2*4的值存入R1。

LDR R0,Label                                                ;Label为程序标号,Label必须是当前指令的-4~4KB范围内。

要注意的是

LDR Rd,[Rn],#0x04                                                              ;这里Rd不允许是R15。

另外LDRB 的指令格式与LDR相似,只不过它是将存储器地址中的8位(1个字节)读到目的寄存器中。

LDRH的指令格式也与LDR相似,它是将内存中的16位(半字)读到目的寄存器中。

LDR R0,=0xff

这里的LDR不是arm指令,而是伪指令。这个时候与MOVE很相似,只不过MOV指令后的立即数是有限制的。这个立即数必须是0X00-OXFF范围内的数经过偶数次右移得到的数,所以MOV用起来比较麻烦,因为有些数不那么容易看出来是否合法。

LDR 和MOV 指令区别相关推荐

  1. ARM立即数讲解--LDR和MOV的区别 .

    Mov 是把立即数赋给一个寄存器,但对立即数的范围有要求.只能是由8bit连续有效位通过偶数次移位能得到的数.如果立即数超出这个范围,就没办法用一条MOV指令给寄存器赋值. LDR除了普通的读数之外, ...

  2. ARM LDR与MOV的区别

    KG-MOV指令.LDR指令.LDR伪指令之间的区别 MOV指令.LDR指令.LDR伪指令之间的区别 作为一个扩展(KG),感觉这个东西还是有必要说说的~~ 在我编译一个工程的时候,用MOV指令编译有 ...

  3. LEA指令与MOV指令区别

    Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据        传送指令-------传送数据 LEA指令是   有效地址 传送指令-------取偏移地址 ② MOV OPRD1 ...

  4. ATT 汇编 lea 和 mov指令区别

    一.mov 指令 mov 8(%rax, %rax, 2), %rbx // rbx = M[3rax + 8] 8(%rax, %rax, 2) 表示内存地址为3rax + 8的内存值 为什么不直接 ...

  5. LDR伪指令和LDR指令及MOV指令的区别

    1.前言 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令. 2.LDR指令 就是将地址中的值存放到寄存器中 比如想把数据从内存中某处读取到寄存器中 ...

  6. MOV指令、LDR指令、LDR伪指令之间的区别(ARM立即数的存取)

    1.MOV指令 MOV指令可以把立即数或者寄存器内容(注意:这里绝对不可以是内存!!)传递给一个寄存器. 立即数相当于高级语言中的常量(常数), 立即数就是数字嘛,表示数值的数字, 存储器用的是地址, ...

  7. 2020-12-4((ARM汇编)mov指令,LDR指令,LDR伪指令)

    首先说明一下 ARM是RISC("reduced instruction set computer",即"精简指令集计算机")结构 x86是CISC(" ...

  8. arm汇编指令:ldr和adr的区别

    在分析uboot源码时,遇到adr.ldr指令,却分不清这2者的区别,网上很多解释含糊不清,现对adr与ldr指令做解释. 首先给出一段汇编代码: ldr r0, _startadr r0, _sta ...

  9. ARM LDR和ADR指令

    讲的比较好的一篇帖子,ADR和LDR区别的比较清除: LDR和ADR的区别 Load/Store指令 ARM属于RISC指令集,CPU无法对内存的数据进行直接操作,只能通过Load/Store指令来实 ...

最新文章

  1. ssl握手过程和ca证书验证
  2. 大学计算机基础 学年教学计划,大学计算机基础教学计划.pdf
  3. 【攻防世界019】SignIn
  4. 使用Github(仓库管理)
  5. Ubuntu 上不了网
  6. java 解析gson_使用Java和Google GSON解析ESPN API
  7. 基于Ubuntu使用docker的方式来搭建基于Yolo3+crnn的Chineseocr识别
  8. mysql临时表的的理解,如何理解存储过程中已存在的mysql临时表?
  9. easyui datagrid中添加右键菜单事件
  10. 数据库用户管理(增删改查,即CRUD)
  11. sqldf包的使用使用-R
  12. 【程序人生】程序员接私活常用平台汇总
  13. axios封装全局loading
  14. JS 创建HTML元素的方法
  15. 拍牌神器是怎样炼成的(二)--- 键鼠模拟之AutoIt
  16. 计算机毕业设计Android的手机点名签到学生请假考勤系统(源码+系统+mysql数据库+Lw文档)
  17. Docker编译安装httpd
  18. 人脸识别系统毕业设计,人脸识别签到毕业设计,人脸识别打卡毕业设计
  19. R语言︱SNA-社会关系网络 R语言实现专题(基础篇)(一)
  20. linux安装Oracle11g详细教程(redhat6、Centos7)

热门文章

  1. GRE作文开头结尾万能句式总结
  2. 【导航】矜辰所致的博客导航(所有博客的汇总帖,还有未来博文内容预告哦~)
  3. app图标角标产品设计_APP图标风格与创意设计的方法分享
  4. 小程序tabbar选中icon不显示
  5. lorawan的工作原理_LoRaWAN中继器技术原理
  6. IDEA使用svn进行代码分支合并
  7. 数据结构之树和二叉树的基本概念,二叉树遍历算法的实现
  8. 《宝贝,你听到了吗》歌词
  9. 【字符串】map练习
  10. MS2131 USB 3.0 高清音视频采集+HDMI 环出+混音处理芯片