• 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之吾见”!

  • 相关阅读:
    hadoop2-hive
    数学建模笔记-第十讲-聚类
    数电与非门方波震荡器为什么不起振
    从MySQL架构看一条SQL语句是如何执行的?
    JDK垃圾回收机制和垃圾回收算法
    C++空间配置器
    y47.第三章 Kubernetes从入门到精通 -- ceph 在k8s中的使用案例(二十)
    四、看看 CSS 创建
    使用dockerfile部署springboot应用
    中文版-Chat GPT-4.0可用,功能更强大!(附网址)
  • 原文地址:https://blog.csdn.net/wto9109/article/details/128107432