1. 程式人生 > >1.17.ARM彙編指令集5之乘法指令

1.17.ARM彙編指令集5之乘法指令

ARM彙編指令集之乘法指令:MUL & MLA & UMULL & UMLAL & SMULL & SMLAL

* MUL

32位乘法指令,指令將Rm和Rs中的值相乘,結果的低32位儲存到Rd中。

指令格式:

MUL{cond}{S} Rd,Rm,Rs

eg:

mul r1,r2,r3        ; r1=r2*r3

muls  r0,r3,r7     ; r0=r3*r7, 同時設定CPSR中的N位和Z位

* MLA

32位乘加指令,指令將Rm和Rs中的值相乘,再將乘積的結果與第三個運算元相加,結果的低32位儲存在Rd中。

指令格式:

MLA{cond}{S} Rd,Rm,Rs,Rn

eg:

mla r1,r2,r3,r0     ; r1=r2*r3+r0

* UMULL

64位無符號乘法指令,指令將Rm和Rs中的值做無符號數相乘,結果的低32位儲存到RsLo中,而高32位儲存到RdHi中。

指令格式:

UMULL{cond}{S} RdLo,RdHi,Rm,Rs

eg:

umull r0,r1,r5,r8     ; (r1,r0)=r5*r8

* UMLAL

64位無符號乘加指令,指令將Rm和Rs中的值做無符號數相乘,64位乘積與RdHi,RdLo相加,結果的低32位儲存在RdLo中,高32位儲存在RdHi中。

指令格式:

UMLAL{cond}{S} RdLo,RdHi,Rm,Rs

eg:

umlal r0,r1,r5,r8     ; (r1,r0)=r5*r8+(r1,r0)

* SMULL

64位有符號乘法指令,指令將Rm和Rs中的值做有符號數相乘,結果的低32位儲存到RdLo中,高32位儲存到RdHi中。

指令格式:

SMULL{cond}{S}  RdLo,RdHi,Rm,Rs

eg:

smull  r2,r3,r7,r6      ; (r3,r2)=r7*r6

* SMLAL

64位有符號乘加指令,指令將Rm和Rs中的值做有符號數相乘,64位乘積與RdHi,RdLo相加,結果的低32位儲存到RdLo中,高32位儲存到RdHi中。

指令格式:

SMLAL{cond}{S}  RdLo,RdHi,Rm,Rs

eg:

smlal  r2,r3,r7,r6   ; (r3,r2) = r7*r6+(r3,r2)