logo资料库

ARM V7 指令集 速查表 (中文).pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
ARM® 和 Thumb®-2 指令集 快速参考卡 表关键字 Rm {, } C*,V* x、y 请参阅表寄存器,可选择移动常数个位 请参阅表灵活的操作数 2。移位和循环移位只可用于 Operand2。 请参阅表 PSR 字段。 APSR(应用程序状态寄存器)、CPSR(当前处理器状态寄存器)或 SPSR(保存的处理器状态寄存 器) 在体系结构 v4 及更早版本中,标记不可预知;在体系结构 v5 及以后版本中,标记保持不变。 可为 Rs 或一个立即数移位值。 每种移位类型的允许值与 表寄存器,可选择移动常数个位 中的相同。 B 或 T,B 表示半寄存器 [15:0],T 表示半寄存器 [31:16]。 ARM:32 位常数,由 8 位值向右循环移偶数位生成。 Thumb: 32 位常数,由 8 位值左移任意位生成, 格式模式为 0xXYXYXYXY、0x00XY00XY 或 0xXY00XY00。 {IA|IB|DA|DB} 请参阅并行指令的前缀 之后增加、之前增加、之后减小、之前减小。 IB 和 DA 不可用于 Thumb 状态下。 如果省略,则缺省为 IA。 B、SB、H 或 SH,含义分别为字节、有符号字节、半字和有符号半字。 SB 和 SH 不可用于 STR 指令。 以逗号隔开的寄存器列表,括在大括号 { 和 } 内。 作为 ,不能包含 PC。 作为 ,包含 PC。 nzcvq(ALU 标记 PSR[31:27])或 g(SIMD GE 标记 PSR[19:16]) § +/- SPm {X} {!} {S} {T} {R} 请参阅表 ARM 体系结构版本。 + 或 –。 (+ 可省略。) 中断标记。 一个或多个 a、i、f(中止、中断、快速中断)。 请参阅表处理器模式 所指定的处理模式的 SP 位域的最低有效位。 位域宽度, + 必须 <= 32。 如果有 X,则 RsX 为 Rs 循环 16 位生成。 否则,RsX 为 Rs。 如果有 !,则在数据传送完毕后更新基址寄存器 (前变址)。 如果有 S,则更新条件标记。 如果有 T,则带有用户模式特权。 如果存在 R,则对结果进行舍入,否则将其截断。 运算 加法 地址 减法 并行 算法 饱和 加法 带进位 宽 饱和 {加倍} PC 相对的寻址 减法 带进位 宽 反向减法 带进位反向减法 饱和 {加倍} 从异常中返回,无出栈。 半字方式加法 半字方式减法 字节方式加法 字节方式减法 § 汇编器 ADD{S} Rd, Rn, ADC{S} Rd, Rn, T2 ADD Rd, Rn, # 5E Q{D}ADD Rd, Rm, Rn ADR Rd,
§ 汇编器 MUL{S} Rd, Rm, Rs MLA{S} Rd, Rm, Rs, Rn T2 MLS Rd, Rm, Rs, Rn S 更新 N Z C* N Z C* 操作 Rd := (Rm * Rs)[31:0] Rd := (Rn + (Rm * Rs))[31:0] Rd := (Rn – (Rm * Rs))[31:0] UMULL{S} RdLo, RdHi, Rm, Rs UMLAL{S} RdLo, RdHi, Rm, Rs UMAAL RdLo, RdHi, Rm, Rs SMULL{S} RdLo, RdHi, Rm, Rs SMLAL{S} RdLo, RdHi, Rm, Rs N Z C* V* RdHi,RdLo := unsigned(Rm * Rs) N Z C* V* RdHi,RdLo := unsigned(RdHi,RdLo + Rm * Rs) RdHi,RdLo := unsigned(RdHi + RdLo + Rm * Rs) N Z C* V* RdHi,RdLo := signed(Rm * Rs) N Z C* V* RdHi,RdLo := signed(RdHi,RdLo + Rm * Rs) 无符号长乘法,两次加法 6 (如果 Rs 为 Rd,则 S 可用于 Thumb-2 中) 说明 N、S ARM 和 Thumb-2 指令集 快速参考卡 运算 乘法 乘法 并累加 乘减 无符号长乘法 长整数无符号乘加 长整数有符号乘法 并乘加(长整数) 16 * 16 位 32 * 16 位 16 * 16 位并累加 32 * 16 位并累加 长整数 16 * 16 位并累加 两次有符号乘法,乘积相加 并累加 并累加(长整数) 两次有符号乘法,乘积相减 并累加 并累加(长整数) 有符号高位字乘法 并累加 乘减 带内部 40 位累加 组合半字 半字 有符号或无符号 移动 求反移动 移到顶部 宽 40 位累加器到寄存器 寄存器到 40 位累加器 算术右移 逻辑左移 逻辑右移 向右循环移 除法 移动 数据 移位 带扩展的向右循环移 计算前导零数目 比较 比较 与负数比较 逻辑 测试 相等测试 与 异或 或 或非 位清零 5E SMULxy Rd, Rm, Rs 5E SMULWy Rd, Rm, Rs 5E SMLAxy Rd, Rm, Rs, Rn 5E SMLAWy Rd, Rm, Rs, Rn 5E SMLALxy RdLo, RdHi, Rm, Rs 6 6 6 6 6 6 6 6 6 XS MIA Ac, Rm, Rs XS MIAPH Ac, Rm, Rs XS MIAxy Ac, Rm, Rs RM Rd, Rn, Rm SMUAD{X} Rd, Rm, Rs SMLAD{X} Rd, Rm, Rs, Rn SMLALD{X} RdLo, RdHi, Rm, Rs SMUSD{X} Rd, Rm, Rs SMLSD{X} Rd, Rm, Rs, Rn SMLSLD{X} RdLo, RdHi, Rm, Rs SMMUL{R} Rd, Rm, Rs SMMLA{R} Rd, Rm, Rs, Rn SMMLS{R} Rd, Rm, Rs, Rn MOV{S} Rd, MVN{S} Rd, N Z C N Z C T2 MOVT Rd, # T2 MOV Rd, # XS MRA RdLo, RdHi, Ac XS MAR Ac, RdLo, RdHi 5 ASR{S} Rd, Rm, LSL{S} Rd, Rm, LSR{S} Rd, Rm, ROR{S} Rd, Rm, RRX{S} Rd, Rm CLZ Rd, Rm CMP Rn, CMN Rn, TST Rn, TEQ Rn, AND{S} Rd, Rn, EOR{S} Rd, Rn, ORR{S} Rd, Rn, T2 ORN{S} Rd, Rn, BIC{S} Rd, Rn, Rd := Rm[x] * Rs[y] Rd := (Rm * Rs[y])[47:16] Rd := Rn + Rm[x] * Rs[y] Rd := Rn + (Rm * Rs[y])[47:16] RdHi,RdLo := RdHi,RdLo + Rm[x] * Rs[y] Rd := Rm[15:0] * RsX[15:0] + Rm[31:16] * RsX[31:16] Rd := Rn + Rm[15:0] * RsX[15:0] + Rm[31:16] * RsX[31:16] RdHi,RdLo := RdHi,RdLo + Rm[15:0] * RsX[15:0] + Rm[31:16] * RsX[31:16] Rd := Rm[15:0] * RsX[15:0] – Rm[31:16] * RsX[31:16] Rd := Rn + Rm[15:0] * RsX[15:0] – Rm[31:16] * RsX[31:16] RdHi,RdLo := RdHi,RdLo + Rm[15:0] * RsX[15:0] – Rm[31:16] * RsX[31:16] Rd := (Rm * Rs)[63:32] Rd := Rn + (Rm * Rs)[63:32] Rd := Rn – (Rm * Rs)[63:32] Ac := Ac + Rm * Rs Ac := Ac + Rm[15:0] * Rs[15:0] + Rm[31:16] * Rs[31:16] Ac := Ac + Rm[x] * Rs[y] Rd := Rn / Rm Rd := Operand2 Rd := 0xFFFFFFFF EOR Operand2 为 SDIV(有符号)或 UDIV(无符号) 请参阅移位指令 Rd[31:16] := imm16,Rd[15:0] 不受影响,imm16 的范围为 0-65535 Rd[15:0] := imm16,Rd[31:16] = 0,imm16 范围为 0-65535 RdLo := Ac[31:0],RdHi := Ac[39:32] Ac[31:0] := RdLo,Ac[39:32] := RdHi[7:0] Rd := ASR(Rm, Rs|sh) Rd := LSL(Rm, Rs|sh) Rd := LSR(Rm, Rs|sh) Rd := ROR(Rm, Rs|sh) Rd := RRX(Rm) 与 MOV{S} Rd, Rm, ASR 相同 与 MOV{S} Rd, Rm, LSL 相同 与 MOV{S} Rd, Rm, LSR 相同 与 MOV{S} Rd, Rm, ROR 相同 与 MOV{S} Rd, Rm, RRX 相同 N Z C N Z C N Z C N Z C N Z C Rd := Rm 中的前导零的数目 N Z C V 更新 Rn – Operand2 的 CPSR 标记 N Z C V 更新 Rn + Operand2 的 CPSR 标记 N Z C N Z C N Z C N Z C N Z C N Z C N Z C 更新 Rn AND Operand2 的 CPSR 标记 更新 Rn EOR Operand2 的 CPSR 标记 Rd := Rn AND Operand2 Rd := Rn EOR Operand2 Rd := Rn OR Operand2 Rd := Rn OR NOT Operand2 Rd := Rn AND NOT Operand2 S S S S S Q Q Q Q Q Q T N N N N N N N N N N N N T N
ARM 和 Thumb-2 指令集 快速参考卡 运算 位域 组合 有符号 扩展 无符号 扩展 有符号 扩展, 带加法 无符号 扩展, 带加法 反转 位域清零 位域插入 有符号位域提取 无符号位域提取 组合:低半字 + 高半字 组合:高半字 + 低半字 半字到字 两个字节到半字 字节到字 半字到字 两个字节到半字 字节到字 半字到字,加法 两个字节到半字,加法 字节到字,加法 半字到字,加法 两个字节到半字,加法 字节到字,加法 字中的位 字中的字节 两个半字中的字节 低半字中的字节,符号扩展 选择 选择字节 条件判断 条件判断 跳转 跳转 带链接的跳转 跳转并交换 带链接和交换 (1) § T2 T2 T2 T2 6 6 6 6 6 6 6 6 6 6 6 6 6 6 T2 6 6 6 6 T2 4T 5T 汇编器 BFC Rd, #, # BFI Rd, Rn, #, # SBFX Rd, Rn, #, # UBFX Rd, Rn, #, # PKHBT Rd, Rn, Rm{, LSL #} PKHTB Rd, Rn, Rm{, ASR #} SXTH Rd, Rm{, ROR #} SXTB16 Rd, Rm{, ROR #} SXTB Rd, Rm{, ROR #} UXTH Rd, Rm{, ROR #} UXTB16 Rd, Rm{, ROR #} UXTB Rd, Rm{, ROR #} SXTAH Rd, Rn, Rm{, ROR #} SXTAB16 Rd, Rn, Rm{, ROR #} SXTAB Rd, Rn, Rm{, ROR #} UXTAH Rd, Rn, Rm{, ROR #} UXTAB16 Rd, Rn, Rm{, ROR #} UXTAB Rd, Rn, Rm{, ROR #} RBIT Rd, Rm REV Rd, Rm REV16 Rd, Rm REVSH Rd, Rm SEL Rd, Rn, Rm IT{pattern} {cond} B
ARM 和 Thumb-2 指令集 快速参考卡 加载和存储单个数据项 加载 或存储 字、字节 或半字 直接偏移量 加载或存储 双字 后变址,立即数 寄存器偏移量 后变址,寄存器 PC 相对的 直接偏移量 后变址,立即数 寄存器偏移量 后变址,寄存器 PC 相对的 § 5E 5E 5E 5E 5E 汇编器 {size}{T} Rd, [Rn {, #}]{!} {size}{T} Rd, [Rn], # {size} Rd, [Rn, +/-Rm {, }]{!} {size}{T} Rd, [Rn], +/-Rm {, } {size} Rd,
ARM 和 Thumb-2 指令集 快速参考卡 协处理器运算 数据操作 从协处理器移到 ARM 寄存器 两个 ARM 寄存器移动 另两个 ARM 寄存器移动 从 ARM 寄存器移到协处理器 两个 ARM 寄存器移动 另两个 ARM 寄存器移动 加载和存储,前变址 加载和存储,零偏移量 加载和存储,后变址 其他运算 交换字 交换字节 存储返回状态 从异常中返回 断点 安全监控调用 超级用户调用 无操作 提示 调试提示 数据内存屏障 数据同步屏障 指令同步屏障 设置事件 等待事件 等待中断 Yield § 汇编器 CDP{2} , , CRd, CRn, CRm{, } MRC{2} , , Rd, CRn, CRm{, } 5E MRRC , , Rd, Rn, CRm MRRC2 , , Rd, Rn, CRm 6 MCR{2} , , Rd, CRn, CRm{, } 5E MCRR , , Rd, Rn, CRm MCRR2 , , Rd, Rn, CRm 6 {2} , CRd, [Rn, #+/-]{!} op: LDC 或 STC。偏移量: 0 到 1020 范围内 4 的倍数。 由协处理器定义 {2} , CRd, [Rn] {, 8-bit copro. option} op: LDC 或 STC。 由协处理器定义 {2} , CRd, [Rn], #+/- op: LDC 或 STC。偏移量: 0 到 1020 范围内 4 的倍数。 由协处理器定义 § 汇编器 SWP Rd, Rm, [Rn] SWPB Rd, Rm, [Rn] 6 SRS{IA|IB|DA|DB} SP{!}, # 6 RFE{IA|IB|DA|DB} Rn{!} 5 BKPT Z SMC SVC 操作 temp := [Rn],[Rn] := Rm,Rd := temp。 temp := ZeroExtend([Rn][7:0]),[Rn][7:0] := Rm[7:0],Rd := temp [SPm] := LR,[SPm + 4] := CPSR PC := [Rn],CPSR := [Rn + 4] 预取中止或进入调试状态。 指令中编码为 16 位的位域。 安全监控调用异常。 指令中编码为 4 位的位域。 以前为 SMI。 超级用户调用异常。 指令中编码为 24 位的位域。 以前为 SWI。 6K NOP 7 DBG 7 DMB 7 DSB 7 ISB 6K SEV 6K WFE 6K WFI 6K YIELD 无操作,可能不花费任何时间。 向调试系统及其相关系统发送提示。 确保内存访问的观察顺序。 确保内存访问完成。 刷新处理器管道并跳转预测逻辑。 向多处理器系统发送事件信号。 如果不执行,则为 NOP。 等待事件、IRQ、FIQ、不精确的中止或调试进入请求。 如果不执行,则为 NOP。 等待 IRQ、FIQ、不精确的中止或调试进入请求。 如果不执行,则为 NOP。 生成对其他线程的控制。 如果不执行,则为 NOP。 操作 说明 由协处理器定义 由协处理器定义 由协处理器定义 由协处理器定义 由协处理器定义 由协处理器定义 由协处理器定义 C2 C2 C C2 C C2 C2 C2 说明 A、D A、D C、I C、I C、N N N、V C C C N N N N 说明 A B C C2 备选格式 2 可用于 ARMv5 中。它可提供另一种备选运算。 在 ARM 状态下,备选格式不允许使用条 Thumb 状态下不可用。 在 Thumb 状态下可带有条件,且无须在 IT 块内。 ARM 状态中不允许使用条件代码。 件代码。 D G I L N 已弃用。 使用 LDREX 和 STREX 来代替。 根据各个运算的结果更新 CPSR 中的 4 个 GE 标记。 IA 是缺省值,通常省略。 ARM: 。 16 位 Thumb: 0 到 1020 范围内 4 的倍数。32 位 Thumb:0-4095。 在 Thumb-2 代码中,此指令的某些格式或所有格式为 16 位(窄)指令。 有关详细信息,请参 阅 Thumb 16 位指令集 (UAL) 快速参考卡。 P Q R S T U V 在 Thumb 状态下,此指令中的 Rn 可为 PC。 如果发生饱和(加法或减法)或溢出(乘法),则设置 Q 标记。 使用 MRS 和 MSR 读取和重置 Q 标记。 在 ARM 指令中, 范围为 1-32。 S 修饰符在 Thumb-2 指令中不可用。 ARM 状态中不可用。 不允许在 IT 块中使用。 不允许在 ARM 或 Thumb 状态下使用条件代码。 如果 NOP 指令不可用,汇编器会插入适当的指令。
ARM 和 Thumb-2 指令集 快速参考卡 ARM 体系结构版本 n nT,nJ 5E T2 6K 7MP Z RM XS ARM 体系结构版本 n 及更高版本 ARM 体系结构版本 n 及更高版本的 T 或 J 变体 ARM v5E、6 版及更高版本 ARM v6 及更高版本的所有 Thumb-2 版本 支持 ARM 指令的 ARMv6K 及更高版本,支持 Thumb 的 ARMv7 实现多重处理扩展的 ARMv7 体系结构 ARMv6 及更高版本的所有安全扩展版本 仅限 ARMv7-R 和 ARMv7-M XScale 协处理器指令 灵活的操作数 2 立即值 寄存器,可选择移动常数个位(请参阅下文) 寄存器,寄存器逻辑左移 寄存器,寄存器逻辑右移 寄存器,寄存器算术右移 寄存器,寄存器向右循环移 (不进行移位) 寄存器,可选择移动常数个位 Rm Rm, LSL # Rm, LSR # Rm, ASR # Rm, ROR # Rm, RRX 带扩展的向右循环移 向右循环移 逻辑左移 逻辑右移 算术右移 # Rm {, } Rm, LSL Rs Rm, LSR Rs Rm, ASR Rs Rm, ROR Rs 与 Rm, LSL #0 相同 允许移动 0-31 位 允许移动 1-32 位 允许移动 1-32 位 允许移动 1-31 位 PSR 字段 后缀 c f s x (至少使用一个后缀) 含义 控制字段掩码字节 标记字段掩码字节 状态字段掩码字节 扩展字段掩码字节 PSR[7:0] PSR[31:24] PSR[23:16] PSR[15:8] 所有权声明 除非本所有权声明在下面另有说明,否则带有 ® 或 ™ 标记的词语和徽标是 ARM Limited 在欧盟和其他 国家/地区的注册商标或商标。 此处提及的其他品牌和名称可能是其各自所有者的商标。 除非事先得到版权所有人的书面许可,否则不得以任何形式修改或复制本文档包含的部分或全部信息 以及产品说明。 本文档描述的产品还将不断发展和完善。 ARM Limited 将如实提供本文档所述产品的所有特性及其使 用方法。 但是,所有暗示或明示的担保,包括但不限于对特定用途适销性或适用性的担保,均不包括在 内。 本参考卡仅旨在帮助读者使用产品。 对由于使用本参考卡中的任何信息,或由于本参考卡的信息错误、 遗漏,以及产品的错误使用所造成的任何损失,ARM Limited 概不负责。 条件字段 助记符 EQ NE 说明 等于 不等于 CS / HS 进位设置/无符号大于或相同 CC / LO 进位清零/无符号小于 MI PL VS VC HI LS GE LT GT LE AL 求反 正数或零 溢出 无溢出 无符号大于 无符号小于或相同 有符号大于或等于 有符号小于 有符号大于 有符号小于或等于 始终(通常省略) 说明 (VFP) 等于 不等于或无序 大于或等于或无序 小于 小于 大于或等于或无序 无序(至少一个非数字操作数) 非无序的 大于或无序 小于或等于 大于或等于 小于或无序 大于 小于或等于或无序 始终(通常省略) 所有 ARM 指令(带有注释 C 或注释 U 的除外)可在指令助记符后(即,本卡中显示的指令中的第一个空格前) 带有这些条件代码之一。 此条件在指令中编码。 所有 Thumb-2 指令(带有注释 U 的除外)可在指令助记符后带有这些条件代码之一。 此条件在前面的 IT 指令中 进行编码(条件跳转指令除外)。 指令中的条件代码必须与前面 IT 指令中的条件代码相匹配。 对于不带 Thumb-2 的处理器,唯一可带有条件代码的 Thumb 指令为 B
分享到:
收藏