Thumb® 16 位指令集
快速参考卡
本卡列出了版本低于 ARM®v6T2 的支持 Thumb 的处理器中可用的所有 Thumb 指令。此外,还列出了所有 Thumb-2 16 位指令。
除非另外注明,否则本卡中显示的指令均为 Thumb-2 16 位指令。
除非指定,否则所有寄存器都为 Lo (R0-R7)。 Hi 寄存器为 R8-R15。
表关键字
§ 请参阅表 ARM 体系结构版本。<loreglist+LR> 以逗号隔开的 Lo 寄存器列表。加上 LR,括在大括号 { 和 } 内。
<loreglist> 以逗号隔开的 Lo 寄存器列表,括在大括号 { 和 } 内。<loreglist+PC> 以逗号隔开的 Lo 寄存器列表。加上 PC,括在大括号 { 和 } 内。
运算 汇编器更新 操作说明
移动立即数MOVS Rd, #<imm> N Z Rd := imm imm 范围为 0-255。
Lo 到 Lo MOVS Rd, Rm N Z Rd := Rm LSLS Rd, Rm, #0 的同义词
Hi 到 Lo、Lo 到 Hi、Hi 到 Hi MOV Rd, Rm Rd := Rm 不是 Lo 到 Lo。
任何寄存器之间6 MOV Rd, Rm Rd := Rm 任何寄存器之间。
加法立即数 3 ADDS Rd, Rn, #<imm> N Z C V Rd := Rn + imm imm 范围为 0-7。
所有寄存器 Lo ADDS Rd, Rn, Rm N Z C V Rd := Rn + Rm
Hi 到 Lo、Lo 到 Hi、Hi 到 Hi ADD Rd, Rd, Rm Rd := Rd + Rm 不是 Lo 到 Lo。
任何寄存器之间T2 ADD Rd, Rd, Rm Rd := Rd + Rm 任何寄存器之间。
立即数 8 ADDS Rd, Rd, #<imm> N Z C V Rd := Rd + imm imm 范围为 0-255。
带进位ADCS Rd, Rd, Rm N Z C V Rd := Rd + Rm + C-bit
值与 SP ADD SP, SP, #<imm> SP := SP + imm imm 范围为 0-508(字对齐)。
SP 所存储的地址ADD Rd, SP, #<imm> Rd := SP + imm imm 范围为 0-1020(字对齐)。
PC 所存储的地址ADR Rd, <label> Rd := label 标签范围为 PC 到 PC+1020(字对齐)。
减法Lo 到 Lo SUBS Rd, Rn, Rm N Z C V Rd := Rn – Rm
立即数 3 SUBS Rd, Rn, #<imm> N Z C V Rd := Rn – imm imm 范围为 0-7。
立即数 8 SUBS Rd, Rd, #<imm> N Z C V Rd := Rd – imm imm 范围为 0-255。
带进位SBCS Rd, Rd, Rm N Z C V Rd := Rd – Rm – NOT C 位
来自 SP 的值SUB SP, SP, #<imm> SP := SP – imm imm 范围为 0-508(字对齐)。
求反RSBS Rd, Rn, #0 N Z C V Rd := – Rn 同义词:NEGS Rd, Rn
乘法乘法MULS Rd, Rm, Rd N Z * * Rd := Rm * Rd * C 和 V 标记在 §4T 中不可预测,
在 §5T 及更高版本中保持不变
比较CMP Rn, Rm N Z C V 更新 Rn – Rm 的 APSR 标记可为 Lo 和 Lo、Lo 和 Hi、Hi 和 Lo 或者 Hi 和 Hi。
求反CMN Rn, Rm N Z C V 更新 Rn + Rm 的 APSR 标记
立即数CMP Rn, #<imm> N Z C V 更新 Rn – imm 的 APSR 标记imm 范围为 0-255。
逻辑与ANDS Rd, Rd, Rm N Z Rd := Rd AND Rm
异或EORS Rd, Rd, Rm N Z Rd := Rd EOR Rm
或ORRS Rd, Rd, Rm N Z Rd := Rd OR Rm
位清零BICS Rd, Rd, Rm N Z Rd := Rd AND NOT Rm
取反移动MVNS Rd, Rd, Rm N Z Rd := NOT Rm
测试位TST Rn, Rm N Z 更新 Rn AND Rm 的 APSR 标记
移位/循环逻辑左移LSLS Rd, Rm, #<shift> N Z C* Rd := Rm << shift 允许移动 0-31 位。 如果移位为 0,则不会影响 * C 标记。
LSLS Rd, Rd, Rs N Z C* Rd := Rd << Rs[7:0] 如果 Rs[7:0] 为 0,则不会影响 * C 标记。
逻辑右移LSRS Rd, Rm, #<shift> N Z C Rd := Rm >> shift 允许移动 1-32 位。
LSRS Rd, Rd, Rs N Z C* Rd := Rd >> Rs[7:0] 如果 Rs[7:0] 为 0,则不会影响 * C 标记。
算术右移ASRS Rd, Rm, #<shift> N Z C Rd := Rm ASR shift 允许移动 1-32 位。
ASRS Rd, Rd, Rs N Z C* Rd := Rd ASR Rs[7:0] 如果 Rs[7:0] 为 0,则不会影响 * C 标记。
向右循环移RORS Rd, Rd, Rs N Z C* Rd := Rd ROR Rs[7:0] 如果 Rs[7:0] 为 0,则不会影响 * C 标记。
相关推荐
ARM指令
ARM指令
arm 32 常见汇编指令解释
例如:asrs r1, r2, #3 表示将寄存器r2的值向右移动3个位,并用符号位填充左侧空缺的位,并将结果存储到寄存器r1中,并设置条件码寄存器以表明结果是否小于、等于或大于零。例如:adds r1, r2, #3 表示将寄存器r2中的值加上3,并将结果存储到寄存器r1中,并设置条件码寄存器以表明结果是否小于、等于或大于零。例如:subs.w r1, r2, #1 表示将寄存器r2中的值减去1,然后将结果存储到寄存器r1中,并设置条件码寄存器以表明结果是否小于、等于或大于零。例如:stm.w r0!
24、ARM汇编中的条件执行与指令后缀
本文详细解析了ARM汇编中条件执行指令和带S后缀的指令,包括逻辑移位、乘法、比较、位测试和条件选择指令的工作原理与标志设置规则。重点介绍了这些指令在逆向工程中的分析方法和应用场景,帮助读者准确理解程序逻辑并进行高效开发与逆向分析。
ARM 汇编指令级说明
这个指令的特点是它会将一个寄存器中的值和另一个寄存器中的值相加,其中第二个寄存器的值作为一个位偏移量来进行操作,从而得到一个地址,然后将这个地址中的两个字节无符号数相加,结果存储回第一个寄存器中。例如:asrs r1, r2, #3 表示将寄存器r2的值向右移动3个位,并用符号位填充左侧空缺的位,并将结果存储到寄存器r1中,并设置条件码寄存器以表明结果是否小于、等于或大于零。例如:adcs r0, r1, r2,将r1和r2相加,再加上上一次比较结果中的进位值,结果和新的进位值都存储在r0中。
ARM 汇编语言编程学习笔记(1)
Thumb指令集是ARM指令集的子集,其性能更低,但是代码密度更高,功耗更低。 Thumb指令集分为Thumb-1指令集和Thumb-2指令集,其中Thumb-1指令集是16位指令集,而Thumb-2指令集在Thumb-1的基础上增加了一些32位指令,其性能与ARM指令集类似。...
ARM全汇编指令(详细)整理附实例快速掌握
本文主要整理了arm常用的汇编指令,同时通过实例进一步讲述语句的用法。通用寄存器是一组用于存储数据和地址的寄存器。在 ARM 架构的不同版本中,这些寄存器的数量和命名有所不同。在 ARMv7 和之前的版本中,有 16 个通用寄存器,编号从 R0 到 R15。R0 到 R14 用于存储数据和地址。R15 通常被称为程序计数器(PC),用于存储下一条指令的地址。在 ARMv8 和之后的版本中,有 31 个通用寄存器,编号从 X0 到 X30。X0 到 X28 用于存储数据和地址。
thumb指令和arm指令
参考https://www.embedded.com/introduction-to-arm-thumb/ 一、为什么一个芯片需要thumb和arm两套指令集 许多复杂的功能在复杂指令集(CISC)处理器上执行只需要单一的一条指令,即可,虽然可能有点慢,在精简指令集处理器上可能需要多条指令,所以在精简指令集(RISC)CPU上为了减少额外的指令对内存的消耗,考虑引入thumb指令集到处理器。 现在最受欢迎的32位微处理器许多都使用RISC技术,不像CISC处理器,RISC引擎每一个时钟周期(个人感觉应
ARM指令——跳转指令
ARM汇编指令
【ARM汇编】ARM 指令集和Thumb 指令集
指令集汇总关于指令集ARM指令集Thumb指令集简单的指令集操作 关于指令集 指令集是汇编的基础,是芯片的架构,不懂指令集看着汇编就只能干瞪眼了,所以把ARM指令集全都记录下来做个笔记。 可能会和WIN32的指令集有出入,比如WIN32中MOV可以把数据从内存中加载到寄存器中去,但在ARM的RISC结构中,MOV只能将数据从寄存器移动到寄存器,WIM32的看小甲鱼的视频。说白了X86是复杂指令集(CISC),ARM是精简指令集(RISC)。 复杂指令集是将很多操作集成起来,精简是可以很细节的去处理。 51的
ARM 指令集 和 Thumb 指令集
From:https://gitee.com/lsliushuang/ASM/blob/master/arm汇编.txt ARM 汇编指令集汇总:https://blog.csdn.net/qq_40531974/article/details/83897559 ARM 指令集详解(超详细!带实例!):https://blog.csdn.net/mickey35/article/details/82011449 ARM 基础编程实验:https://blog.csdn.net/qq_405319...
ARM 伪指令和 ARM 宏指令
ARM 伪指令段定义伪指令 格式:AREA <sectionname> {<attr>}{,<attr>}…sectionname:段名,若段名以数字开头,则必须用符号“|”扩起来,如|1_test| attr:属性字段,多个属性字段用逗号分隔 属性 含义 备注 CODE 代码段 默认读/写属性为READONLY DATA 数据段 默认读/写属性为READWRITE
ARM笔记-ARM指令集
ARM指令集笔记
ARM汇编指令以及伪指令
文章目录ARM寄存器ARM寻址方式数据处理指令转移指令程序状态寄存器访问指令加载/存储指令异常指令伪指令ARM的存储系统ATPCS介绍异常中断处理ARM链接器 ARM寄存器 R13:栈指针寄存器(SP) R14:连接寄存器(LR) R15:程序计数器(PC) 由于ARM指令是字对齐,PC值的第0位和第1位总为0 ARM寻址方式 数据处理指令 转移指令 程序状态寄存器访问指令 加载/存储指令 异常指令 伪指令 ARM的存储系统 ATPCS介绍 异常中断处理 ARM链接器 ...
ARM指令集
ARM指令集 http://blog.chinaunix.net/uid-20769502-id-112445.html ARM指令的基本格式 ARM指令的基本格式为: <Opcode> {<Cond>} {S} <Rd>, <Rn> { , <Opcode2> } 其中,<>内的项是必需的,{}内的项是可选的。 1)Opcode项 Opcode是指令助记符,即操作码,说明...
ARM指令格式
CPSR (Current Program Status Register)特殊的寄存器,用于存储当前的程序状态信息。
ARM指令集详解
ARM指令集详解 1. 汇编 1.1. 通用寄存器 通用寄存器 37个寄存器,31个通用寄存器,6个状态寄存器,R13堆栈指针sp,R14返回指针,R15为PC指针, cpsr_c代表的是这32位中的低8位,也就是控制位 CPSR有4个8位区域:标志域(F)、状态域(S)、扩展域(X)、控制域(C) MSR - Load specified fields of...
935




被折叠的 条评论
为什么被折叠?



