刘帅嵌入式系统-乘法指令
ARM有两类乘法指令:一类为32位的乘法指令,即乘法操作的结果为32位;另一类为64位的乘法指令,即乘法操作的结果为64位。两类指令共有以下6条。
MUL
MUL指令实现两个32位的数(可以为无符号,也可以为有符号)的乘积,并将结果存放到一个32位的寄存器中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。
指令的编码格式
指令的语法格式
MUL{< cond >} {S} < Rd >, < Rm >, < Rs >
其中:
指令操作的伪代码
if ConditionPass(cond) thenRd=(Rm * Rs)[31:0]if S==1 thenN Flag=Rd[31]Z Flag=if Rd == 0 then 1 else 0C Flag=unaffected /*See "C flag" note*/V Flag=unaffected
指令的使用
由于两个32位的数相乘的结果位64位,而MUL指令仅仅保存了64位结果的低32位,所以对于带符号的和无符号的操作数来说,MUL指令执行的结果相同。
对于ARMv5及以上的版本,MULS指令不影响CPSR寄存器中的C条件标志位。对于以前的版本,MULS指令执行后,CPSR寄存器中的C条件标志位数值是不确定的。
寄存器< Rm >、< Rn >及< Rd >为 R15时,指令执行的结果不可预期。
示例
MUL R0, R1, R2 ;R0 = R1 * R2
MULS R0, R1, R2 ;R0 = R1 * R2 同时设置CPSR中N位和Z位