因为ARM的算术运算不支持直接操作内存地址,所以要把内存里的数据先加载进寄存器。ldr指令就是干这事的,称为间接取址模式。

一共有3*3九种模式,先是直接偏移,先偏移,后偏移三大类,指的是如何对源操作数操作,是直接使用,还是在加载前对源操作数操作(比如地址加个数值),还是在加载后对操作数操作

每个大类里分三个小类,分别指源操作数是立即数,寄存器,还是标量寄存器(比如对寄存器里的数向左偏移两位,即乘4)

汇编指令和对应的C代码如下

 Immediate offset:

   LDR    R0, [R1, #]
r0 = r1[]; Remember, again, the offset is in bytes, so # would point to the second word (long int) in our array, thus in C the array indice [] would provide the correct data. Register offset: LDR R0, [R1, R2]
r0 = r1[r2]; Scaled register offset: LDR R0, [R1, R2, LSL #]
r0 = r1[(r2 << )]; Immediate pre-indexed: LDR R0, [R1, #]!
r1 += ; r0 = *r1; Register pre-indexed: LDR R0, [R1, R2]!
r1 += r2; r0 = *r1; Scaled register pre-indexed: LDR R0, [R1, R2, LSL #]!
r1 += (r2 << #); r0 = *r1; Immediate post-indexed: LDR R0, [R1], #
r0 = *r1; r1 += 4; Register post-indexed: LDR R0, [R1], R2
r0 = *r1; r1 += r2; Scaled register post-indexed: LDR R0, [R1, R2, LSL #]!
r0 = *r1; r1 += (r2 << #2);

str指令是把寄存器里的数存到内存里,目标地址的计算方式与操作与ldr指令中源地址的计算方法与操作一样

Immediate offset:
  LDR    R0, [R1, #4]  r0 = r1[1];
    Remember, again, the offset is in bytes, so #4 would point to the second word (long int) in our array, thus in C the array indice [1] would provide the correct data. 
Register offset:
  LDR    R0, [R1, R2]  r0 = r1[r2];
Scaled register offset:
  LDR    R0, [R1, R2, LSL #4]  r0 = r1[(r2 << 4)];
Immediate pre-indexed:
  LDR    R0, [R1, #4]!  r1 += 4; r0 = *r1;
Register pre-indexed:
  LDR    R0, [R1, R2]!  r1 += r2; r0 = *r1;
Scaled register pre-indexed:
  LDR    R0, [R1, R2, LSL #2]!  r1 += (r2 << #2); r0 = *r1;
Immediate post-indexed:
  LDR    R0, [R1], #4]  r0 = *r1; r1 += 4;
Register post-indexed:
  LDR    R0, [R1], R2  r0 = *r1; r1 += r2;
Scaled register post-indexed:
  LDR    R0, [R1, R2, LSL #2]!  r0 = *r1; r1 += (r2 << #2);

ARMv7 ldr/str指令详解的更多相关文章

  1. [转]JVM指令详解(上)

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码    助记符      ...

  2. LDM与STM指令详解

    title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...

  3. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  4. rsync指令详解

    rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...

  5. #pragma 预处理指令详解

    源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma  预处理指令详解              在所有的预处理指令中, ...

  6. 迈向angularjs2系列(2):angular2指令详解

    一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...

  7. C#中的预处理指令详解

    这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...

  8. pragma comment的使用 pragma预处理指令详解

    pragma comment的使用 pragma预处理指令详解   #pragma comment( comment-type [,"commentstring"] ) 该宏放置一 ...

  9. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解

    前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY  <源路径> .. ...

随机推荐

  1. hash桶

    #include <stdio.h> #include <stdlib.h> #include "chain.c" //include the chain. ...

  2. sql 查询练习

    1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100 ...

  3. 提高 Discuz 门户文章被百度收录的方法

    如果你了解 SEO,你就该清楚使用 canonical URL 标签可以固定网页标准地址,可以提高网页的权重,有利于搜索引擎收录. 例如我的网站拥有两个子域名www.bbseat.com.cn和bbs ...

  4. Linux编辑器vi使用方法详细介绍

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  5. C#快速学习笔记(译)续一

    6.虚拟和非虚拟函数 下面是一个非虚拟函数 using System; namespace Test2 { class Plane { public double TopSpeed() {return ...

  6. WPF xmal绑定数据,当显示数据过长用省略号代替的方法

    有时候会遇到这种情况,用了数据绑定显示的数据太长时,如何让过长的数据显示规定的长度,多余的用省略号代替呢,自己写了个简单的小例子和大家分享一下^_^,我也是学习WPF不久,这是我第一次写博客,有问题还 ...

  7. Speech Patterns (string)

    People often have a preference among synonyms of the same word. For example, some may prefer "t ...

  8. ems lite 客户端远程连接mysql server

    在本地用ems客户端远程连接虚拟机上的mysql server,弹出客户端没有权限访问mysql server.使用下面方法进行设置:mysql> select host,user,passwo ...

  9. fineui框架

    http://fineui.com/demo/#/demo/layout/fit.aspx 虽然比较丑陋,但功能实用 此框架比较简单, 框架的作用你懂的,重点是要有帮助文档, 进阶型的容易上手的帮助文 ...

  10. 【MongoDB】 安装为windows services

    参考  http://stackoverflow.com/questions/2404742/how-to-install-mongodb-on-windows # mongodb.conf # da ...