找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 66|回复: 5
打印 上一主题 下一主题

ARM指令之乘法指令

[复制链接]

163

主题

615

帖子

1265

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1265
跳转到指定楼层
1#
发表于 2016-10-19 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
ARM乘法指令完成2个寄存器中数据的乘法。按产生结果的位宽一般分为2类:一类是2个32位二进制相乘的结果是64位;另一类是2个32位二进制相乘,仅保留最低有效32位。
这2种类型都有“乘一累加”的变形,即将乘积连续相加成为总和,而且有符号和无符号操作数都能使用。
对于有符号和无符号操作数,结果的最低有效32位是一样的,所以对于只保留32位的结果的乘法指令,无须区分有符号数和无符号数2种指令格式。
二进制编码
乘法的二进制编码
说明
表列出了各种形式乘法功能,对指令编码及表中使用的寄存器表示符号解释如下:
对于32位乘积结果指令,Rd为结果寄存器,Rm、Rs、Rn为操作数寄存器。R15不能用作Rd、Rm、Rs或Rn。且Rd不能与Rm相同。
对于64位乘积结果指令,RdLo、RdHi为结果寄存器,“RdLo:RdHi”是由RdHi(最高有效32位)和RdLo(最低有效32位)连接形成64位乘积结果,Rm、Rs为操作数寄存器。R15不能用作RdLo、RdHi、Rm或Rs,且RdLo、RdHi不能与Rm相同。
选择[31:0]意指只选取乘积结果的最低有效32位。
简单的赋值由“<-”表示。
累加(将右边加到左边)是由“+=”表示。
与其他数据处理指令一样,S位控制条件码的设置。当在指令中设置了S位时:
根据结果更新标志位N和Z。对于产生32结果的指令形式,N标志位设置为Rd的第3位的值;对于产生64位结果的指令形式,N标志位设置的是RdHi的第31位的值;如果Rd或RdHi和RdLo为0,则Z标志设置位。
在ARMV4及以前版本中,标志C和V不可靠;
在ARMV5及以后版本中,不影响标志C和V。
汇编格式
产生最低有效32位乘积的指令:
MUL{<cond>}{S}        Rd,Rm,Rs
MULA{<cond>}{S}            Rd,Rm,Rs,Rn
产生64位乘积的命令:
<mul>{<cond>}{S}RdHi,RdLo,Rm,Rs
在此<mul>是64位乘法类型(UMULL、UMLAL、SMULL、SMLAL)。
例子
形成两个矢量的标量积:
MOV             R11,#20                     ;初始化循环计数
MOV             R10,#0                      ;初始化总和
LOOP     LDR              R0,[R8],#4                 ;读取第一分量
              LDR              R1,[R9],#4                 ;读取第二分量
              MLA              R10,R0,R1,R0       ;乘积累加
              SUBS            R11,R11,#1              ;减循环计数
              BNE              LOOP                  
乘以一个常数可由调一个常数到寄存器,然后使用这些指令中的一种来实现。但是使用移位和加法或减法构成一小段数据处理指令通常更加有效。例如,将R0乘以35:
ADD              R0,R0,R0,LSL#2          ;R0`<-5×R0
RSB               R0,R0,R0,LSL#3          ;R0``<-7×R0`
注意事项
它与其他数据处理指令的重要区别为:
—不支持第2操作数为立即数
—结果寄存器不能同时为第一源寄存器,即Rd、RdHi、RdLo不能与Rm为同一寄存器,RdHi和RdLo不能为同一寄存器。
应避免R15为任意操作数或结果寄存器。
早期的ARM处理器仅支持32位乘法指令。ARM7版本和后续的在名字中有M的处理器才支持64位乘法指令。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

161

主题

526

帖子

1209

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1209
2#
发表于 2016-10-19 16:05 | 只看该作者
学习中,谢谢分享

214

主题

642

帖子

1658

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1658
3#
发表于 2016-10-20 14:49 | 只看该作者

159

主题

527

帖子

1197

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1197
4#
发表于 2016-10-20 15:23 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈

157

主题

559

帖子

1216

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1216
5#
发表于 2016-10-22 14:22 | 只看该作者
谢谢O(∩_∩)O哈哈~谢谢O(∩_∩)O哈哈

0

主题

30

帖子

26

积分

二级会员(20)

Rank: 2Rank: 2

积分
26
6#
发表于 2017-11-19 18:44 | 只看该作者
GOOD!Thanks!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-9-17 04:26 , Processed in 0.081624 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表