MIPS ASM Homework - 数组和while循环

时间:2012-02-05 22:04:37

标签: arrays loops assembly while-loop mips

首先,让我这样说......我不希望任何人给我一个答案......我想指出正确的方向!

我在这个程序中有一个整数数组....例如:

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

我有一个贯穿它们的while循环,并在一个新行上打印每个循环。这很好。 (-999是终止号码,不包含在打印输出中)

我还需要以相反的顺序打印它们。我知道我可以使用一个循环来计算元素的数量,然后让另一个循环从最后一个地址开始然后向后......这看起来效率很低。

有没有办法在没有先循环的情况下找到数组中最后一个元素的地址?如果没有,我可以这样做,我提到,只是想确保我在程序中尽可能高效。

提前致谢!

1 个答案:

答案 0 :(得分: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?