我試圖在MIPS中創建一個合併排序算法,並且在我的代碼中發現了一個錯誤。在我的程序中,我保持對陣列的起點和終點的引用(分別爲$a0
和$a1
)。我也跟蹤其長度爲$a1 - $a0 + 4
。問題是我不知道如何正確計算陣列的中點。我必須這樣做,這些功能相當於在C調用:在MIPS中查找數組的中點 - 合併排序
mergesort(a, start, mid);
mergesort(a, mid + 1, end);
我是新來的MIPS所以我不清楚自己是如何做的4位地址的算法。我不能將它們添加爲($a0 + $a1)/2
,因爲添加兩個地址會導致溢出。
我的數組聲明瞭在頂部,這樣的:
array: .word 0:15
我可以假設,不超過15個號碼將被輸入。 $s0
(指針數組的開始),$s1
(指針的最後一個元件之後的空間),$a0
(起點參數),和$a1
(結束點參數)都存儲這樣的:
la $s0, array
move $s1, $s0 // $s1 increments by 4 each time an element is added
...
move $a0, $s0
addi $a1, $s1, -4 // subtract four because we want to refer to the last element
如何計算給定$ a0和$ a1作爲參考的數組的中間索引?任何幫助,將不勝感激。謝謝!