我如何 return 来自 MIPS 程序的数组?

How can I return an array from a MIPS procedure?

return从 MIPS 过程中获取地址或值数组的标准方法是什么?

例如,假设我想读一个句子并想 return 在该句子中找到的单词。或者,假设我想 return 每个单词第一个字符的位置。等等。

标准方法与您在 C 中可以做的相同:

  • 让调用者传递一个输出指针(到一个已经分配的数组,例如在堆栈上)
  • 函数 malloc 是一个数组,return 是一个指针。 (或 mmap 或其他,但调用者必须知道内存是如何分配的,因为调用者随后负责释放它。)

或者你可以做一些奇怪的事情,比如把数组放到调用堆栈上,然后 returning with $sp modified(所以 $sp 指向数组的开头,当你return);在汇编语言中,您可以根据需要制定自己的调用约定。也许 return $v0 中的长度或大小,以便调用者可以在他们最终想要 return.

时恢复 $sp

如果你事先不知道长度,这最后一种方法其实很好,你可以创建从尾部开始的数组。 (因此它像调用堆栈一样向下增长,就像堆栈数据结构一样使用它。)