常用▲RM指令集及汇编 ver:10.12 其中,B为可选后缀,若有B,则交换字节,否则交换32位字:Rd为数据从存储器加载 到的寄存器;Rm的数据用于存储到存储器中,若Rm与Rn相同,则为寄存器与存储器内容 进行交换;Rn为要进行数据交换的存储器地址,Rn不能与Rd和Rm相同 SWP指令举例如下 SWP R1,[R0];将R1的内容与R0指向的存储单元的内容进行交换 SWP R1,R2,[R0];将RO指向的存储单元内容读取一字节数据到R1中(高 24位清零),并将R2的内容写入到该内存单元中(最低字节有效) 使用SW指令可以方便地进行信号量的操作: 12C SEM EQU 0x40003000 12C SEM WAIT MOV RO, =12C SEM SWP R1,R1,[RO0];取出信号量,并设置其为0 CMP R1,#0 判断是否有信号 12 SEM WAIT;若没有信号,则等待 %%嗡%%%嗡%嗡%嗡嗡吼嗡%嗡嗡嗡哈嗡嗡%%嗡哈 By宛城布衣QQ:57523799emai:mcu8031@163cm 第18页
常用 ARM 指令集及汇编 Ver:1.0.12 其中,B 为可选后缀,若有 B,则交换字节,否则交换 32 位字:Rd 为数据从存储器加载 到的寄存器;Rm 的数据用于存储到存储器中,若 Rm 与 Rn 相同,则为寄存器与存储器内容 进行交换;Rn 为要进行数据交换的存储器地址,Rn 不能与 Rd 和 Rm 相同. SWP 指令举例如下: SWP R1,R1,[R0] ;将 R1 的内容与 R0 指向的存储单元的内容进行交换 SWP R1,R2,,[R0] ;将R0指向的存储单元内容读取一字节数据到R1中(高 24 位清零),并将 R2 的内容写入到该内存单元中(最低字节有效) 使用 SWP 指令可以方便地进行信号量的操作: 12C_SEM EQU 0x40003000 … 12C_SEM_WAIT MOV R0,#0 LDR R0,=12C_SEM SWP R1,R1,[R0] ;取出信号量,并设置其为 0 CMP R1,#0 ;判断是否有信号 BEQ 12C_SEM_WAIT ;若没有信号,则等待 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII By 宛城布衣 QQ:57523799 email: mcu8031@163.com 第 18 页
常用▲RM指令集及汇编 ver:10.12 ARM数据处理指令 数据处理指令大致可分为3类;数据传送指令(如MoV、MN,算术逻辑运算指令 (如ADD,SUM,AN),比较指令(如CMP,TST).数据处理指令只能对寄存器的内容进行操作 所有AM数据处理指令均可选择使用S后缀,以影响状态标志.比较指令CMP,CMN,TST 和TEQ不需要后缀S,它们会直接影响状态标志. ARM数据处理指令 MoⅴRd, operand2 数据转送 Rd--operand2 ov Icond) IS Mvn Rd, operand2 数据非转送 Rd←( operand2) MVN Icond] IS ADR, Rn operand加法运算指令Rd-a+ operand ADD Icond][SK SUB Rd, Rn operand2 减法运算指令 Rd←Rn- operand2 SUB Conde ISH b Rd, Rn operand2 Rd--operand2-Rn ADC Rd, Rn operand2 带进位加法 Rd-Rn+operand2+carry ADC Icond)IS SBC Rd, Rn operand2 带进位减法指令 d+Rn-operand2-(NOT)Carry BC cond IS) RSC Rd, Rn operand2 带进位逆向减法指令Rd← operand2-Ra-(No) Carry RSC Icond] [Sh AND Rd, Rn operand2 逻辑与操作指令 Rd←Rn& operand2 AND Icond] ISK 逻辑或操作指令 Rd← Rn operand2 RR Icond ISI EOR Rd, Rn operand2 逻辑异或操作指令 Rd←Rn" operand2 EOR Icond] [) BIC Rd, Rn operand2 位清除指令 Rd--Rn&(operand BIC condl IS CMP Rn, operand2 比较指令 标志N、Z、C、V-R- operand2| CMP Icond CMN Rn, operand2 负数比较指令 标志N、Z、C、VRn+ operand2 CMN Icond TST Rn, operand2 位测试指令 标志N、Z、C、V-Rn& operand2| TST cond TEQ Rn, operand2 相等测试指令 标志N、Z、C、V←Rn^ operand2| TEQ cond %%嗡%嗡嗡%嗡%嗡嗡吼嗡%嗡嗡嗡吼哈嗡嗡%嗡 By宛城布衣QQ:57523799emai:mcu8031@163cm 第19页
常用 ARM 指令集及汇编 Ver:1.0.12 ARM 数据处理指令 数据处理指令大致可分为 3 类;数据传送指令(如 MOV、MVN),算术逻辑运算指令 (如 ADD,SUM,AND),比较指令(如 CMP,TST).数据处理指令只能对寄存器的内容进行操作. 所有 ARM 数据处理指令均可选择使用 S 后缀,以影响状态标志.比较指令 CMP,CMN,TST 和 TEQ 不需要后缀 S,它们会直接影响状态标志. ARM 数据处理指令 助记符号 说明 操作 条件码位置 MOV Rd ,operand2 数据转送 Rd←operand2 MOV {cond}{S} MVN Rd ,operand2 数据非转送 Rd←(operand2) MVN {cond}{S} ADD Rd,Rn operand2 加法运算指令 Rd←Rn+operand2 ADD {cond}{S} SUB Rd,Rn operand2 减法运算指令 Rd←Rn-operand2 SUB {cond}{S} RSB Rd,Rn operand2 逆向减法指令 Rd←operand2-Rn RSB {cond}{S} ADC Rd,Rn operand2 带进位加法 Rd←Rn+operand2+carry ADC {cond}{S} SBC Rd,Rn operand2 带进位减法指令 Rd←Rn-operand2-(NOT)Carry SBC {cond}{S} RSC Rd,Rn operand2 带进位逆向减法指令 Rd←operand2-Rn-(NOT)Carry RSC {cond}{S} AND Rd,Rn operand2 逻辑与操作指令 Rd←Rn&operand2 AND {cond}{S} ORR Rd,Rn operand2 逻辑或操作指令 Rd←Rn|operand2 ORR {cond}{S} EOR Rd,Rn operand2 逻辑异或操作指令 Rd←Rn^operand2 EOR {cond}{S} BIC Rd,Rn operand2 位清除指令 Rd←Rn&(~operand2) BIC {cond}{S} CMP Rn,operand2 比较指令 标志 N、Z、C、V←Rn-operand2 CMP {cond} CMN Rn,operand2 负数比较指令 标志 N、Z、C、V←Rn+operand2 CMN {cond} TST Rn,operand2 位测试指令 标志 N、Z、C、V←Rn&operand2 TST {cond} TEQ Rn,operand2 相等测试指令 标志 N、Z、C、V←Rn^operand2 TEQ {cond} IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII By 宛城布衣 QQ:57523799 email: mcu8031@163.com 第 19 页
常用▲RM指令集及汇编 ver:10.12 数据传送指令 MOV 数据传送指令将8位图立即数或寄存器( operant2)传送到目标寄存器Rd,可用于 移位运算等操作.指令格式如下 MoV cond][s] Rd, operand2 MoV指令举例如下: MOV R1#OX10 RI=Ox10 MOV RO. RI RORI MOVS R3, Rl, LSL #2 R3=R1<<2,并影响标志位 MOV PC, LR PC=LR,子程序返回 ◆MVN 数据非传送指令.将8位图立即数或寄存器 operand2)按位取反后传送到目标寄存 器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数指令格式如下 MVNicond](s] Rd, operand2 MWN指令举例如下 MVN RI, #OXFF: R1=OXFFFFFF0O 将R2取反,结果存到R1 算术逻辑运算指令 ◆ADD 加法运算指令.将 operand2数据与Rn的值相加,结果保存到Rd寄存器.指令格式如 下 ADD cond][s] Rd, Rn, operand2 DD指令举例如下 ADDS R1,R1,#1 RIERI+I R1,R1,R2 RI=RI+R2 R3,R1,R2,LSL#2:R3=R1+R2<<2 %%嗡%嗡%嗡%嗡%嗡嗡吼嗡%嗡嗡嗡吼哈嗡嗡%嗡 By宛城布衣QQ:57523799emai:mcu8031@163cm
常用 ARM 指令集及汇编 Ver:1.0.12 数据传送指令 MOV 数据传送指令.将 8 位图立即数或寄存器(operant2)传送到目标寄存器 Rd,可用于 移位运算等操作.指令格式如下: MOV{cond}{S} Rd,operand2 MOV 指令举例如下: MOV R1#0x10 ;R1=0x10 MOV R0,R1 ;R0=R1 MOVS R3,R1,LSL #2 ;R3=R1<<2,并影响标志位 MOV PC,LR ;PC=LR ,子程序返回 MVN 数据非传送指令.将 8 位图立即数或寄存器(operand2)按位取反后传送到目标寄存 器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数.指令格式如下: MVN{cond}{S} Rd,operand2 MVN 指令举例如下: MVN R1,#0xFF ;R1=0xFFFFFF00 MVN R1,R2 ;将 R2 取反,结果存到 R1 算术逻辑运算指令 ADD 加法运算指令.将operand2数据与Rn的值相加,结果保存到Rd 寄存器.指令格式如 下: ADD{cond}{S} Rd,Rn,operand2 ADD 指令举例如下: ADDS R1,R1,#1 ;R1=R1+1 ADD R1,R1,R2 ;R1=R1+R2 ADDS R3,R1,R2,LSL #2 ;R3=R1+R2<<2 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII By 宛城布衣 QQ:57523799 email: mcu8031@163.com 第 20 页
常用▲RM指令集及汇编 ver:10.12 减法运算指令.用寄存器Rn减去 operand2.结果保存到Rd中.指令格式如下: SUB cond][S]Rd, Rn, operand2 SUB指令举例如下 SUBS RO, RO. #1 SUBS R2, RI, R2 R2=R1-R2 SUB R6, R7. #0x10 R6=R7-0x10 ◆RSB 逆向减法指令.用寄存器 operand2减法Rn,结果保存到Rd中.指令格式如下 RSBicond]is Rd, Rn, operand2 SUB指令举例如下 RSB R3 R1. #OxFF0O R3=OxFF00-RI RSBS R1,R2,R2,LSL#2:R1=R2<<2-R2=R2×3 RSB RO, R1.#0 ROF-RI ◆ADc 带进位加法指令.将 operand2的数据与Rn的值相加,再加上CPSR中的C条件标志 位.结果保存到Rd寄存器.指令格式如下; ADCcondis Rd, Rn, operand2 ADC指令举例如下 ADDS RORO R2 ADCR1,R1,R3;使用ADC实现64位加法,(R1、RO)=(R1、R0)+(R3、R2) ◆SBC 带进位减法指令。用寄存器Rn减去 operand2,再减去CPSR中的C条件标志位的 非(即若C标志清零,则结果减去1),结果保存到Rd中。指令格式如下 SCBicond]IS)Rd, Rn, operands SBC指令举例如下 SUBS RO, RO, R R1,R1,R3 使用SBC实现64位减法,(R1,RO)-(R3,R2) %%嗡%嗡嗡%嗡%嗡嗡吼嗡%嗡嗡嗡吼哈嗡嗡%嗡 By宛城布衣QQ:57523799emai:mcu8031@163cm
常用 ARM 指令集及汇编 Ver:1.0.12 SUB 减法运算指令.用寄存器 Rn 减去 operand2.结果保存到 Rd 中.指令格式如下: SUB{cond}{S} Rd,Rn,operand2 SUB 指令举例如下 SUBS R0,R0,#1 ;R0=R0-1 SUBS R2,R1,R2 ;R2=R1-R2 SUB R6,R7,#0x10 ;R6=R7-0x10 RSB 逆向减法指令.用寄存器 operand2 减法 Rn,结果保存到 Rd 中.指令格式如下: RSB{cond}{S} Rd,Rn,operand2 SUB 指令举例如下 RSB R3,R1,#0xFF00 ;R3=0xFF00-R1 RSBS R1,R2,R2,LSL #2 ;R1=R2<<2-R2=R2×3 RSB R0,R1,#0 ;R0=-R1 ADC 带进位加法指令.将 operand2 的数据与 Rn 的值相加,再加上 CPSR 中的 C 条件标志 位.结果保存到 Rd 寄存器.指令格式如下; ADC{cond}{S} Rd,Rn,operand2 ADC 指令举例如下: ADDS R0,R0,R2 ADC R1,R1,R3 ;使用 ADC 实现 64 位加法,(R1、R0)=(R1、R0)+(R3、R2) SBC 带进位减法指令。用寄存器 Rn 减去 operand2,再减去 CPSR 中的 C 条件标志位的 非(即若 C 标志清零,则结果减去 1),结果保存到 Rd 中。指令格式如下: SCB{cond}{S}Rd,Rn,operand2 SBC 指令举例如下 SUBS R0,R0,R2 SBC R1,R1,R3 ;使用 SBC 实现 64 位减法,(R1,R0)-(R3,R2) IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII By 宛城布衣 QQ:57523799 email: mcu8031@163.com 第 21 页
常用▲RM指令集及汇编 ver:10.12 ◆Rsc 带进位逆向减法指令.用寄存器 operand2减去Rn,再减去CPSR中的C条件标志位, 结果保存到Rd中.指令格式如下 RSCicond[st Rd, Rn, operand2 RSC指令举例如下 RSBS R2,RO,#0 RSO R3,R1,#0;使用RSC指令实现求64位数值的负数 ◆AND 逻辑与操作指令.将 operand2值与寄存器Rn的值按位作逻辑与操作,结果保存到 Rd中.指令格式如下 ANDicond)Is) Rd, Rn, operand2 AND指令举例如下 0sRo,RO,#x01;R0=RQ&0x01,取出最低位数据 AND R2, RI, R3: R2=RI&R3 ◆oRR 逻辑或操作指令.将σ perand2的值与寄存器Rn的值按位作逻辑或操作,结果保存到 Rd中.指令格式如下 ORRicond](s) Rd, Rn, operand2 ORR指令举例如下 ORR RO,RO,#xOF;将R0的低4位置1 MOV RI R2 LSR #4 RRR3,R1,R3,LSL#8;使用ORR指令将近R2的高8位数据移入到R3低8位 逻辑异或操作指令.将 operand2的值与寄存器Rn的值按位作逻辑异或操作,结果保 存到Rd中.指令格式如下: EOR icond]iS]Rd, Rn, operand2 EOR指令举例如下 %%嗡%嗡嗡嗡%%嗡%嗡嗡吼嗡%嗡嗡嗡哈嗡吼%哈嗡哈 By宛城布衣QQ:57523799emai:mcu8031@163cm 第22页
常用 ARM 指令集及汇编 Ver:1.0.12 RSC 带进位逆向减法指令.用寄存器 operand2 减去 Rn,再减去 CPSR 中的 C 条件标志位, 结果保存到 Rd 中.指令格式如下: RSC{cond}{S} Rd,Rn,operand2 RSC 指令举例如下: RSBS R2,R0,#0 RSC R3,R1,#0 ;使用 RSC 指令实现求 64 位数值的负数 AND 逻辑与操作指令.将 operand2 值与寄存器 Rn 的值按位作逻辑与操作,结果保存到 Rd 中.指令格式如下: AND{cond}{S} Rd,Rn,operand2 AND 指令举例如下: ANDS R0,R0,#x01 ;R0=R0&0x01,取出最低位数据 AND R2,R1,R3 ;R2=R1&R3 ORR 逻辑或操作指令.将operand2的值与寄存器Rn的值按位作逻辑或操作,结果保存到 Rd 中.指令格式如下: ORR{cond}{S} Rd,Rn,operand2 ORR 指令举例如下: ORR R0,R0,#x0F ;将 R0 的低 4 位置 1 MOV R1,R2,LSR #4 ORR R3,R1,R3,LSL #8 ;使用 ORR 指令将近 R2 的高 8 位数据移入到 R3低8位 中 EOR 逻辑异或操作指令.将operand2的值与寄存器Rn的值按位作逻辑异或操作,结果保 存到 Rd 中.指令格式如下: EOR{cond}{S}Rd,Rn,operand2 EOR 指令举例如下: IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII By 宛城布衣 QQ:57523799 email: mcu8031@163.com 第 22 页