Mips 更直接的方法?
这是一个家庭作业问题。我的代码给出了正确的答案。像我那样写出解决方案非常令人困惑,花了我一段时间。有没有更好的编码方法Mips 更直接的方法?,mips,Mips,这是一个家庭作业问题。我的代码给出了正确的答案。像我那样写出解决方案非常令人困惑,花了我一段时间。有没有更好的编码方法 # Convert to MIPS: (((5 + 1) - (1 + 3) + (5 - 3)) - 1) – 5 + 3 main: li $t0 5 li $t1 1 li $t2 3 # (((5 + 1) - (1 + 3) + (5 - 3)) - 1) – 5 + 3 # b
# Convert to MIPS: (((5 + 1) - (1 + 3) + (5 - 3)) - 1) – 5 + 3
main:
li $t0 5
li $t1 1
li $t2 3
# (((5 + 1) - (1 + 3) + (5 - 3)) - 1) – 5 + 3
# becomes ((($t0 + $t1) - ($t1 + $t2) + ($t0 - $t2)) - $t1) - $t0 + $t2
# ((( $t3 ) - ( $t4 ) + ( $t5 )) - $t1) - $t0 + $t2
add $t3, $t0, $t1
add $t4, $t1, $t2
sub $t5, $t0, $t2
sub $t6, $t3, $t4
add $t6, $t6, $t5
sub $t6, $t6, $t1
sub $t6, $t6, $t0
add $a0, $t6, $t2
li $v0, 1 # print $a0
syscall
li $v0, 10 # system call 10... lets us exit, load 10 in $v0
syscall # call the exit.
如果您有MIPS C编译器,则始终可以在关闭优化的情况下编译此编译器:
int main()
{
int one, three, five;
int result;
one = 1;
three = 3;
five = 5;
result = (((five + one) - (one + three) + (five - three)) - one) -
five + three;
return result;
}
然后在生成的目标代码上运行objdump。这不是你的教授想要你做的,但你已经做到了,你会学到更多
编辑:
在将汇编语言文件传递给汇编程序之前,我通常在汇编语言文件上运行C预处理器。当特定寄存器用于特定对象时,它可以使对象更易于读取:
#define FIVE $t0
#define ONE $t1
#define THREE $t2
#define FIVE_PLUS_ONE $t3
#define ONE_PLUS_THREE $t4
#define FIVE_MINUS_THREE $t5
#define ACCUM $t6
main:
li FIVE 5
li ONE 1
li THREE 3
// (((5 + 1) - (1 + 3) + (5 - 3)) - 1) – 5 + 3
// becomes ((($t0 + $t1) - ($t1 + $t2) + ($t0 - $t2)) - $t1) - $t0 + $t2
// ((( $t3 ) - ( $t4 ) + ( $t5 )) - $t1) - $t0 + $t2
add FIVE_PLUS_ONE, FIVE, ONE
add ONE_PLUS_THREE, ONE, THREE
sub FIVE_MINUS_THREE, FIVE, THREE
sub ACCUM, FIVE_PLUS_ONE, ONE_PLUS_THREE
add ACCUM, ACCUM, FIVE_MINUS_THREE
sub ACCUM, ACCUM, ONE
sub ACCUM, ACCUM, FIVE
add $a0, ACCUM, THREE
li $v0, 1 // print $a0
syscall
li $v0, 10 // system call 10... lets us exit, load 10 in $v0
syscall // call the exit.
我在你的代码中看到了这个问题的注释 是的,你可以用更直接的方式来做。您只需按照操作发生的顺序为每个操作创建一个不同的部分。但这会使您的代码更长,而且实际上也没有那么好的可读性
li $t0 5
li $t1 1
add $t2, $t0, $t1
li $t0 1
li $t1 3
add $t3, $t0, $t1
sub $t4, t2, t3
li $t0 5
li $t1 3
sub $t2, $t0, $t1
add $t3, $t4, $t2
li $t0 1
sub $t2, $t3, $t0
#etc.
您是偶然使用SPIM模拟器的吗?我使用的是QtSpim。我的代码应该做一个简单的算术题。对于上面的算术题,括号在1的情况下除了符号外没有任何变化。你可以将数字(5,1,-1,-3,5,3,-1,-5,3)加载到RAM表中,通过读取一个值进行循环,将其加到总数中,然后在完成时返回值。这将占用很少的寄存器,成为一个简单的循环。你已经完成了你的家庭作业。交上来。这是一种了解更多关于计算机如何工作的方法。