|  | 
 
| 7.2  MLA乘-累加指令 
 1.指令编码格式
 
 MLA(Multiply Accumulate)32位乘累加指令将Rm和Rs中的值相乘,再将乘积加上第3个操作数,结果的最低32位保存到Rd中。
 
 指令的编码格式如图7.3所示。
 
 
         图7.3  MLA指令的编码格式 
 2.指令的语法格式
 
 MLA{<cond>}{S}   <Rd>,<Rm>,<Rs>,<Rn>
 
 ① <cond>
 为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。
 
 ② S
 S位(bit[20])决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当S=1时,更新CPSR中的条件标志位的值;当S=0时,指令不更新CPSR中的条件标志位。
 
 ③ <Rd>
 寄存器位目标寄存器。
 
 ④ <Rm>
 第一个乘数所在寄存器。
 
 ⑤ <Rs>
 第二乘数所在寄存器。
 
 ⑥ <Rn>
 将要累加到<Rm>×<Rs>结果中的第3操作数。
 
 3.指令操作的伪代码
 
 指令操作的伪代码如下面程序段所示。
 
 If  ConditionPassed{cond}  then
 Rd={Rm*Rs+Rn}[31:0]
 If  S==1  then
 N  flag = Rd[31]
 Z  flag = if  Rd==0  then  1  else  0
 C  flag = unaffected
 V  flag = unaffected
 
 4.指令举例
 
 下面指令完成R1=R2×R3+10的操作。
 
 MOV     R0, #0x0A;
 MLA     R1, R2, R3, R0;
 | 
 |