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

  • 相关阅读:
    yolo改进替换VanillaNet backbone
    ESP8266-Arduino编程实例-LM35温度传感器驱动
    firefly-rk3399开发板100篇 之 003 学习firefly-rk3399 wiki中gpio操作 之 控制GPIO
    codesys【按钮】
    MySQL —— 主从复制
    直播回顾|关联网络如何反团伙欺诈——标准答案版
    Unix Domain Socket 比 localhost(127.0.0.1)更快
    Android编写一个视频监控App
    RTL8380M/RTL8382M管理型交换机系统软件操作指南二:转发表
    mysql如何查询数据出现的次数
  • 原文地址:https://blog.csdn.net/wto9109/article/details/128107432