ARMv7 ldr/str指令详解
因为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指令详解的更多相关文章
- [转]JVM指令详解(上)
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- LDM与STM指令详解
title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...
- C#中的预处理器指令详解
这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...
- rsync指令详解
rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...
- #pragma 预处理指令详解
源地址:http://blog.csdn.net/jx_kingwei/article/details/367312 #pragma 预处理指令详解 在所有的预处理指令中, ...
- 迈向angularjs2系列(2):angular2指令详解
一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOC ...
- C#中的预处理指令详解
这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...
- pragma comment的使用 pragma预处理指令详解
pragma comment的使用 pragma预处理指令详解 #pragma comment( comment-type [,"commentstring"] ) 该宏放置一 ...
- Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY <源路径> .. ...
随机推荐
- hash桶
#include <stdio.h> #include <stdlib.h> #include "chain.c" //include the chain. ...
- sql 查询练习
1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100 ...
- 提高 Discuz 门户文章被百度收录的方法
如果你了解 SEO,你就该清楚使用 canonical URL 标签可以固定网页标准地址,可以提高网页的权重,有利于搜索引擎收录. 例如我的网站拥有两个子域名www.bbseat.com.cn和bbs ...
- Linux编辑器vi使用方法详细介绍
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- C#快速学习笔记(译)续一
6.虚拟和非虚拟函数 下面是一个非虚拟函数 using System; namespace Test2 { class Plane { public double TopSpeed() {return ...
- WPF xmal绑定数据,当显示数据过长用省略号代替的方法
有时候会遇到这种情况,用了数据绑定显示的数据太长时,如何让过长的数据显示规定的长度,多余的用省略号代替呢,自己写了个简单的小例子和大家分享一下^_^,我也是学习WPF不久,这是我第一次写博客,有问题还 ...
- Speech Patterns (string)
People often have a preference among synonyms of the same word. For example, some may prefer "t ...
- ems lite 客户端远程连接mysql server
在本地用ems客户端远程连接虚拟机上的mysql server,弹出客户端没有权限访问mysql server.使用下面方法进行设置:mysql> select host,user,passwo ...
- fineui框架
http://fineui.com/demo/#/demo/layout/fit.aspx 虽然比较丑陋,但功能实用 此框架比较简单, 框架的作用你懂的,重点是要有帮助文档, 进阶型的容易上手的帮助文 ...
- 【MongoDB】 安装为windows services
参考 http://stackoverflow.com/questions/2404742/how-to-install-mongodb-on-windows # mongodb.conf # da ...