2015-12-08 140 views
0

我是MIPS的新手,雖然我理解如何使用它完成基本任務,但我正在爲程序/函數苦苦掙扎。MIPS交換程序/函數問題

我希望有人能解釋如何解決一個簡單的CPP程序,如

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

進入MIPS。 在課堂上,我們討論了幀指針和棧指針,偏移量,並且我只是丟失了。你如何將int a和int b傳遞給函數?你如何返回一個值並在MIPS中使用它?我已經看到與數組類似的問題,但希望如果有人可以幫我一個只有兩個整數交換。謝謝。

+0

不清楚你想要什麼作爲答案。 「解決簡單的CPP計劃」是什麼意思? - 解釋它如何在C級別上運行?它將如何看待asm級別?它如何在asm級別上工作? –

+1

對不起,我的意思是如何以彙編語言/ MIPS來實現它。 – LogwanaMan

+0

爲什麼不[編譯它,看看你自己](http://stackoverflow.com/questions/137038/how-do-you-get-assembler-output-from-c-c-source-in-gcc)?您可能需要關閉任何優化,以便它們不會覆蓋圖片。 –

回答

0

首先,您不應該在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 $t0, $t0, $t1 
xor $t1, $t0, $t1 
xor $t0, $t0, $t1 

或者,如果你在乎關於可讀性:

add $t2, $r0, $t0 
add $t0, $r0, $t1 
add $t1, $r0, $t2