MIPS交换程序/功能问题

时间:2015-12-08 17:24:13

标签: stack mips swap

我是MIPS的新手,虽然我有点理解如何使用它完成基本任务,但我正在努力处理程序/功能。

我希望有人可以解释如何解决一个简单的CPP计划,例如

void swap( int & a, int & b )
{
  register int t;
  t = a; a = b; b = t;
}

进入MIPS。 在课堂上我们讨论了帧指针和堆栈指针,偏移量,而我只是迷失了。如何将int a和int b传递给函数?如何返回值并在MIPS中使用它?我已经看到了阵列的类似问题,但希望有人可以帮助我只用两个整数进行交换。谢谢。

1 个答案:

答案 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