Assembly MIPS汇编程序指令参数

Assembly MIPS汇编程序指令参数,assembly,mips,Assembly,Mips,为什么像这样的指示 mul $t1, $v0 , 4 按预期进行评估。但是 mul $t1, 4 , $v0 导致语法错误 我想知道为什么第一个可以工作,因为mul只在默认情况下使用寄存器,所以我希望只有这样的解决方案才能工作 li $t1, 4 # set $t1 = 4 mul $t1, $v0 , $t1 # set $t1 = 4 * n 我正在使用SPIM模拟器。好的,我建议查看操作码输出。也许乘以4被替换为加法,或者可能是s

为什么像这样的指示

mul   $t1, $v0 , 4 
按预期进行评估。但是

mul   $t1, 4 , $v0 
导致语法错误

我想知道为什么第一个可以工作,因为mul只在默认情况下使用寄存器,所以我希望只有这样的解决方案才能工作

li   $t1, 4             # set $t1 = 4
mul   $t1, $v0 , $t1      # set $t1 = 4 * n

我正在使用SPIM模拟器。

好的,我建议查看操作码输出。也许乘以4被替换为加法,或者可能是sll immediate以提高速度。4,reg版本可能无法通过此“优化”捕获,这就是它抛出错误的原因。

这会导致语法错误,因为MIPS仅支持伪指令
mul[rs][rt][imm]
,而不支持
mul[rs][imm][rt]
。我假设它是为了一致性的,因为MIPS中没有真正的指令在指令的中间支持一个即时值。

我的第一个答案是完全错误的,这一个应该要好得多:)这样的交换过程是如何工作的,为什么如果它被交换,它就不需要照顾4个?SLL Reg,2与不使用额外寄存器的情况下乘以4相同。我猜可能是汇编器为您做了这件事,并希望您仔细检查操作码输出以确定。