【ARM】乘法指令

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{<cond>}{S} <Rd>,<Rm>,<Rs>

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{<cond>}{S} <Rd>,<Rm>,<Rs>,<Rn>

3.2 应用示例一

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

04. UMULL 指令

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

4.1 指令的语法格式:

UMULL{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

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{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

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{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

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{<cond>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

7.2 应用示例一

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

08. 附录

11.1 ARM Architecture Reference Manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值