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)