查看完整版本: 乘法指令之: UMLAL无符号长乘-累加操作指令

admin 发表于 2014-10-10 07:29:11

乘法指令之: UMLAL无符号长乘-累加操作指令

        7.4UMLAL无符号长乘-累加操作指令

        1.指令编码格式

        UMLAL(Unsigned Multiply Accumulate Long)为64位无符号长乘-累加指令。指令将Rm和Rs中的值做无符号数相乘,64位乘积与RdHi,RdLo相加,结果的低32位保存到RsLo中,而高32位保存到RdHi中。
       
        指令的编码格式如图7.5所示。
       
        图7.5UMALL指令的编码格式
       
        2.指令的语法格式

        UMALL{<cond>}{S}   <RdLo>,<RdHi>,<Rm>,<Rs>
       
        ① <cond>
        为指令编码中的条件域。它指示指令在什么条件下执行。当<cond>忽略时,指令为无条件执行(cond=AL(Alway))。
       
        ② S
        S位(bit)决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当S=1时,更新CPSR中的条件标志位N位和Z位的值;当S=0时,指令不更新CPSR中的条件标志位。
       
        ③ <RdLo>
        存储将要累加到<Rm>×<Rn>乘积结果中的加数的低32位数值的寄存器;同时也为寄存器位目标寄存器,存储最终结果的低32位值。
       
        ④ <RdHi>
        存储将要累加到<Rm>×<Rn>乘积结果中的加数的高32位数值的寄存器;同时也为寄存器位目标寄存器,存储最终结果的高32位值。
       
        ⑤ <Rm>
        第一乘数寄存器。
       
        ⑥ <Rn>
        第二乘数寄存器。
       
        3.指令操作的伪代码

        指令操作的伪代码如下面程序段所示。
       
        IfConditionPassed{cond}then
             RdHi={Rm*Rs }+RdHi+CarryFrom{{Rm*Rs}+RdLo}
             RdLo={Rm*Rs }+RdLo
             IfS==1then
                Nflag = RdHi
                Zflag = if((RdHi==0)and(RdLo==0))then1else0
                Cflag = unaffected
                Vflag = unaffected
       
        4.指令举例

        下面的指令完成(R1,R0)= R5×R8+(R1,R0)操作。
       
        UMLAL    R0, R1, R5,R8;
页: [1]
查看完整版本: 乘法指令之: UMLAL无符号长乘-累加操作指令