×
嵌入式 > 嵌入式开发 > 详情

ARM汇编指令集之五——乘法指令与乘加指令

发布时间:2020-08-06 发布时间:
|
ARM微处理器支持的乘法指令乘加指令共有6条,可分为运算结果为32位和运算结果为64位两类,与前面的数据处理指令不同,指令中的所有操作数、目的寄存器必须为通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器和操作数1必须是不同的寄存器。

乘法指令与乘加指令共有以下6条:

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×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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Recogni:将高端AI芯片推向自动驾驶边缘