ARM汇编语言指令集汇总
ARM汇编语言指令集汇总
- 跳转指令
- 存储器和寄存器交互数据指令(内存访问)
- 数据传送指令
- 数据算术运算指令
- 数据逻辑运算指令
- 比较指令
- 组合和分离指令
- 并行指令
- 测试指令
- ThumbEE指令
- 协处理器指令
- 伪指令
- 无线 MMX 技术伪指令
- 其他指令
- 寄存器寻址方式
跳转指令
指令 | 简介 |
---|---|
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的标志位 |
ThumbEE指令
指令 | 简介 |
---|---|
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 体系结构 |
无线 MMX 技术伪指令
指令 | 简介 | 例子 |
---|---|---|
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] |
更多可参考 《ARM汇编指南》
ARM汇编语言指令集汇总相关推荐
- (2)ARM Cortex-M3指令集
汇编语言的概念:指用助记符代替操作码,用地址符号或者标签代替地址码的编程语言 优点:可以直接访问硬件目标代码简短,执行速度快; 缺点:可移植性可读读性差; ARM中流水线执行指令的基础就是指令的长度需 ...
- ARM 汇编语言入门
[翻译]二进制漏洞利用(二)ARM32位汇编下的TCP Bind shell:https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From:ARM汇编语 ...
- ARM裸机开发篇3:ARM汇编语言程序设计
写在前面: 本文章为<ARM Cortex-A7裸机开发篇>系列中的一篇,全系列总计11篇.笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板). 针对FS-MP ...
- ARM SIMD 指令集:NEON 简介
ARM SIMD 指令集:NEON 简介 一.NEON 简介 1.1.NEON 简介 1.2.NEON 使用方式 1.3.编译器自动向量化的编译选项 1.3.1 Arm Compiler 中使能自动向 ...
- ARM NEON指令集优化理论与实践
ARM NEON指令集优化理论与实践 一.简介 NEON就是一种基于SIMD思想的ARM技术,相比于ARMv6或之前的架构,NEON结合了64-bit和128-bit的SIMD指令集,提供128-bi ...
- 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
文章目录 一.分析 malloc 函数的 arm 汇编语言 一.分析 malloc 函数的 arm 汇编语言 在上一篇博客 [Android 逆向]arm 汇编 ( 使用 IDA 解析 arm 架构的 ...
- ARM汇编语言中的程序结构
在 ARM ( Thumb )汇编语言程序中,以程序段为单位组织代码.段是相对独立的指令或数据序列,具有特定的名称.段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据 ...
- 使用arm混合汇编计算两个64位的和_混合使用C、C++和汇编语之: C、C++ 和 ARM 汇编语言之间的调用...
12.4C' target='_blank' style='cursor:pointer;color:#D05C38;text-decoration:underline;'>C.C++和ARM汇 ...
- c51单片机汇编语言电梯,C51单片机汇编语言指令集.doc
51汇编语言指令集 符号定义表 符号 含义 Rn R0-R7寄存器n=0-7 Direct 直接地址,内部数据区的地址RAM(00H-7FH) SFR(80H-FFH) B,ACC,PSW,IP,P3 ...
- 技术派-汇编语言指令集(intel X86系列)
针对汇编语言指令集(intel X86系列8086/80186/80286/80386/80486) AAA - Ascii Adjust for Addition AAD - Asci ...
最新文章
- NtQueryInformationProcess用法
- 【Web安全】绕过WAF过滤-利用cookie进行SQL注入
- 我们无法在你选择的位置安装Windows。0x80300002
- Unity3D-InstantOC遮挡剔除
- 调用某个按钮事件_Event 对象之事件句柄 (Event Handlers)
- Python 配置文件之ConfigParser模块(实例、封装)
- Spring-IOC
- QuickBI和DataV
- Spring Boot@Component注解下的类无法@Autowired的问题
- 企业进销存管理系统(二)
- openwrt系统理解
- ppt python 图表_利用python分析weibo数据做成图表放入PPT中
- python 数据库表结构转为类_Python sql server和postgresql的表结构转换
- 学习淘宝分享出来的链接web检测打开原生App
- 面试了十个应届生九个都是秒杀系统,你确定你们那是秒杀?
- 贴纸拼词--动态规划
- C语言数组大小极限,C中允许的最大静态数组大小是多少?
- 珞珈一号01星(luojia1-01)的夜间灯光影像数据处理流程
- data whale_data_analysis_task2_数据可视化
- 如何使用html+Chart画甜甜圈图
热门文章
- 生物信息学_分子数据库(二)核酸
- 3mx转osgb_如何将无人机Las点云数据转为Osgb数据
- 增值税税控设备(计算机打印机)全额抵扣,在航天金穗购买的打印机、扫描仪是否属于防伪税控设备...
- 计算机网络 自顶向下方法
- AxureShare太慢?尝试在内网架设Axure共享吧!
- 制造业erp整体业务流程
- 架构师必备!java架构师资格证书
- Oracle密码过期解决办法
- 计算机怎么退出远程桌面连接,怎么退出远程桌面控制?远程桌面软件哪个好?
- 死亡细胞Mod制作教程