| 指令 | 简介 | 
|---|---|
| B | 无条件跳转 | 
| BL | 带链接的无条件跳转 | 
| BX | 带状态跳转,更改指令集 | 
| BLX | 带链接和状态切换的无条件跳转,更改指令集 | 
| BXJ | 跳转,更改为 Jazelle | 
| TBB , TBH | 表跳转字节、半字 | 
➡️ 代表从左到右
            ⬅️ 代表从右到左
| 指令 | 简介 | 
|---|---|
| LDR | 从存储器中加载数据到寄存器 ⬅️ | 
| LDR R8,[R9,#04] | R8为待加载数据的寄存器,加载值为 R9+0x4指向的存储单元 | 
| STR | 将寄存器的数据存储到存储器 ➡️ Store | 
| STR R8,[R9,#04] | 将R8寄存器的数据 存到 R9+0x4指向的存储单元 ➡️ | 
| LDM | 将存储器的数据加载到一个存储器列表 ➡️ | 
| LDM R0,{R1-R3} | 将R0指向的储存单元的数据依次加载到R1,R2,R3寄存器 ➡️ | 
| STM | 将一个寄存器列表的数据 存储到指定的存储器 ⬅️ | 
| PUSH | 将寄存器值推入堆栈 | 
| POP | 将堆栈值推出到寄存器 | 
| SWP | 将寄存器与存储器之间的数据进行交换 | 
| SWP R1,R1 [R0] | 将R1寄存器与R0指向的存储单元的内容进行交换 | 
| PLD | 预载数据 | 
| PLI | 预载指令 | 
| RFE | 从异常中返回 | 
| SRS | 存储返回状态 | 
| LDREX 和 STREX | 独占加载和存储寄存器。 | 
| CLREX | 独占清零,清除执行处理器的局部记录:有地址请求进行独占访问 | 
| 指令 | 简介 | 
|---|---|
| MOV | 将立即数或寄存器的数据传送到目标寄存器 ⬅️ | 
| MOV R1,R0 | 将寄存器R0的值传送到寄存器R1 | 
| MOV PC,R14 | 将寄存器R14的值传送到PC,常用于子程序返回 | 
| MOV R1,R0,LSL#3 | 将寄存器R0的值左移3位后传送到R1(即乘8) | 
| MOVS PC, R14 | 将寄存器R14的值传送到PC中,返回到调用代码并恢复标志位 | 
| MVN R0,#0 | 将立即数0取反传送到寄存器R0中,完成后R0=-1(有符号位取反) | 
| 指令 | 简介 ⬅️ | 
|---|---|
| ADD | 加 ️ | 
| SUB | 减️ | 
| MUL | 乘 | 
| DIV | 除 | 
| ADC | 带进位的加法指令 | 
| SBC | 带借位减法指令 | 
| AND | 逻辑“与” | 
| ASR | 算术右移 | 
| RSB | 反向减法 | 
| SBC | 带进位减法 | 
| RSC | 带进位反向减法(仅 ARM) | 
| SDIV | 有符号除法 | 
| UDIV | 无符号除法 | 
| QADD | 有符号加法 | 
| QSUB | 有符号减法 | 
| QDADD | 加倍加法 | 
| QDSUB | 加倍减法 | 
| SSAT | 将有符号值饱和到有符号范围内 | 
| USAT | 可将有符号值饱和到无符号范围内 | 
| 指令 | 简介 | 
|---|---|
| AND | 与 | 
| ORR | 或️ | 
| EOR | 异或️ | 
| 移位 | 因为是2进制,逻辑移位左移变大,右移变小,且按2的倍数进行 | 
| LSL | 逻辑左移 ⬅️ | 
| LSR | 逻辑右移 ⬅️ | 
| ROR | 将 Rm 中的值向右循环移 | 
| RRX | 可提供经右移一位后的寄存器中的值 | 
| 指令 | 简介 | 
|---|---|
| CMP | 直接比较 | 
| CMP R0 #0 | R0寄存器中的值和0比较 | 
| CMN | 负数比较指令 | 
| CMN R1,R0 | 将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位 | 
| CMN R1,#100 | 将寄存器R1的值与立即数100相加,并根据结果设置CPSR的标志位 | 
| CBZ | 比较,为零则跳转 | 
| CBNZ | 比较,为非零则跳转 | 
| 指令 | 简介 | 
|---|---|
| BFC 和 BFI | 位域清零和位域插入 | 
| SBFX 和 UBFX | 有符号或无符号位域提取 | 
| SXT、SXTA、UXT 和 UXTA | 符号扩展或零扩展指令,可选择进行加法运算 | 
| PKHBT 和 PKHTB | 半字组合指令 | 
| 指令 | 简介 | 
|---|---|
| USAD8 | 差值的绝对值无符号求和 | 
| USADA8 | 差值的绝对值无符号求和再累加 | 
| SSAT16 | 可将有符号值饱和到有符号范围内 | 
| USAT16 | 可将有符号值饱和到无符号范围内 | 
| SXT、SXTA UXT 和 UXTA | 号扩展,符号扩展加,零扩展和零扩展加 | 
| 指令 | 简介 | 
|---|---|
| TST | 位测试指令 | 
| TST R1,#%1 | 用于测试在寄存器R1中是否设置了最低位(%表示二进制数) | 
| TST R1,#0xffe | 将寄存器R1的值与立即数0xffe按位与,并根据结果设置CPSR的标志位 | 
| TST R0, #0x8 | 测试bit_3是否为0 | 
| TEQ | 位测试指令 | 
| TEQ R1,R2 | 将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置CPSR的标志位 | 
| 指令 | 简介 | 
|---|---|
| ENTERX, LEAVEX | 将状态更改为 ThumbEE 或更改状态 ThumbEE | 
| CHKA | (检查数组)可比较两个寄存器中的无符号值 | 
| HB、HBL、HBLP 、HBP | 处理程序跳转,跳转到指定处理程序 | 
| SEL | 根据 APSR GE 标记的状态,从每个操作数中选择字节 | 
| REV、REV16、REVSH 和 RBIT | 在字或半字内反转字节或位的顺序 | 
| 指令 | 简介 | 
|---|---|
| CDP | 协处理器数据处理操作 | 
| CDP2 | 协处理器数据处理操作 | 
| MCR、MCR2、MCRR 和 MCRR2 | 从寄存器移动到协处理器 | 
| LDC、LDC2、STC、STC2 | 在内存和协处理器之间传送数据,加载协处理器 | 
| 指令 | 简介 | 
|---|---|
| ADRL | 将相对于程序或相对于寄存器的地址载入寄存器中(中等范围,与位置无关) | 
| MOV32 | 将 32 位常数或地址载入寄存器(无范围限制,但与位置相关) | 
| LDR | 将 32 位常数或地址载入寄存器(无范围限制,但与位置相关) | 
| UND | 生成无体系结构定义的指令。可用于所有 ARM 体系结构 | 
| 指令 | 简介 | 例子 | 
|---|---|---|
| TMCR | 将源寄存器 Rn 的内容移到控制寄存器 wCn 中 | TMCR wc1, r10 | 
| TMCRR | 将两个源寄存器 RnLo 和 RnHi 的内容移到目标寄存器 wRd | TMCRR wr4, r5, r6 | 
| TMRC | 将控制寄存器 wCn 的内容移到目标寄存器 Rd。不要将 r15 用于 Rd。 | TMRC r1, wc2 | 
| TMRRC | 将源寄存器 wRn 的内容移到两个目标寄存器 RdLo 和 RdHi。 | TMRRC r1, r0, wr2 | 
| WMOV | 将源寄存器 wRn 的内容移到目标寄存器 wRd。 | WMOV wr1, wr8 | 
| WZERO | 清零目标寄存器 wRd。 | WZERO wr1 | 
| 指令 | 简介 | 
|---|---|
| CPS | 更改处理器状态 | 
| CPY | 复制 | 
| DBG | 调试 | 
| SWT | 协处理器指令,切换用户模式 | 
| DCB | 伪指令:分配一片连续的字节存储单元并用指定的数据初始化 | 
| BIC | 位清零指令 | 
| BIC R0,R0,#%1011 | 该指令清除 R0 中的位 0、1、和 3,其余的位保持不变 | 
| BKPT | 断点,当指令到达某个特定地址处时,使用此指令来检查系统状态 | 
| MRS | 将 PSR 的内容移到通用寄存器中,MRS{cond} Rd, psr | 
| MSR | 将通用寄存器的立即数或内容加载程序状态寄存器 (PSR) 的指定位段中 | 
| CPS | 更改处理器状态,只允许在特权模式下使用 | 
| SMC | 安全监控调用 SMC{cond} #immed_16 | 
| SETEND | 设置 CPSR 中的端序位,不影响 CPSR 中的其他位 | 
| NOP | 进行填充来使当前位置与指定的边界对齐 | 
| SEV | 设置事件 | 
| WFE|WFI|YIELD | 等待事件,等待中断,通知 | 
| WFI | WFI 会暂时将执行中断挂起,直至发生IRQ后 | 
| YIELD | YIELD 可告知硬件有线程正在执行任务,例如可换出的自旋锁 | 
| DBG | 调试提示可向调试系统及其相关系统发送提示 | 
| DMB | 数据内存屏障可作为内存屏障使用。 | 
| DSB | 数据同步屏障是一种特殊类型的内存屏障 | 
| ISB | 指令同步屏障 | 
| MAR | MAR 指令可将 RdLo 中的值复制到 Acc 的位 [31:0] 中,还会将 RdHi 的最低有效字节复制到 Acc 的位 [39:32] 中。MAR{cond} Acc, RdLo, RdHi | 
| MRA | MRA{cond} RdLo, RdHi, Acc 可进行以下操作:将 Acc 的 [31:0] 位复制到 RdLo | 
| 指令 | 简介 | 
|---|---|
| 立即寻址 | MOV R0,#1234 R0=0x1234 | 
| 寄存器寻址 | MOV R0,R1 R0=R1 | 
| 寄存器移位寻址 | MOV R0,R1,LSL #2 R0=R1*4 | 
| 寄存器间接寻址 | LDR R0,[R1] ;将R1寄存器中的值作为地址,取出值给R0 | 
| 寄存器间接寻址偏移寻址 | LDR R0,[R1,#-4] |