标题:
ARM指令集- 乘法指令与乘加指令
[打印本页]
作者:
look_w
时间:
2017-9-24 15:36
标题:
ARM指令集- 乘法指令与乘加指令
3.3.3
乘法指令与乘加指令
ARM
微处理器支持的乘法指令与乘加指令共有
6
条,可分为运算结果为
32
位和运算结果为
64
位两类。与前面的数据处理指令不同,指令中的所
有操作数、目的寄存器必须为
通用
寄存器
,
不能对操作数使用立即
数
或被移位的寄存器
,同时,
目的寄存器和操作数
1
必须是不同的寄存器
。
1、
MUL指令
MUL指令的格式为:
MUL{条件}{S}
目的寄存器,操作数
1,操作数2
MUL指令完成将操作数1与操作数2的乘法运算,并
把结果放置到目的寄存器中
,同时可以根据运算结果设置
CPSR
中相应的条件标志位。其中,操作数
1
和操作数
2
均为
32
位的有符号数或无符号数。
如:
MUL R0
,
R1
,
R2
;
R0 = R1
×
R2
MULS R0
,
R1
,
R2
;
R0 = R1
×
R2
,同时设置
CPSR
中的相关条件标志位
2、
MLA指令
MLA指令的格式为:
MLA{条件}{S}
目的寄存器,操作数
1,操作数2,操作数3
MLA指令完成将操作数1与操作数2的乘法运算,再将乘积加上操作数3,并
把结果放置到目的寄存器中
,同时可以根据运算结果设置
CPSR
中相应的条件标志位。其中,操作数
1
和操作数
2
均为
32
位的有符号数或无符号数。
如:
MLA R0
,
R1
,
R2
,
R3
;
R0 = R1
×
R2 + R3
MLAS R0
,
R1
,
R2
,
R3
;
R0 = R1
×
R2 + R3
,同时设置
CPSR
中的相关条件标志位
3、
SMULL指令
SMULL指令的格式为:
SMULL{条件}{S}
目的寄存器
Low,目的寄存器低High,操作数1,操作数2
SMULL指令完成将操作数1与操作数2的乘法运算,并
把结果
的低
32
位
放置到目的寄存器
Low
中
,
结果
的高
32
位
放置到目的寄存器
High
中
,同时可以根据运算结果设置
CPSR
中相应的条件标志位。其中,操作数
1
和操作数
2
均为
32
位的有符号数。
如:
SMULL R0
,
R1
,
R2
,
R3
;
R0 =
(
R2
×
R3
)的低
32
位
;
R1 =
(
R2
×
R3
)的高
32
位
4、
SMLAL指令
SMLAL指令的格式为:
SMLAL{条件}{S}
目的寄存器
Low,目的寄存器低High,操作数1,操作数2
SMLAL指令完成将操作数1与操作数2的乘法运算,并
把结果
的低
32
位同
目的寄存器
Low
中的值相加后又
放置到目的寄存器
Low
中
,
结果
的高
32
位同
目的寄存器
High
中的值相加后又
放置到目的寄存器
High
中
,同时可以根据运算结果设置
CPSR
中相应的条件标志位。其中,操作数
1
和操作数
2
均为
32
位的有符号数。
对于目的寄存器
Low,在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位。
对于目的寄存器
High,在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位。
如:
SMLAL R0
,
R1
,
R2
,
R3
;
R0 =
(
R2
×
R3
)的低
32
位 +
R0
;
R1 =
(
R2
×
R3
)的高
32
位 +
R1
5、
UMULL指令
UMULL指令的格式为:
UMULL{条件}{S}
目的寄存器
Low,目的寄存器低High,操作数1,操作数2
UMULL指令完成将操作数1与操作数2的乘法运算,并
把结果
的低
32
位
放置到目的寄存器
Low
中
,
结果
的高
32
位
放置到目的寄存器
High
中
,同时可以根据运算结果设置
CPSR
中相应的条件标志位。其中,操作数
1
和操作数
2
均为
32
位的无符号数。
如:
UMULL R0
,
R1
,
R2
,
R3
;
R0 =
(
R2
×
R3
)的低
32
位
;
R1 =
(
R2
×
R3
)的高
32
位
6、
UMLAL指令
UMLAL指令的格式为:
UMLAL{条件}{S}
目的寄存器
Low,目的寄存器低High,操作数1,操作数2
UMLAL指令完成将操作数1与操作数2的乘法运算,并
把结果
的低
32
位同
目的寄存器
Low
中的值相加后又
放置到目的寄存器
Low
中
,
结果
的高
32
位同
目的寄存器
High
中的值相加后又
放置到目的寄存器
High
中
,同时可以根据运算结果设置
CPSR
中相应的条件标志位。其中,操作数
1
和操作数
2
均为
32
位的无符号数。
对于目的寄存器
Low,在指令执行前存放64位加数的低32位,指令执行后存放结果的低32位。
对于目的寄存器
High,在指令执行前存放64位加数的高32位,指令执行后存放结果的高32位。
如:
UMLAL R0
,
R1
,
R2
,
R3
;
R0 =
(
R2
×
R3
)的低
32
位 +
R0
;
R1 =
(
R2
×
R3
)的高
32
位 +
R1
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0