2013-03-18 40 views
0

所以我想把它轉換爲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命令,但我不知道如何做到這一點。

+0

技術上你已經使用3個臨時寄存器($ t0,$ t1,$ t2)。您需要更具體地瞭解您可以使用甚至不能使用的內容。 – Michael 2013-03-18 08:52:14

回答

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代碼的一部分,爲您實現一個自己;)