mov r0,#4
mov r1,#0xFF000000
mov r2,#0x0A000000
mov r3,#0xFF
mov r4,#0x20
一、加法指令:
add r3,r1,r2,lsl #2
(r1加上r2逻辑左移2位的结果给r3)
adds r4,r1,r2
(r1加上r2的结果给r4,影响C标志位)
adc r5,r1,r2
(带C标志位的加法:r1加r2再加上C标志位,将结果给r5)
二、减法指令:
sub r3,r1,r2
(r1减去r2的结果给r3)
subs r4,r1,r2,lsl #2
(r1减去r2逻辑左移2位的结果给r4,影响C标志位)
sbc r5,r1,r2
(带C标志位的减法:r1减r2再减去C标志位的反码,将结果给r5)
rsbs r6,r1,r2
(逆向减法:r2减去r1的结果给r6,影响C标志位)
rsc r7,r1,r2
(带C标志位的逆向减法:r2减r1再减去C标志位的反码,将结果给r7)
三、乘法指令:
(1)32位乘法指令:
mul r5,r3,r4
muls r6,r3,r4
(乘法运算:将r3和r4相乘的结果送给r5、r6,由于r3和r4是32位数据,mul指令只保存了二者相乘64位结果的低32位,所以对于带符号和无符号的操作数来说执行mul指令的结果相同)
mla r7,r3,r4,r0
mlas r8,r3,r4,r0
(乘加运算:将r3和r4相乘再加上r0的结果送给r7、r8,由于r3和r4是32位数据,mla指令只保存了二者相乘64位结果的低32位,所以对于带符号和无符号的操作数来说执行mla指令的结果相同)
(2)64位乘法指令:
umull r3,r4,r1,r2
(将r1*r2的低32位给r3,将r1*r2的高32位给r4。)
umlal r3,r4,r1,r2
(将r1*r2的低32位加上r3的结果给r3,将r1*r2的高32位加r4再加上低32位的进位值(本例中低32位无进位值)的结果给r4。)
smull r3,r4,r1,r2
(将r1*r2的低32位给r3,将r1*r2的高32位给r4。其中r1,r2中的数是有符号数。)
smlal r3,r4,r1,r2
(将r1*r2的低32位加上r3的结果给r3,将r1*r2的高32位加r4再加上低32位的进位值(本例中低32位无进位值)的结果给r4。其中r1,r2中的数是有符号数。)