0

所以我正在尝试将其转换为 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 命令,但我不知道你该怎么做。

4

1 回答 1

2

对此有两种解决方案:

1)数学

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

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

2)异或(使用这个)

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

关于异或的维基百科

我将 MIPS 代码部分留给您自己实现;)

于 2013-03-18T09:56:29.703 回答