/**
******************************************************************************
* @author    Maoxiao Hu
* @version   V1.0.1
* @date       Jan-2015
******************************************************************************
* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >
******************************************************************************
**/
本文会不时完善和纠正一些小错误,还请到 http://www.cnblogs.com/humaoxiao 参考最新版本。
 
ARM的指令集去哪里查才最权威最详细呢?
一般ARM官方网站上会有针对你手上芯片对应指令集的《架构参考手册》,可以免费下载。例如我手上的exynos4412是ARM v7-A指令集,那么对应的手册就是《arm_architecture_reference_manual ARMv7-A and ARMv7-R edition.pdf》。
在这个手册的第A8节:Instruction Details 按照字母顺序详细介绍了ARMv7-A的各种指令语法,700页之多,用到时详查即可。
下面说一下查阅文档需要注意的几个地方。

一、指令格式

当我们查找一些指令比如ldrle movne,发现无法在手册中搜索到,其实并不是没有这些指令,而是这些指令是在原始指令ldr mov后面加上了条件码(Condition Code)le ne,然后被写到了一起。
举个例子:
LDR的第一种指令格式如下,LDR后面的<c>就表示可以选择后接条件码,当然也可以不接。
 
 
条件码如下,如果不附加条件码,就代表AL,无条件执行:
 
这样一来,一个简单的ldr就可以派生出ldreq ldrne ldrcs ldrcc……各种指令,其它简单指令也类同。
知道了这点,99%的指令就都可以读得懂了,还有极小一部分特殊指令在这里暂且不说。
 
 
二、常用指令
列一下uboot中经常出现的一些指令,作为练习,按字母顺序依次列出。
而且平常所说的什么位置无关码,其实不用死记,可以直接用指令格式进行解释。
----------
b
举例:
第一行 b 7de016d0的汇编码是ea000002,与上表对照后发现imm24为2,也就是说目的地址为当前PC+4+2*4 = 7de016d0
即汇编码里只存储了偏移地址,所以b是位置无关码,至于b的跳转范围,很明显就是24位有符号数能表示的范围。
-----------
bl
只不过bl会把当前地址+4放到LR寄存器中以备程序返回。
------------
bx
bx指令跳转到指令中所指定的目标地址。一般这条指令用于程序返回,比如:bx lr
举例:
 
------------
blx
blx将跳转到Rm寄存器指向的地址,并将当前PC值保存到LR。低四位代表Rx的寄存器号。
举例:
既然跳转到r4指向的寄存器,那么低四位就是4,高28位一般固定为e12fff3。
-------------
ldr
ldr是把逗号后面地址指向的值,放到逗号前面的寄存器里去。
举例:
  r1 + 4 -> r5
 r3 -> r2
 r3 - 36 -> r2
 pc + 292 -> r0
--------------
str
str的作用是把逗号前面寄存器的值,放到逗号后面指示的地址里去。
举例:
 r3 -> sp + 28
 r3 -> r2 + r1<<5

arm汇编指令总结(不断更新)的更多相关文章

  1. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  2. ARM汇编指令的一些总结-转

    ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...

  3. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  4. ARM汇编指令(未完待续)

    ARM指令自己在看的时候,看完之后就忘了,根本记不住,而且有些ARM汇编指令在平常的时候可能根本就用不到,所以也没必要把所有的ARM指令都去记忆,所以自己就想着不去一遍一遍的复习ARM指令,而是在平常 ...

  5. ARM 汇编指令

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

  6. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  7. 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 :  -- AR ...

  8. GNU ARM 汇编指令

    第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C ...

  9. ARM汇编指令特点

    根据朱有鹏老师课程笔记整理而来: (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串1 0组成的机器码,由CPU读取执行. (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器 ...

随机推荐

  1. mysql二进制包安装与配置实战记录

    导读 一般中小型网站的开发都选择 MySQL 作为网站数据库,由于其社区版的性能卓越,搭配 PHP .Linux和 Apache 可组成良好的开发环境,经过多年的web技术发展,在业内被广泛使用的一种 ...

  2. LeetCode46,47 Permutations, Permutations II

    题目: LeetCode46 I Given a collection of distinct numbers, return all possible permutations. (Medium) ...

  3. 【Android Api 翻译2】Android Testing(1) 浅尝Android测试的奥秘

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 仅供学习和交流使用,翻译不好勿喷,请只摘除不合适的地方 Testing The Android fram ...

  4. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

  5. Error reading from file 解决办法

    最近安装程序遇见这个问题: Error reading from file. 解决办法: 给这个程序添加权限: 添加SYSTEM的读写改..如果比较懒,直接全部允许. 然后Retry.

  6. mysql的相关操作

    查看当前登录用户: mysql> select USER(); +----------------+ | USER() | +----------------+ | root@localhost ...

  7. SQL Server中游标的使用

    举个栗子: -- 临时变量 DECLARE @Id UNIQUEIDENTIFIER -- 声明游标名 DECLARE cursor_name CURSOR FOR SELECT ID from CO ...

  8. HTML <input> 标签的 maxlength 属性

    前端的表单,需要进行验证. 结合JS表单验证框架,写了很多前端验证的代码. 其中,有这么一个需求:用户最多只能输入10个字符. 按照惯性,肯定是会去写JS表单验证了. 实际上,根本没有必要. HTML ...

  9. Linux后台运行

    关于linux后台 ctrl + z jobs -l fg %jobnumber 后台调前台 bg %jobnumber 后台暂停--后台运行 kill pid ps -aux | grep &quo ...

  10. 剑指Offer06 旋转数组的最小值

    /************************************************************************* > File Name: 06_MinNum ...