/**
******************************************************************************
* @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. c#如何在win7下设置IE代理的完美解决方案

    有人还发现:在window7下, 在一个进程中, 设置和取消不能都执行,---- 要么设置,要么取消. 但如果第一次运行时,只进行设置代理,退出后再进运行,只进行取消,这是没有问题的.  简单说说中医 ...

  2. Ubuntu下安装FTP服务及使用(以VSFTPD为例)

    (一)安装与配置 (1)       安装vsftpd $sudo apt-get install vsftpd 这里会提示无法创建/home/ftp目录,手动创建一个 $sudo mkdir /ho ...

  3. CentOS 6.4 离线安装 Cloudera 5.7.1 CDH 5.7.1

    因为项目开发需要要在本地组建一个Hadoop/Spark集群,除了Hadoop/Spark还要同时安装多个相关的组件,如果一个个组件安装配置,对于一个由多台服务器组成的集群来说,工作量是巨大的. 所以 ...

  4. The Kernel Newbie Corner: Kernel Debugging with proc "Sequence" Files--Part 3

    转载:https://www.linux.com/learn/linux-career-center/44184-the-kernel-newbie-corner-kernel-debugging-w ...

  5. Hadoop从2.2.0到2.7

    Hadoop2.2.0 GA release 通用版本,Hadoop2.2.0就是一个通用版本 Hadoop2.2.0是从Hadoop1.1.0升级过来的,增加了以下特性: 1.增加了YARN: 2. ...

  6. java笔记 chapter1 java是什么,能干什么,有什么,特点,开发环境

    一,java是什么 二,java能干什么 三,java有什么 四,java的特点 五,java的三大特性:虚拟机,垃圾回收和代码安全 六,构建JSE开发环境:下载安装jdk和配置环境变量 七,编写并运 ...

  7. DataGridView 多线程更新 数据 解决卡顿问题

    使用多线程更新DataGridView,防止页面卡顿和卡死的问题 private delegate void UpdateDataGridView(DataTable dt); private voi ...

  8. iOS部分其他知识

    1.界面切换传值 (1)使用button进行界面切换 //当页面跳转时系统自动调用,segue连线 - (void)prepareForSegue:(UIStoryboardSegue *)segue ...

  9. 移动端 viewport设置

    <meta name="viewport" content="" /> width [pixel_value | device-width] wid ...

  10. Umbraco(6)-Creating More Pages Using the Master - Part 2(翻译文档)

    创建一个Contact Us页面 我们将创建一个新的”联系我们“页面,在该页面我们将放置简单的联系信息.对于添加这个功能你可能想替换为一个完全成熟的形式. 一些有效的解决方案: 使用表面控制器构建自己 ...