LDR、STR指令
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指令的更多相关文章
- ARMv7 ldr/str指令详解
因为ARM的算术运算不支持直接操作内存地址,所以要把内存里的数据先加载进寄存器.ldr指令就是干这事的,称为间接取址模式. 一共有3*3九种模式,先是直接偏移,先偏移,后偏移三大类,指的是如何对源操作 ...
- mov和ldr/str的区别
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...
- arm汇编:ldr,str,ldm,stm,伪指令ldr
ldr,str,ldm,stm的命名规律: 这几个指令命名看起来不易记住,现在找找规律. 指令 样本 效果 归纳名称解释 ldr Rd,addressing ldr r1,[r0] addressin ...
- ARM LDR/STR, LDM/STM 指令
这里比较下容易混淆的四条指令,已经在这4条指令的混淆上花费了很多精力,现在做个小结,LDR,STR,LDM,STM这四条指令, 关于LDM和STM的说明,见另外一个说明文件,说明了这两个文件用于栈操作 ...
- arm str 指令
str 指令格式: str{条件} 1源寄存器 ,2存储器地址 eg: str r0,[r1],#8;将r0中的数值赋值给r1,然后在r1地址上+立即数8,再写入r1中: str r0,[r1,#8] ...
- ldr指令总结
LDR/STR字和无符号字节加载/存储 1,LDR Rd,[Rn] 2, LDR Rd,[Rn,Flexoffset] 3, LDR Rd,[Rn],Flexoffset 4, LDR Rd,la ...
- LDR 和MOV 指令区别
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令.比如想把数据从内存中某处读取到寄存器中,只能使用ldr比如:ldr r0, 0x12345678就 ...
- ARM汇编中ldr伪指令和ldr指令(转载)
转自:http://blog.csdn.net/ce123_zhouwei/article/details/7182756 ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成, ...
- ARM指令教程
ARM指令教程 ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...
随机推荐
- 【.net 深呼吸】自定义特性(Attribute)的实现与检索方法
在.net的各个语言中,尤其是VB.NET和C#,都有特性这一东东,具体的概念,大家可以网上查,这里老周说一个非标准的概念——特性者,就是对象的附加数据.对象自然可以是类型.类型成员,以及程序集. 说 ...
- 初识 Sql Server存储过程
开篇语 之前的公司并未使用存储过程来做项目,所以小生对存储过程的调用.使用也是一知半解,刚好这家公司就大量用到了存储过程 这次做的功能,为了保持风格一致,也是需要使用存储过程来实现动态sql和数据分页 ...
- 前端学PHP之PDO预处理语句
× 目录 [1]定义 [2]准备语句 [3]绑定参数[4]执行查询[5]获取数据[6]大数据对象 前面的话 本来要把预处理语句和前面的基础操作写成一篇的.但是,由于博客园的限制,可能是因为长度超出,保 ...
- Android中的复制粘贴
Android中的复制粘贴 The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的 ...
- geotrellis使用(二十七)栅格数据色彩渲染
目录 前言 复杂原因及思路分析 实现过程 总结 一.前言 今天我们来研究一下这个看似简单的问题,在地理信息系统中颜色渲染应当是最基本的操作和功能,比如我们将一幅Landsat数据拖拽到A ...
- 【Data Cluster】真机环境下MySQL数据库集群搭建
真机环境下MySQL-Cluster搭建文档 摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...
- conversations.im
最后在即时消息 https://conversations.im/ https://github.com/chrisballinger/ 对话是Android 4.0的Jabber / XMPP客户 ...
- C#开发微信门户及应用(22)-微信小店的开发和使用
在做企业电子商务方面,微信小店虽然较淘宝天猫等起步较晚,但是作为一个电商平台,这个影响力不容忽视,结合微信的特点和便利,微信小店具有很好的粘合性和广泛的用户基础,因此花费一定的时间,在这方面做深入的研 ...
- SSH远程登录原理与运用
SSH是每一台Linux电脑的标准配置. 随着Linux设备从电脑逐渐扩展到手机.外设和家用电器,SSH的使用范围也越来越广.不仅程序员离不开它,很多普通用户也每天使用. SSH具备多种功能,可以用于 ...
- 如何在Node.js中合并两个复杂对象
通常情况下,在Node.js中我们可以通过underscore的extend或者lodash的merge来合并两个对象,但是对于像下面这种复杂的对象,要如何来应对呢? 例如我有以下两个object: ...