0

だから私はこれをミップに変換しようとしています。

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

これには 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;
     }
 }

XOR に関するウィキペディア

自分で実装するために MIPS コードの部分を残しました ;)

于 2013-03-18T09:56:29.703 に答える