ARM汇编之乘法指令

ARM汇编之乘法指令

前言

首先,请问大家几个小小问题,你清楚:

  • 乘法指令有哪些种类呢?
  • ARM乘法指令具体的使用场景又有哪些?

今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:

在这里插入图片描述


正文

ARM存在两类乘法指令,一个是32位乘法指令,得到的最终结果均为32位。另一个则是64位乘法指令,得到的结果都是64位。

32位乘法指令

MUL指令:

MUL指令的作用如下:

  • 实现两个32位数(可以是有符号数,也可以是无符号数)的乘法运算,并将结果最终存入一个32位的寄存器中;
  • 同时还会根据运算结果设置CPSR寄存器中相应的条件标志位;
  • 由于两个32位数相乘结果为64位,而MUL指令仅仅保留了64位结果的低32位,所以无论对于有符号数还是无符号数的操作数而言,MUL指令执行的结果都是相同的。

MUL指令格式与实例展示如下:

在这里插入图片描述

图1 MUL指令格式

MLA指令

MLA指令作用如下:

  • 实现两个32位(可以为无符号数,也可为有符号数)的乘积,再加上第3个操作数,并将结果保存到一个32位的寄存器中;
  • 同时根据运算结果设置CPSR寄存器中相应的条件标志位;

MLA指令格式与实例展示如下:

在这里插入图片描述

图2 MLA指令格式
64位乘法指令

SMULL指令

SMULL指令作用如下:

  • 实现两个32位的有符号数的乘积,将乘积结果的高32位存放到一个32位寄存器的中,乘积结果的低32位存放到另一个32位的寄存器中;
  • 根据运算结果设置CPSR寄存器中的相应条件标志位,考虑到指令执行的效率,指令中的所有操作数都放在寄存器中。

SMULL指令格式与实例展示如下:
在这里插入图片描述

图3 SMULL指令格式

SMLAL指令

SMLAL指令的作用如下:

  • 实现将两个32位的有符号数的64位乘积结果与和中的64位数相加,加法结果的高32位存放到一个32位的寄存器中,加法结果的低32位数存放到另一个32位的中;
  • 同时根据运算结果设置CPSR寄存器中的条件标志位;

SMLAL指令格式与实例展示如下:
在这里插入图片描述

图4 SMLAL指令格式

UMULL指令

UMULL指令的作用如下:

  • 实现两个32位的无符号数的乘积,乘积结果的高32位存放到一个32位的寄存器中,乘积结果的低32位存放到另一个32位的寄存器中;
  • 同时将根据运算结果设置CPSR寄存器中相应的条件标志位;

UMULL指令格式与实例展示如下:

在这里插入图片描述

图5 UMULL指令格式

UMLAL指令

UMLAL指令的作用如下:

  • 实现将两个32位无符号数的64位乘积结果与和中的64位无符号数相加,加法结果的我高32位存放到一个32位寄存器中,加法结果的低32位存放到另一个32位的寄存器中;
  • 同时根据运算结果设置CPSR寄存器中相应的条件标志位;

UMLAL指令格式与实例展示如下:

在这里插入图片描述

图6 UMLAL指令格式

更多精彩内容,敬请关注公号“ADAS与ECU之吾见”!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车小T

感谢打赏,我会继续努力奉献精彩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值