2013-09-22 66 views
0

所以,我有一個類,我們已經交付了c代碼中的quicksort算法的實現,我們必須在mips彙編語言中實現該代碼。我已經成功地完成了我的大部分代碼,但是在遞歸方面遇到了一些麻煩。這是我關心的C程序的一部分:quicksort Mips assembly

... 
tmp = v[left]; 
v[left] = v[last]; 
v[last] = tmp; 
qsort(v, left, last-1); 
qsort(v, last+1, right); 

我遇到困難的部分是遞歸部分,即。 qsort(v,left,last-1)...

我的問題是,當qsort(v,left,last-1)運行時,last-1的值被保存爲「right」。所以當這個遞歸調用完成時,我不得不回憶以前的「右」值。我怎麼能這樣做?

編輯: 問題是,數字列表越大,會有更多的遞歸調用,因此,我必須存儲更多的值。我想,我想知道的是,如果有一種方法可以存儲和調用可變長度的值?

+0

把它放在一個備用的註冊?把它放在堆棧上的某個地方? –

+1

使用[堆棧](http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/stack.html)似乎適用於遞歸函數。 – Michael

回答

0

如果您根據標準MIPS調用約定對qsort函數進行編碼,則可以將right變量存儲在其中一個被調用方保存的寄存器($s0,$1,...,$s7)中。

qsort函數開始執行時,它應該做的第一件事是保存它在堆棧上使用的被保存寄存器的任何一個。