我是MIPS的新手,虽然我有点理解如何使用它完成基本任务,但我正在努力处理程序/功能。
我希望有人可以解释如何解决一个简单的CPP计划,例如
void swap( int & a, int & b )
{
register int t;
t = a; a = b; b = t;
}
进入MIPS。 在课堂上我们讨论了帧指针和堆栈指针,偏移量,而我只是迷失了。如何将int a和int b传递给函数?如何返回值并在MIPS中使用它?我已经看到了阵列的类似问题,但希望有人可以帮助我只用两个整数进行交换。谢谢。
答案 0 :(得分:1)
首先,您不应该在C ++中使用关键字register
作为it is deprecated,在大多数情况下as meaningful as whitespace。
如何将int a和int b传递给函数?
将a和b存储在将在子程序中使用的寄存器中。
如果要在数组中交换两个值,请假设为0x80080000:
lui $t0, 0x8008 ;$t0 = 0x80080000
lw $t1 0($t0) ;load (0x80080000) in $t1
lw $t2 4($t0) ;load (0x80080004) in $t2
sw $t1 4($t0) ;store $t1 in 0x80080004
sw $t2 0($t0) ;store $t2 in 0x80080000
如果要交换两个寄存器(xor swap algorithm)的值:
xor $t0, $t0, $t1
xor $t1, $t0, $t1
xor $t0, $t0, $t1
或者,如果您关心可读性:
add $t2, $r0, $t0
add $t0, $r0, $t1
add $t1, $r0, $t2