我如何 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
如果你事先不知道长度,这最后一种方法其实很好,你可以创建从尾部开始的数组。 (因此它像调用堆栈一样向下增长,就像堆栈数据结构一样使用它。)
return从 MIPS 过程中获取地址或值数组的标准方法是什么?
例如,假设我想读一个句子并想 return 在该句子中找到的单词。或者,假设我想 return 每个单词第一个字符的位置。等等。
标准方法与您在 C 中可以做的相同:
- 让调用者传递一个输出指针(到一个已经分配的数组,例如在堆栈上)
- 函数 malloc 是一个数组,return 是一个指针。 (或
mmap
或其他,但调用者必须知道内存是如何分配的,因为调用者随后负责释放它。)
或者你可以做一些奇怪的事情,比如把数组放到调用堆栈上,然后 returning with $sp
modified(所以 $sp
指向数组的开头,当你return);在汇编语言中,您可以根据需要制定自己的调用约定。也许 return $v0
中的长度或大小,以便调用者可以在他们最终想要 return.
$sp
如果你事先不知道长度,这最后一种方法其实很好,你可以创建从尾部开始的数组。 (因此它像调用堆栈一样向下增长,就像堆栈数据结构一样使用它。)