大家好,今天给大家介绍【干货来袭】arm程序汇编指令总结,让你更高效的学习!,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。
ARM汇编指令是嵌入式和移动开发中的重要组成部分。以下是一些常用的ARM汇编指令的总结,帮助你更高效地学习:
数据处理指令
-
MOV:数据传送指令,将一个值复制到寄存器中。
assembly
MOV R0, #10 ; 将立即数10传送到R0寄存器
ADD:加法指令,将两个操作数相加,并将结果存放到目的寄存器中。
assembly复制代码
ADD R0, R1, R2 ; 将R1和R2的内容相加,结果存放在R0中
-
SUB:减法指令,从第一个操作数中减去第二个操作数,并将结果存放到目的寄存器中。
assembly复制代码
SUB R0, R1, R2 ; 从R1中减去R2的内容,结果存放在R0中
-
AND、OR、XOR:位逻辑运算指令,分别执行与、或、异或操作。
assembly复制代码
AND R0, R1, R2 ; R0 = R1 AND R2 |
OR R0, R1, R2 ; R0 = R1 OR R2 |
XOR R0, R1, R2 ; R0 = R1 XOR R2 |
-
LSL、LSR、ASR:移位指令,分别执行逻辑左移、逻辑右移和算术右移操作。
assembly复制代码
LSL R0, R1, #2 ; R0 = R1 << 2 | |
LSR R0, R1, #2 ; R0 = R1 >> 2 (逻辑右移) | |
ASR R0, R1, #2 ; R0 = R1 >> 2 (算术右移) |
-
MUL:乘法指令,将两个寄存器的内容相乘,并将结果存放到目的寄存器中。
assembly复制代码
MUL R0, R1, R2 ; R0 = R1 * R2 |
-
CMP:比较指令,用于设置条件标志,以便后续的条件分支指令使用。
assembly复制代码
CMP R0, R1 ; 比较R0和R1的值,并设置条件标志 |
分支指令
-
B:无条件分支指令,跳转到指定的地址执行。
assembly复制代码
B Label ; 无条件跳转到Label标签处执行 |
- BL:带链接的无条件分支指令,在跳转到指定地址执行前,将返回地址保存到链接寄存器LR中。
- BEQ、BNE、BCS、BCC、BMI、BPL、BVS、BVC、BHI、BLS、BGE、BLT、BGT、BLE:条件分支指令,根据条件标志的状态决定是否跳转。
- CBZ 和 CBNZ:比较并分支指令,如果寄存器为零(或非零),则跳转到指定地址。
- TBB 和 TBH:表格分支指令,根据寄存器中的值作为偏移量来计算跳转地址。
加载和存储指令
- LDR:从内存中加载数据到寄存器中。
- STR:将寄存器中的数据存储到内存中。
- LDMIA 和 STMIA:多寄存器加载和存储指令,用于批量加载或存储多个寄存器的内容。
- LDRB、LDRH、LDRSB、LDRSH:按字节或半字加载数据,并可选择进行符号扩展。
- STRB 和 STRH:按字节或半字存储数据。
- LDM 和 STM:多寄存器加载和多寄存器存储指令的另一种形式。
- PUSH 和 POP:用于模拟堆栈操作的伪指令,实际上是LDMIA和STMIA的特例。
协处理器指令
用于与协处理器进行交互的指令集,如浮点运算单元(FPU)等。这些指令通常与具体的硬件实现相关。
其他指令和伪指令
- NOP:无操作指令,不执行任何操作。通常用于插入延时或占位。
- SWI 或 SVC:软件中断指令,用于调用操作系统服务或执行特定的系统调用。
- .global、.section、.ascii 等:汇编器伪指令,用于控制汇编过程或定义数据段等。
- MACRO 和 MEND:宏定义
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!
点击找小助理免费领取资料