4、arm指令集的数据处理指令可分为哪几类?每一类包含哪些指令,各列举两条?
数据处理指令大致可分为3类:
(1)数据传送指令;MOV、MVN(数据传送、数据非传送)
MOV指令举例如下:
MOV R11,#0xF000000B ;R1= 0xF000000B
MOV R0,R1 ;R0=R1
MOVS R3,R1,LSL #2 ;R3=R1<<2,并影响标志位
MOV PC,LR ;PC=LR,子程序返回
MVN指令举例如下:
MVN R1,#0xFF ;R1=0xFFFFFF00
MVN R1,R2 ;将R2按位取反,结果存到R1
(2)算术逻辑运算指令;ADD、SUB、RSB、ADC、SBC、RSC(加法运算指令、减法运算指令、逆向减法指令、带进位加法、带进位减法指令、带进位逆向减法指令)
(后面加S代表影响标志位)
ADD应用示例:
ADDS R1,R1,#1020 ;R1=R1+1020,并影响标志位
ADD R1,R1,R2,LSL #2 ;R1=R1+R2<<2
SUB应用示例:
SUBS R0,R0,#240 ;R0=R0-240 ,并影响标志位
SUBS R2,R1,R2 ;R2=R1-R2 ,并影响标志位
(3)比较指令。ADD、ORR、EOR、BIC(逻辑与操作指令、或、异或、位清除指令)
ADD应用示例:
ANDS R0,R0,#0x01 ;R0=R0&0x01,取出最低位数据
ANDEQ R2,R1,R3 ;R2=R1&R3
ORR应用示例:
ORR R0,R0,#0x0F ;将R0的低4位置1
MOV R1,R2,LSR #24 ;使用ORR指令将R2的高8位
ORR R3,R1,R3,LSL #8 ;数据移入到R3低8位中