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

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

乘法指令之: SMLAL有符号长乘-累加操作指令

        7.6SMLAL有符号长乘-累加操作指令

        1.指令编码格式

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

        SMLAL{<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中的条件标志位。
       
        其他参数详见SMULL指令。
       
        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.指令举例

        下面的指令完成(R3,R2)= R7×R6+(R3,R2)操作。
       
        SMLAL    R2, R3, R7,R6;
页: [1]
查看完整版本: 乘法指令之: SMLAL有符号长乘-累加操作指令