2012-02-05 72 views
0

首先,讓我這樣說...我不希望任何人只要給我一個答案......我想在正確的方向指出!MIPS ASM作業 - 陣列和while循環

我有一個整數數組在這個方案....例如:

numbers: 
    .word 17 
    .word -50 
    .word 1 
    .word -999 

我有貫穿其中,並打印每一個在新行while循環。這工作正常。 (-999是終止數,和不包括在打印輸出)

我還需要打印它們以相反的順序。我知道我可以使用一個循環來計算元素的數量,然後在最後一個地址處開始另一個循環,然後向後......這似乎是低效的。

是否有某種方式找到的最後一個元素的數組中的地址,而不首先進行循環?如果沒有,我可以按照我提到的方式來做,只是想確保我在程序中儘可能高效。

在此先感謝!

+0

如果你有一個長度,你可以直接跳到那裏,但是如果陣列端只有-999表示,您對掃描,並從那裏倒退正確的想法。 – 2012-02-05 22:08:33

+0

如果你沒有更多的信息(如最後一個元素地址),那麼沒有。 – m0skit0 2012-02-06 15:05:28

回答

1

如果你被允許做任何你想要的組裝技巧,你可以不喜歡

numbers: 
.word 17 
.word -50 
.word 1 
last: 
.word -999 

,並使用代碼這樣的僞代碼

for (ptr = last; ptr != numbers;) print(*--ptr); 

換句話說,把一個標籤,數組的末尾並向後走,直到你擊中數組的開始,使用指針比較而不是查找終止符(-999)。

或者,以避免改變你的代碼太多了,怎麼樣

.word -999 
numbers: 
.word 17 
.word -50 
.word 1 
last: 
.word -999 

,直到你找到-999向後走?

+0

感謝您的建議,但我一定會把它放在我的技巧列表中,但是,因爲這是一項家庭作業,他們將添加數字:數組到我的文件以運行不同的測試,我沒有控制這部分。 – user677786 2012-02-05 22:24:43

+0

您不必更改數據結構呈現,但你仍然可以做這種伎倆:'編號: .word 17 .word -50 .word 1 .word -999 最後: \t .word -999'和btw理查德彭寧頓,你不需要那個領先的'.word -999',因爲你有'數字'標籤。 – m0skit0 2012-02-07 08:21:51

+0

因此,如果我理解正確,即使它在一個新的標籤上,它仍然會在數字中的最後一個單詞後的內存中的下一個位置:?那樣,我只能從該標籤地址向後計數? – user677786 2012-02-07 16:46:37