【ARM】乘法指令
发布日期:2021-06-29 20:47:44 浏览次数:2 分类:技术文章

本文共 2349 字,大约阅读时间需要 7 分钟。

00. 目录

文章目录

01. 乘法指令概述

ARM 乘法指令完成两个数据的乘法。两个 32 位二进制数相乘的结果是 64 位的积。在有些 ARM 的处理器版本中,将乘积的结果保存到两个独立的寄存器中。另外一些版本只将最低有效 32 位存放到一个寄存器中。无论是哪种版本的处理器,都有乘—累加的变型指令,将乘积连续累加得到总和。而且有符号数和无符号数都能使用。对于有符号数和无符号数,结果的最低有效位是一样的。因此,对于只保留 32 位结果的乘法指令,不需要区分有符号数和无符号数这两种情况。

如表 3-7 所示为各种形式乘法指令的功能。

在这里插入图片描述

其中:

(1)“RdHi:RdLo”是由 RdHi(最高有效 32 位)和 RdLo(最低有效 32 位)连接形成的 64 位数,“[31:0]”只选取结果的最低有效 32 位。
(2)简单的赋值由“:=”表示。
(3)累加(将右边加到左边)是由“+ =”表示。

各个乘法指令中的位 S(参考下文具体指令的语法格式)控制条件码的设置会产生以下结果。

① 对于产生 32 位结果的指令形式,将标志位 N 设置为 Rd 的第 31 位的值;对于产生长结果的指令形式,将其设置为 RdHi 的第 31 位的值。
② 对于产生 32 位结果的指令形式,如果 Rd 等于零,则标志位 Z 置位;对于产生长结果的指令形式,RdHi 和 RdLo 同时为零时,标志位 Z 置位。
③ 将标志位 C 设置成无意义的值。
④ 标志位 V 不变。

02. MUL 指令

MUL(Multiply)32 位乘法指令将 Rm 和 Rs 中的值相乘,结果的最低 32 位保存到 Rd 中。

2.1 指令的语法格式

MUL{
}{S}
,
,

2.2 应用示例一

@ R1 = R2 × R3。MUL R1, R2, R3

2.3 应用示例二

@ R0 = R3 × R7,同时设置 CPSR 中的 N 位和 Z 位。MULS R0, R3, R7

03. MLA 指令

MLA(Multiply Accumulate)32 位乘—累加指令将 Rm 和 Rs 中的值相乘,再将乘积加上第 3 个操作数,结果的最低 32 位保存到 Rd 中。

3.1 指令的语法格式

MLA{
}{S}
,
,
,

3.2 应用示例一

@ 完成 R1 = R2×R3 + 10 的操作。MOV R0, #0x0AMLA R1, R2, R3, R0

04. UMULL 指令

UMULL(Unsigned Multiply Long)为 64 位无符号乘法指令。它将 Rm 和 Rs 中的值做无符号数相乘,结果的低 32 位保存到 RsLo 中,高 32 位保存到 RdHi 中。

4.1 指令的语法格式:

UMULL{
}{S}
,
,
,

4.2 应用示例一

@ 下面的指令完成(R1,R0) = R5 × R8 操作。UMULL R0, R1, R5, R8;

05. UMLAL 指令

UMLAL(Unsigned Multiply Accumulate Long)为 64 位无符号长乘—累加指令。指令将 Rm 和 Rs 中的值做无符号数相乘,64 位乘积与 RdHi、RdLo 相加,结果的低 32 位保存到 RsLo 中,高 32 位保存到 RdHi 中。

5.1 指令语法格式

UMALL{
}{S}
,
,
,

5.2 应用示例一

@ 下面的指令完成(R1,R0) = R5 × R8+(R1,R0)操作。UMLAL R0, R1, R5,R8;

06. SMULL 指令

SMULL(Signed Multiply Long)为 64 位有符号长乘法指令。指令将 Rm 和 Rs 中的值做有符号数相乘,结果的低 32 位保存到 RsLo 中,高 32 位保存到 RdHi 中。

6.1 指令的语法格式

SMULL{
}{S}
,
,
,

6.2 应用示例一

@ 下面的指令完成(R3,R2) = R7 × R6 操作。SMULL R2, R3, R7,R6;

07. SMLAL 指令

SMLAL(Signed Multiply Accumulate Long)为 64 位有符号长乘—累加指令。指令将Rm 和 Rs 中的值做有符号数相乘,64 位乘积与 RdHi、RdLo 相加,结果的低 32 位保存到RsLo 中,高 32 位保存到 RdHi 中。

7.1 指令的语法格式

SMLAL{
}{S}
,
,
,

7.2 应用示例一

@ 下面的指令完成(R3,R2) = R7 × R6 +(R3,R2)操作。SMLAL R2, R3, R7,R6;

08. 附录

11.1 ARM Architecture Reference Manual

转载地址:https://dengjin.blog.csdn.net/article/details/106795503 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Linux】GCC程序开发工具(中)
下一篇:【ARM】数据操作指令(下)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月14日 12时09分53秒