arm汇编指令总结(不断更新)

it2022-05-09  18

/** ****************************************************************************** * @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

转载于:https://www.cnblogs.com/humaoxiao/p/4211581.html

相关资源:常用ARM指令集及汇编.pdf

最新回复(0)