10_ARM汇编自学笔记指令系统之乘法指令与乘加指令

乘法指令与乘加指令

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

— MUL 32位乘法指令

— MLA 32位乘加指令

— SMULL  64位有符号数乘法指令

— SMLAL  64位有符号数乘加指令

— UMULL  64位无符号数乘法指令

— UMLAL  64位无符号数乘加指令

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,目的寄存器低 Hi gh,操作数 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,目的寄存器低 Hi gh,操作数 1,操作数 2

SMLAL指令完成将操作数 1与操作数 2的乘法运算,并把结果的低 32 位同目的寄存器 Low 中的值相加后又放置到目的寄存器 Low 中,结果的高 32 位同目的寄存器 High 中的值相加后又放置到目的寄存器 High 中,同时可以根据运算结果设置 CPSR 中相应的条件标志位。其中,操作数 1 和操作数 2 均为 32 位的有符号数。对于目的寄存器 Low,在指令执行前存放 64位加数的低 32位,指令执行后存放结果的低 32位。对于目的寄存器 Hi gh,在指令执行前存放 64 位加数的高 32 位,指令执行后存放结果的高 32位。指令示例:

SMLAL R0,R1,R2,R3  ;R0 = (R2 × R3)的低 32 位 + R0

;R1 = (R2 × R3)的高 32 位 + R1

5、 UMULL指令

UMULL指令的格式为:UMULL{条件}{S}  目的寄存器 Low,目的寄存器低 Hi gh,操作数 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,目的寄存器低 Hi gh,操作数 1,操作数 2

UMLAL指令完成将操作数 1与操作数 2的乘法运算,并把结果的低 32 位同目的寄存器 Low 中的值相加后又放置到目的寄存器 Low 中,结果的高 32 位同目的寄存器 High 中的值相加后又放置到目的寄存器 High 中,同时可以根据运算结果设置 CPSR 中相应的条件标志位。其中,操作数 1 和操作数 2 均为 32 位的无符号数。对于目的寄存器 Low,在指令执行前存放 64位加数的低 32位,指令执行后存放结果的低 32位。对于目的寄存器 Hi gh,在指令执行前存放 64 位加数的高 32 位,指令执行后存放结果的高 32位。指令示例:

UMLAL R0,R1,R2,R3  ;R0 = (R2 × R3)的低 32 位 + R0

;R1 = (R2 × R3)的高 32 位 + R1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值