arm指令英文全称及功能
指令格式: 指令{条件}{S} {目的 Register}, {OP1},{OP2} “{ }“中的内容可选。即,可以不带条件只有目的寄存器,或 只有目的寄存器和操作数1,也可以同时包含所有选项。 “S” 决定指令的操作是 否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值 助记符 英文全称 示例、功能 B Branch 跳转指令 B Label ;程序无条件跳转到标号Label处执行 BL Branch with Link 带返回的跳转指令 BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到 R14中 BLX Branch with Link and exchange 带返回和状态切换的跳转指令 BLX Label ;从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作 状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器 R14中 跳 转 指 令 BX Branch and exchange 带状态切换的跳转指令 BX Label ;跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指 令,也可以是Thumb指令 MOV Move 数据传送 MOV R1,R0,LSL#3 ;将寄存器R0 的值左移3位后传送到R1 MVN Move NOT 数据非传送 MVN R0,#0 ;将立即数0取反传送到寄存器R0中,完成后R0=-1 CMP Compare 比较指令 CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的 标志位 CMN Compare negative 负数比较指令 CMN R1,R0 ;将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的 标志位 TST Test 位测试指令 TST R1,#0 xffe ;将寄存器R1的值与立即数0 xffe按位与,并根据结果设置 CPSR的标志位 TEQ Test equivalence 相等测试指令 TEQ R1,R2 ;将寄存器R1的值与寄存器R2的值按位异或,并根据结果设置 CPSR的标志位 ADD Add 加法运算指令 ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 << 1) ADC Add with carry 带进位加法 ADCS R2,R6,R10 ; R2 = R6+R10+!C,且更新CPSR的进位标志位 SUB Subtract 减法运算指令 SUB R0,R1,#256 ; R0 = R1 – 256 SBC Subtract with carry 带进位减法指令 SUBS R0,R1,R2 ; R0 = R1 - R2 - !C,并根据结果设置CPSR的进位标志位 RSB Reverse subtract 逆向减法指令 RSB R0,R1,R2 ; R0 = R2 – R1 RSC Reverse subtract with carry 带进位逆向减法指令 RSC R0,R1,R2 ; R0 = R2 – R1 - !C AND And 逻辑与操作指令 AND R0,R0,#3 ; 该指令保持R0 的0、1位,其余位清零。 ORR OR 逻辑或操作指令 ORR R0,R0,#3 ; 该指令设置R0 的0、1位,其余位保持不变。 EOR Exclusive OR 逻辑异或操作指令 EOR R0,R0,#3 ; 该指令反转R0 的0、1位,其余位保持不变。 BIC Bit clear 位清除指令 BIC R0,R0,#0b1011 ; 该指令清除 R0 中的位 0、1、和 3,其余的位保持不 变。 数 据 处 理 CLZ Count left zero 计算操作数最高端0的个数 MUL Multiply 32位乘法指令 MUL R0,R1,R2 ;R0 = R1 × R2 MLA Multiply and accumulate 32位乘加指令 MLAS R0,R1,R2,R3 ;R0 = R1 × R2 + R3,同时设置 CPSR中的相关条件标志 位 乘 加 指 令 SMULL Signed multiply long SMULL R0,R1,R2,R3 ;R0 = (R2 × R3)的低32位 R1 = (R2 × R3)64位有符号数乘法指令 的高32位 SMLAL Signed mul l and accumulate l 64位有符号数乘加指令 SMLAL R0,R1,R2,R3 ;R0 =(R2 × R3)的低32位+R0; R1 =(R2 × R3)的高32位+ R1 UMULL Unsigned multiply long 64位无符号数乘法指令 UMULL R0,R1,R2,R3 ;R0 = (R2 × R3)的低32位;R1 =(R2 × R3)的 高32位 UMLAL Unsigned mul&accumulate lon 64位无符号数乘法指令 UMLAL R0,R1,R2,R3 ;R0 =(R2 × R3)的低位+R0;R1 =(R2 × R3)的 高32位+R1 MRS Move PSR to register 程序状态寄存器到通用寄存器的数 据传送指令 MRS R0,CPSR ;传送CPSR的内容到R0 PSR 访问 MSR Move register to PSR通用寄存 器到程序状态寄存器的数据传送指 令 MSR CPSR_c ,R0 ;传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域 LDR Load word 字数据加载指令 LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入R0,并将新地址 R1+R2写入R1。 LDRB Load byte 字节数据加载指令 LDRB R0,[R1,#8] ;将存储器地址为R1+8的字节数据读入R0,并将R0的高 24位清零 LDRH Load half word 半字数据加载指令 LDRH R0,[R1] ;将存储器地址为 R1的半字数据读入寄存器R0,并将R0的高16 位清零 LDM Load multiple 批量数据加载指令 LDMFD R13!,{R0,R4-R12,PC} ;将堆栈内容恢复到寄存器(R0,R4到 R12,LR) STR Store 字数据存储指令 STR R0,[R1],#8 ;将R0中的字数据写入R1为地址的存储器中,并将新地址 R1+8写入R1 STRB Store byte 字节数据加载存储指令 STRB R0,[R1,#8] ;将寄存器R0中的字节数据写入以R1+8为地址的存储器 中 STRH Store half word 半字数据存储指令 STRH R0,[R1,#8] ;将寄存器R0 中的半字数据写入以R1+8为地址的存储器中 加载/ 存储 指令 STM Store multiple 批量数据存储指令 STMFD R13!,{R0,R4-R12,LR} ;将寄存器列表中的寄存器(R0,R4到 R12,LR)存入堆栈 SWP Swap word 字数据交换指令 SWP R0,R1,[R2] ;R2所