ARM学习笔记7——乘法指令
2014-01-24 19:05
246 查看
ARM乘法指令完成两个数据的乘法,两个32位二进制数相乘的结果是64位的4积。
![](http://images.cnitblog.com/blog/525372/201401/241803281632.png)
其中:
1、“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数,“[31:0]”只选取结果的最低有效32位
2、简单的赋值由“:=”表示
3、累加(将右边加到左边)是由“+=”表示
一、MUL乘法指令
1、作用
将Rm和Rs中的值相乘,结果的最低32位保存到Rd中
2、语法格式
MUL{<condition>}{S} <Rd>,<Rm>,<Rs>
3、参数说明
3.1、S:S位(bit[20])决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当S=1时,跟新CPSR中的条件标志位的值;当S=0,指令不更新CPSR中的条件标志位。
3.2、<Rd>:寄存器位目标寄存器
3.3、<Rm>:第一个乘数所在寄存器
3.4、<Rs>:第二个乘数所在寄存器
4、举例:
R1=R2*R3用指令表示为 MUL R1,R2,R3
二、MLA乘-累加指令
1、作用
将Rm和Rs中的值相乘,再将乘积加上第三个操作数,结果的最低32保存到Rd中
2、语法格式
MLA{<condition>}{S} <Rd>,<Rm>,<Rs>,<Rn>
3、参数说明:
3.1、<Rd>:寄存器位目标寄存器
3.2、<Rm>:第一个乘数所在寄存器
3.3、<Rs>:第二个乘数所在寄存器
3.4、<Rn>:将要累加到<Rm>*<Rs>结果中的第三操作数
4、举例说明
R1=R2*R3+10用指令表示为 :
MOV R0,#0x0A
MLA R1,R2,R3,R0
三、UMULL无符号数长乘指令
1、作用
UMULL为64位无符号乘法指令,指令将Rm和Rs中的值做无符号数相乘,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
2、语法格式
UMULL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、参数说明
3.1、<RdLo>:寄存器位目标寄存器,存储结果的低32位值
3.2、<RdHi>:寄存器位目标寄存器,存储结果的高32位值
3.3、<Rm>:第一个乘数寄存器
3.4、<Rs>:第二个乘数寄存器
4、举例
完成(R1,R0)=R5*R8操作
UMULL R0,R1,R5,R8
四、UMLAL无符号长乘-累加操作指令
1、作用
UMLAL位64位无符号长乘-累加指令,指令将Rm和Rs中的值做无符号数相乘,64位乘积与RdHi,RdLo相加,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
2、语法格式
UMLAL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、举例
完成(R1,R0)=R5*R8+(R1,R0)操作
UMLAL R0,R1,R5,R8
五、SMULL有符号数长乘操作指令
1、作用
SMULL64位有符号长乘指令,指令将Rm和Rs中的值做有符号数相乘,结果的低32位保存到RsLo中,而高32位保存到RdHi中
2、语法格式
SMULL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、实例
完成(R3,R2)=R7*R6
SMULL R2,R3,R7,R6
六、SMLAL有符号长乘-累加操作指令
1、作用
SMLAL为64位有符号长乘法指令,指令将Rm和Rs中的值做有符号数相乘,64位乘积与RdHi,RdLo相加,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
2、语法指令
SMLAL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、实例
完成(R3,R2)=R7*R6+(R3,R2)
SMLAL R2,R3,R7,R6
![](http://images.cnitblog.com/blog/525372/201401/241803281632.png)
其中:
1、“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数,“[31:0]”只选取结果的最低有效32位
2、简单的赋值由“:=”表示
3、累加(将右边加到左边)是由“+=”表示
一、MUL乘法指令
1、作用
将Rm和Rs中的值相乘,结果的最低32位保存到Rd中
2、语法格式
MUL{<condition>}{S} <Rd>,<Rm>,<Rs>
3、参数说明
3.1、S:S位(bit[20])决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当S=1时,跟新CPSR中的条件标志位的值;当S=0,指令不更新CPSR中的条件标志位。
3.2、<Rd>:寄存器位目标寄存器
3.3、<Rm>:第一个乘数所在寄存器
3.4、<Rs>:第二个乘数所在寄存器
4、举例:
R1=R2*R3用指令表示为 MUL R1,R2,R3
二、MLA乘-累加指令
1、作用
将Rm和Rs中的值相乘,再将乘积加上第三个操作数,结果的最低32保存到Rd中
2、语法格式
MLA{<condition>}{S} <Rd>,<Rm>,<Rs>,<Rn>
3、参数说明:
3.1、<Rd>:寄存器位目标寄存器
3.2、<Rm>:第一个乘数所在寄存器
3.3、<Rs>:第二个乘数所在寄存器
3.4、<Rn>:将要累加到<Rm>*<Rs>结果中的第三操作数
4、举例说明
R1=R2*R3+10用指令表示为 :
MOV R0,#0x0A
MLA R1,R2,R3,R0
三、UMULL无符号数长乘指令
1、作用
UMULL为64位无符号乘法指令,指令将Rm和Rs中的值做无符号数相乘,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
2、语法格式
UMULL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、参数说明
3.1、<RdLo>:寄存器位目标寄存器,存储结果的低32位值
3.2、<RdHi>:寄存器位目标寄存器,存储结果的高32位值
3.3、<Rm>:第一个乘数寄存器
3.4、<Rs>:第二个乘数寄存器
4、举例
完成(R1,R0)=R5*R8操作
UMULL R0,R1,R5,R8
四、UMLAL无符号长乘-累加操作指令
1、作用
UMLAL位64位无符号长乘-累加指令,指令将Rm和Rs中的值做无符号数相乘,64位乘积与RdHi,RdLo相加,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
2、语法格式
UMLAL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、举例
完成(R1,R0)=R5*R8+(R1,R0)操作
UMLAL R0,R1,R5,R8
五、SMULL有符号数长乘操作指令
1、作用
SMULL64位有符号长乘指令,指令将Rm和Rs中的值做有符号数相乘,结果的低32位保存到RsLo中,而高32位保存到RdHi中
2、语法格式
SMULL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、实例
完成(R3,R2)=R7*R6
SMULL R2,R3,R7,R6
六、SMLAL有符号长乘-累加操作指令
1、作用
SMLAL为64位有符号长乘法指令,指令将Rm和Rs中的值做有符号数相乘,64位乘积与RdHi,RdLo相加,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
2、语法指令
SMLAL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
3、实例
完成(R3,R2)=R7*R6+(R3,R2)
SMLAL R2,R3,R7,R6
相关文章推荐
- ARM学习笔记2——分支跳转指令
- ARM指令---学习笔记
- ARM学习笔记3——数据处理指令
- ARM学习笔记4——加载存储指令
- [国嵌笔记][025][ARM指令分类学习]
- arm 汇编学习常用指令伪指令笔记汇总
- ARM汇编指令学习笔记(一、二)【晚上BOOTLOAD了,速度】
- ARM学习笔记(二)——ARM数据处理指令、加载\存储指令
- ARM学习笔记8——通用寄存器和存储器内容交换指令和软中断指令
- 嵌入式学习笔记--关于ARM中SWP指令的执行顺序问题【待验证】
- ARM汇编伪指令学习笔记
- ARM学习笔记6——程序状态寄存器访问指令
- ARM学习笔记(六)--ARM指令的预取和自修改代码
- ARM汇编指令学习笔记(一)【为明天BOOTLOADER学习准备】
- 10_ARM汇编自学笔记指令系统之乘法指令与乘加指令
- arm学习笔记四(arm伪指令)
- ARM学习笔记(九)--指令基本格式
- 《鸟哥Linux私房菜》学习笔记_chap8_开机关机、在线求助与指令下达方式
- 王爽《汇编语言》(第二版) 学习笔记 (第九章 转移指令的原理 )
- ARM学习笔记10——GNU ARM命令行工具