ARM指令集——乘法指令

2024-08-28 12:18
文章标签 指令 arm 乘法 指令集

本文主要是介绍ARM指令集——乘法指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类位64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条:

  • MUL 32位乘法指令
  • MLA 32位带加数的乘法指令
  • SMULL 64位有符号数乘法指令
  • SMLAL 64位带加数的有符号乘法指令
  • UMULL 64位无符号数乘法指令
  • UMLAL 64位带加数的无符号数乘法指令
下面一一介绍之:

1、MUL
考虑执行命令的效率,指令中所有的操作数都放在寄存器中。

指令的语法格式:
MUL{<cond>}{S} <Rd>, <Rm>, <Rs>

指令操作的伪代码:
if ConditionPassed(cond) then
Rd = (Rm * Rs)[31:0]
if S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = unaffected
V Flag =  unaffected

指令的使用:
由于两个32位的数相乘结果为64位,而MUL指令仅仅保存了64位结果的低32位,所以对带符号的和无符号的操作数来说MUL指令执行的结果相同。

2、MLA
MLA指令实现两个32位数(有无符号都可以)的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中。考虑执行命令的效率,指令中所有的操作数都放在寄存器中。

指令的语法格式:
MLA{<cond>}{S} <Rd>, <Rm>, <Rs>, <Rn>

指令操作的伪代码:
if ConditionPassed(cond) then
Rd = (Rm * Rs + Rn)[31:0]
if S == 1 then
N Flag = Rd[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = unaffected
V Flag =  unaffected

3、SMULL
指令的语法格式:
SMULL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>

指令操作的伪代码:
if ConditionPassed(cond) then
RdHi = (Rm * Rs)[63 : 32]
RdLo = (Rm * Rs)[31 : 0]
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag =  unaffected

指令的使用:
SMULL R1, R2, R3, R4 ; R1 = (R3 * R4)的低32位
; R2 = (R3 * R4)的高32位

4、SMLAL
指令的语法格式:
SMLAL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>

指令操作的伪代码:
if ConditionPassed(cond) then
RdLo = (Rm * Rs)[31 : 0] + RdLo
RdHi = (Rm * Rs)[63 : 32] + RdHi + CarryFrom( (Rm * Rs)[31 : 0] + RdLo)
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag =  unaffected

5、UMULL
指令的语法格式:
UMULL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>

指令操作的伪代码:
if ConditionPassed(cond) then
RdHi = (Rm * Rs)[63 : 32]
RdLo = (Rm * Rs)[31 : 0]
if S == 1 then
N Flag = RdHi[31]
Z Flag = if Rd == 0 then 1 else 0
C Flag = unaffected
V Flag =  unaffected

指令的使用:
UMULL R1, R2, R3, R4 ; R2 R1 = R3 * R4

6、UMLAL
指令的语法格式:
UMLAL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs>

指令操作的伪代码:
if ConditionPassed(cond) then
RdLo = (Rm * Rs)[31 : 0] + RdLo
RdHi = (Rm * Rs)[63 : 32] + RdHi + CarryFrom( (Rm * Rs)[31 : 0] + RdLo)
if S == 1 then
N Flag = RdHi[31]
Z Flag = if RdHi == 0 and RdLo == 0 then 1 else 0
C Flag = unaffected
V Flag =  unaffected

这篇关于ARM指令集——乘法指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114738

相关文章

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领