我正在学习如何做MIPS,我对乘法感到困惑。假设我将以下C代码转换为MIPS。在MIPS中将寄存器值乘以常数?
c = b + a*3
将a,b,c分别存储在寄存器$ s1,$ s2,$ s3中。我该如何在MIPS中写入* 3?是否有一个addi类型的乘法指令,或者我将3存储在一个临时寄存器中并使用像这样的mult操作符?
addi $t0, $zero, 3
mult $s1,$t0
如果是这样,我该如何获得该操作的最终价值或产品来完成我的C代码?
我正在学习如何做MIPS,我对乘法感到困惑。假设我将以下C代码转换为MIPS。在MIPS中将寄存器值乘以常数?
c = b + a*3
将a,b,c分别存储在寄存器$ s1,$ s2,$ s3中。我该如何在MIPS中写入* 3?是否有一个addi类型的乘法指令,或者我将3存储在一个临时寄存器中并使用像这样的mult操作符?
addi $t0, $zero, 3
mult $s1,$t0
如果是这样,我该如何获得该操作的最终价值或产品来完成我的C代码?
MIPS指令集不提供具有立即值的多指令。因此,您必须将该值存储到临时寄存器中,然后使用mult指令。 mult指令的结果将存储在lo和hi寄存器中,分别给出结果的低32位和高32位的结果。
所以在这种情况下,如果a是小的像a = 3那么我只会对“mflo”感兴趣是否正确? – maxbr7t
是的,那是对的。 –
64位产品位于'lo'和'hi'寄存器中。使用'mflo'和'mfhi'指令来获取它们的值(或者,如果你只对32个最低有效位感兴趣,那么就是'mflo')。有关这些说明的更多信息,请参阅MIPS指令集参考。 – Michael