
(2)减法操作
•SUB R0, R1, R2 ; R0 = R1 - R2 •这个命名比较简单,就是使用R1寄存器中的值减去R2寄存器中的值,然后存储到R0中。
•SBC R0, R1, R2 ; R0 = R1 - R2 - !C •带借位的减法,假如我们当前的寄存器是32Bit, 如果两个64bit的数值进行减法操作就要使用到SBC借位操作。因为当两个数值在进行减法操作时,如果需要借位时就会把C标志位进行清零操作,所以在进行SBC操作时需要将C标志位进行取反操作。下面我们一128位数值相减为例。该实例与上述的ADC命令类似,在此就不做过多赘述了。
•RSB R0, R1, R2 ; R0 = R2 - R1 •反向减法
•RSC R0, R1, R2 ; R0 = R2 - R1 - !C
•带借位的反向减法,上面这两个命令与SUB和SBC命令差不多,都是进行减法操作的,不过操作数的计算顺序不同。
(3)、乘法指令
在ARM指令集中,乘法指令有两种第一个是MUL, 第二个是带累加的乘法MLA。当然,这两个指令使用起来都不复杂。
•MUL: 乘法指令 MUL{条件}{S} R0, R1, R2 ;R0 = R1 * R2
•MLA: 乘法累加指令 MLA{条件}{S} R0, R1, R2, R3 ;R0 = R1 * R2 + R3
(4)、逻辑操作
逻辑操作比较好理解一些,与我们编程中使用的逻辑操作大同小异,无非是一些与、或、非、异或这些操作。
•AND R0, R1, R2 ; R0 = R1 & R2
•与操作, 1 & 1 = 1, 1 & 0 = 1, 0 & 1 = 1,0 & 0 = 0;
•ORR R0, R1, R2 ; R0 = R1 | R2
•或操作, 1 | 1 = 1, 1 | 0 = 1, 0 | 1 = 1, 0 | 0 = 0;
•EOR R0, R1, R2 ; R0 = R1 ^ R2
•异或,1 ^ 1 = 1, 1 ^ 0 = 0, 0 ^ 1 = 0, 0 ^ 0 = 1;
•BIC R0, R1, R2 ; R0 = R1 &~ R2
•位清除指令,现将R2进行取反,然后再与R1进行与操作。R1 & (~R2)
•将R0的后四位清零:BIC R0, R0,#0x0F
•MOV R0, R1 ;R0 = R1
•赋值操作,将R1的值赋给R0
•MVN R0, R1 ;R0 = ~R1
•按位取反操作,将R1的每一位进行取反操作,然后赋值给R0
4、寄存器的装载和存储
有时我们需要将内存中的数据装载到寄存器中进行操作,或者将寄存器中运算后的数据存储到内存中,此时我们就会用到寄存器的装载和存储的相关命令。下方就一一的总结了这些命令。
(1)、传送单一数据
LDR{条件} Rd, <地址> ;将地址中的数据加载到Rd寄存器中










