2010-05-10 183 views
1

为什么这样的指令,如MIPS汇编指令参数

mul $t1, $v0 , 4 

评估预期。但是

mul $t1, 4 , $v0 

导致语法错误!

我不知道为什么第一个作品,因为只有穆尔每默认寄存器的作品,所以我希望,只有这样的解决方案,我用SPIM模拟器干活

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

回答

1

好吧,我会建议看操作码输出。也许乘以4是为了速度目的而加入或可能是立即交换。 4,reg版本可能不会通过这个“优化”被捕获,这就是它抛出错误的原因。

+1

我的第一个答案是错误的,这个应该更好:) – 2010-05-10 23:18:34

+0

这样的交换过程是如何工作的,为什么它不交换4的时候会不会照顾到4? – 2010-05-10 23:20:07

+0

sll reg,2和4相同,不用额外的寄存器。我猜测,也许汇编程序为你做了这个,并希望你仔细检查操作码输出是否确定。 – 2010-05-10 23:22:29

1

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