交换mips数组的值没有临时寄存器

时间:2013-03-18 07:51:41

标签: mips

所以我试图将其转换为mips。

void swap (int *px, int *py) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}

我认为它可能像

sll $t1, $a1, 2
add $t1, $a0, $t1
lw $t0, 0($t1)
lw $t2, 4($t1)
sw $t2, 0($t1)
sw $t0, 4($t1)
jr $ra

但我不允许使用临时注册。

我想我必须使用一些lw / sw命令,但我不知道你怎么做。

1 个答案:

答案 0 :(得分:2)

有两个解决方案:

1)数学

void swap(int &x, int &y)
{
     if(*x != *y)
     {
         x = x - y;
         y = y + x;
         x = y - x;
     }
}

注意:请勿使用此方法。在某些情况下,它可能会导致溢出。

2) XOR (使用此)

void xorSwap (int *x, int *y) 
{
     if (x != y) 
     {
         *x ^= *y;
         *y ^= *x;
         *x ^= *y;
     }
 }

Wikipedia about XOR

我离开了MIPS代码部分供您自己实现;)