ARM汇编指令详解:MRS、MSR与加载/存储指令

需积分: 10 13 下载量 3 浏览量 更新于2024-09-25 收藏 178KB PDF 举报
"ARM汇编指令.pdf" ARM汇编指令是编程者与ARM架构微处理器交互的基础,它提供了低级别的控制,使得程序员能够精确地管理硬件资源。本文主要介绍了两个重要的ARM汇编指令:MRS和MSR,以及加载/存储指令中的LDR。 一、程序状态寄存器访问指令 1. MRS指令(Move from Status Register to Register) MRS指令允许程序员将程序状态寄存器(CPSR或SPSR)的内容复制到一个通用寄存器中。CPSR包含了运行时处理器的状态信息,如条件标志、中断禁止位等。MRS指令常用于在需要修改程序状态寄存器的值时,先读取其内容,修改后写回。例如,`MRS R0, CPSR`会将CPSR的内容移动到R0寄存器,以便后续处理。 2. MSR指令(Move to Status Register from Register) MSR指令则相反,它将通用寄存器或立即数的内容写入到程序状态寄存器的特定域中。这通常用于设置或更改CPSR或SPSR的特定位,如条件标志、状态位、扩展位和控制位。例如,`MSR CPSR_c, R0`会将R0的内容写入CPSR的控制位域,而其他域保持不变。 二、加载/存储指令 加载/存储指令在ARM汇编中用于数据在寄存器和存储器之间的传输。 1. LDR指令(Load Register) LDR指令用于从内存中加载一个32位的字数据到指定的目的寄存器。这种指令非常常见,特别是在需要从内存中获取数据进行处理时。例如,`LDR R0, [R1]`会将R1地址指向的内存位置的32位字数据加载到R0寄存器。如果目标寄存器是程序计数器PC,LDR指令还可以用于程序跳转,因为它会将加载的地址解释为新的程序地址。 这些指令是编写ARM汇编代码的基础,理解并熟练运用它们对于进行底层系统编程、驱动开发或者性能敏感的应用至关重要。通过灵活组合这些指令,开发者可以实现复杂的计算和控制逻辑,有效地利用ARM处理器的性能。
2021-08-30 上传
原作者:宛城布衣。 本文件已移除PDF签名,如内容有误,欢迎大家指正。 目录 前言 i 目录 I ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令格式7 第 2 个操作数7 #immed_8r 7 Rm8 Rm,shift8 条件码9 ARM 存储器访问指令 11 LDR 和 STR 11 LDM 和 STM14 SWP 17 ARM 数据处理指令19 数据传送指令20 MOV 20 MVN 20 算术逻辑运算指令20 ADD 20 SUB21 RSB 21 ADC 21 SBC 21 RSC 22 AND 22 ORR22 EOR22 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII BIC 23 第 I 页常用 ARM 指令集及汇编 Ver:1010 比较指令23 CMP 23 CMN23 TST24 TEQ24 乘法指令25 MUL25 MLA25 UMULL25 UMLAL26 SMULL 26 SMLAL 26 ARM 跳转指令27 B27 BL27 BX 27 ARM 协处理器指令28 CDP28 LDC29 STC 29 MCR30 MRC30 ARM 杂项指令31 SWI 31 MRS 32 MSR 33 ARM 伪指令34 ADR 35 ADRL35 LDR36 NOP37 Thumb 指令集39 Thumb 指令集与 ARM 指令集的区别 39 Thumb 存储器访问指令 40 LDR 和 STR 41 PUSH 和 POP 43 LDMIA 和 STMIA 43 Thumb 数据处理指令 45 数据传送指令46 MOV 46 MVN 46 NEG47 算术逻辑运算指令47 ADD 47 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 第 II 页常用 ARM 指令集及汇编 Ver:1010 SUB48 ADC 49 SBC 49 MUL50 AND 50 ORR50 EOR51 BIC 51 ASR51 LSL52 LSR 52 ROR53 比较指令53 CMP 53 CMN54 TST54 Thumb 跳转指令 55 B 55 BL55 BX 55 Thumb 杂项指令 56 SWI 56 Thumb 伪指令 57 ADR 57 LDR57 NOP58 伪指令59 符号定义伪指令59 GBLA、GBLL、GBLS 59 LCLA、LCLL、LCLS60 SETA、SETL、SETS 61 RLIST61 CN 62 CP62 DN、SN62 FN63 数据定义伪指令63 LTORG64 MAP64 FIELD 65 SPACE66 DCB 66 DCD 和 DCDU67 DCDO 67 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 第 III 页常用 ARM 指令集及汇编 Ver:1010 DCFD 和 DCFDU68 DCFS 和 DCFSU68 DCI69 DCQ 和 DCQU69 DCW 和 DCWU 70 报告伪指令70 ASSERT 70 INFO 71 OPT 71 TTL 和 SUBT 72 汇编控制伪指令73 IF、ELSE 和 ENDIF73 MACRO 和 MEND 74 WHIL 和 WEND 75 杂项伪指令76 ALIGN 77 AREA78 CODE16 和 CODE32 79 END 80 ENTRY80 EQU 81 EXPORT 和 GLOBAL 81 IMPORT 和 EXTERN 82 GET 和 INCLUDE 83 INCBIN83 KEEP83 NOFP 84 REQUIRE 84 PEQUIRE8 和 PRESERVE8 84 RN 84 ROUT85 ARM 伪指令86 ADR 86 ADRL86 LDR86