LDR(load register)指令将内存内容加载入通用寄存器

STR(store register)指令将寄存器内容存入内存空间中

 #define GPJ0CON 0xE0200240

 _start:

  ldr r0, =0x11111111  // 将立即数/非法立即数,赋值给r0

  ldr r1, =GPJ0CON // 将GPJ0CON的地址赋给r1

  str r0, [r1] // 寄存器间接寻址。把r0中的数写入到r1中的数为地址的内存中去

  ldr r0,[r1] //将r1的值赋给r0,ARM是RISC结构,数据从内存到CPU之间的移动只能通过LDR/STR指令来完成。 但想把数据从内存中某处读取到寄存器,
           只能使用ldr ,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,如 MOV r0,#0是将立即数0放到r0中

1、LDR与MOV的不同:ldr能将数据从内存读到CPU,或者从内存中某处读取到寄存器中,而mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,如 MOV r0,#0是将立即数0放到r0中;

2、MOV是从一个寄存器或者移位的寄存器或者立即数的值传递到另外一个寄存器。但不是所有立即数都可以传递的,这个立即数要符合一个8位数循环右移偶数位的取值。 原因是,MOV本身就是一条32bit指令,除了指令码本身,它不可能再带一个可以表示32bit的数字,所以用了其中的12bit来表示立即数,其中4bit表示移位的位数(循环右移,且数值乘以2),8bit用来表示要移位的一个基数。而对于ldr伪指令,可以在立即数前加上=,以表示把一个地址写到某寄存器中,比如:  ldr r0, =0x12345678  这样,就把0x12345678这个地址写到r0中了。ldr伪指令和mov是比较相似,但mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为 mov指令的。

3、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、STR指令的更多相关文章

  1. ARMv7 ldr/str指令详解

    因为ARM的算术运算不支持直接操作内存地址,所以要把内存里的数据先加载进寄存器.ldr指令就是干这事的,称为间接取址模式. 一共有3*3九种模式,先是直接偏移,先偏移,后偏移三大类,指的是如何对源操作 ...

  2. mov和ldr/str的区别

    ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...

  3. arm汇编:ldr,str,ldm,stm,伪指令ldr

    ldr,str,ldm,stm的命名规律: 这几个指令命名看起来不易记住,现在找找规律. 指令 样本 效果 归纳名称解释 ldr Rd,addressing ldr r1,[r0] addressin ...

  4. ARM LDR/STR, LDM/STM 指令

    这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令, 关于LDM和STM的说明,见另外一个说明文件,说明了这两个文件用于栈操作 ...

  5. arm str 指令

    str 指令格式: str{条件} 1源寄存器 ,2存储器地址 eg: str r0,[r1],#8;将r0中的数值赋值给r1,然后在r1地址上+立即数8,再写入r1中: str r0,[r1,#8] ...

  6. ldr指令总结

    LDR/STR字和无符号字节加载/存储 1,LDR Rd,[Rn]   2, LDR Rd,[Rn,Flexoffset] 3, LDR Rd,[Rn],Flexoffset 4, LDR Rd,la ...

  7. LDR 和MOV 指令区别

    ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...

  8. ARM汇编中ldr伪指令和ldr指令(转载)

    转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成, ...

  9. ARM指令教程

    ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...

随机推荐

  1. Hadoop的数据管理

    Hadoop的数据管理,主要包括Hadoop的分布式文件系统HDFS.分布式数据库HBase和数据仓库工具Hive的数据管理. 1.HDFS的数据管理 HDFS是分布式计算的存储基石,Hadoop分布 ...

  2. 计算机程序的思维逻辑 (50) - 剖析EnumMap

    上节我们提到,如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类EnumMap. 为什么要有一个专门的类呢?我们之前介绍过枚举的本质,主要是因为枚举 ...

  3. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  4. springboot(八):RabbitMQ详解

    RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apa ...

  5. 使用webfont为easyui扩充图标

    目前回到pc端开发,开始用了easyui这个框架.重拾easyui后感觉这个框架用的很多技术太古老,页面风格也太控件化.单从图标一项来说吧,这种花花绿绿的图标用户一看都傻了眼,同时整个框架就提供了那么 ...

  6. Azure Backup (3) 使用Azure备份服务,备份Azure虚拟机

    <Windows Azure Platform 系列文章目录> 本将介绍,如何使用Azure备份服务,备份Azure虚拟机. 我们先预先创建2台Windows VM (命名为LeiVM00 ...

  7. 使用OWIN作为WebAPI的宿主

    前言 好吧,也没什么好说的,就是个技术的总结,直接生成MVC的项目,感觉好重,虽然各种东西很全 ...也许我是处女座? - -, OWIN呃,这里我就不解释了,自己也是一知半解,可以参考 Open W ...

  8. HTML基本元素(三)

    1.HTML特殊字符 一些字符在HTML中拥有特殊的含义,比如小于号(<)和大于号(>)用于定义HTML标签.如果我们希望浏览器正确地显示这些字符,我们必须在HTML源码中插入字符实体. ...

  9. ldap部署相关,ldap双机\LAM配置管理\ldap备份还原

    前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 就单点登录实现过程进行详细记录,ldap是一切的基础,可以把它理解成一个读强写弱的文件类型数据库,统一认证我们通过 ...

  10. Easyui dialog中嵌入iframe

    如果easyui dialog的地址属性用href超链接,easyui 不会加载整个url页面,只会截取url目标页的body体间的html, 如果想加载把其他页面 加载进dialog的iframe中 ...