刘帅嵌入式系统-MLA指令

刘帅嵌入式系统-MLA指令_第1张图片

MLA指令实现两个32位的数(可以为无符号,也可以为有符号)的乘积,再将乘积加上第3个操作数,并将结果存放到一个32位的寄存器中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。考虑指令执行的效率,指令中所有操作数都存放在寄存器中。

指令的编码格式

刘帅嵌入式系统-MLA指令_第2张图片

指令的语法格式

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

其中:

  • < cond >为指令执行的条件码。当忽略< cond >时,指令为无条件执行。
  • S决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当有S时,指令更新CPSR中的条件标志位的值;当没有S时,指令不更新CPSR中的条件标志位的值。
  • < Rd >寄存器为目标寄存器。
  • < Rm >寄存器为第1个乘数所在的寄存器。
  • < Rs >为第2个乘数所在的寄存器。
  • < Rn >为第3个操作数所在的寄存器,该操作数是一个加数。

指令操作的伪代码

if ConditionPass(cond) then
	Rd=(Rm * Rs + Rn)[31:0]
	if S==1 then
	N Flag=Rd[31]
	Z Flag=if Rd == 0 then 1 else 0
	C Flag=unaffected
	V Flag=unaffected

指令的使用

由于两个32位的数相乘的结果位64位,而MLA指令仅仅保存了64位结果的低32位,所以对于带符号的和无符号的操作数来说,MLA指令执行的结果相同。

对于ARMv5及以上的版本,MLAS指令不影响CPSR寄存器中的C条件标志位。对于以前的版本,MLAS指令执行后,CPSR寄存器中的C条件标志位数值是不确定的。

寄存器< Rm >、< Rn >及< Rd >为 R15时,指令执行的结果不可预期。

示例

MLA R0, R1, R2, R3  ;R0 = R1 * R2 + R3

你可能感兴趣的:(ARM)