ARM學習筆記7——乘法指令


  ARM乘法指令完成兩個數據的乘法,兩個32位二進制數相乘的結果是64位的4積。

其中:

  1、“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)鏈接形成的64位數,“[31:0]”只選取結果的最低有效32位

  2、簡單的賦值由“:=”表示

  3、累加(將右邊加到左邊)是由“+=”表示

一、MUL乘法指令

  1、作用
    將Rm和Rs中的值相乘,結果的最低32位保存到Rd中
  2、語法格式
    MUL{<condition>}{S} <Rd>,<Rm>,<Rs>
  3、參數說明
    3.1、S:S位(bit[20])決定指令的操作是否影響CPSR中的條件標志位N位和Z位的值。當S=1時,跟新CPSR中的條件標志位的值;當S=0,指令不更新CPSR中的條件標志位。
    3.2、<Rd>:寄存器位目標寄存器
    3.3、<Rm>:第一個乘數所在寄存器
    3.4、<Rs>:第二個乘數所在寄存器

  4、舉例:

    R1=R2*R3用指令表示為 MUL R1,R2,R3

二、MLA乘-累加指令
  1、作用
    將Rm和Rs中的值相乘,再將乘積加上第三個操作數,結果的最低32保存到Rd中
  2、語法格式
    MLA{<condition>}{S} <Rd>,<Rm>,<Rs>,<Rn>
  3、參數說明:
    3.1、<Rd>:寄存器位目標寄存器
    3.2、<Rm>:第一個乘數所在寄存器
    3.3、<Rs>:第二個乘數所在寄存器
    3.4、<Rn>:將要累加到<Rm>*<Rs>結果中的第三操作數
  4、舉例說明
    R1=R2*R3+10用指令表示為 : 

     MOV  R0,#0x0A
     MLA  R1,R2,R3,R0

三、UMULL無符號數長乘指令
  1、作用
    UMULL為64位無符號乘法指令,指令將Rm和Rs中的值做無符號數相乘,結果的低32位保存到RsLo中,而高32位保存到RdHi中。
  2、語法格式
    UMULL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
  3、參數說明
    3.1、<RdLo>:寄存器位目標寄存器,存儲結果的低32位值
    3.2、<RdHi>:寄存器位目標寄存器,存儲結果的高32位值
    3.3、<Rm>:第一個乘數寄存器
    3.4、<Rs>:第二個乘數寄存器
  4、舉例
    完成(R1,R0)=R5*R8操作
    UMULL R0,R1,R5,R8

四、UMLAL無符號長乘-累加操作指令
  1、作用
    UMLAL位64位無符號長乘-累加指令,指令將Rm和Rs中的值做無符號數相乘,64位乘積與RdHi,RdLo相加,結果的低32位保存到RsLo中,而高32位保存到RdHi中。
  2、語法格式
    UMLAL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>

  3、舉例
    完成(R1,R0)=R5*R8+(R1,R0)操作
    UMLAL R0,R1,R5,R8

五、SMULL有符號數長乘操作指令
  1、作用
    SMULL64位有符號長乘指令,指令將Rm和Rs中的值做有符號數相乘,結果的低32位保存到RsLo中,而高32位保存到RdHi中
  2、語法格式
    SMULL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
  3、實例
    完成(R3,R2)=R7*R6  
    SMULL R2,R3,R7,R6

六、SMLAL有符號長乘-累加操作指令
  1、作用
    SMLAL為64位有符號長乘法指令,指令將Rm和Rs中的值做有符號數相乘,64位乘積與RdHi,RdLo相加,結果的低32位保存到RsLo中,而高32位保存到RdHi中。
  2、語法指令
    SMLAL{<condition>}{S} <RdLo>,<RdHi>,<Rm>,<Rs>
  3、實例
    完成(R3,R2)=R7*R6+(R3,R2)
    SMLAL R2,R3,R7,R6

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM