Arm指令之算数运算类指令

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中的数是有符号数。)

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值