2012-02-05 104 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