Стандартные способы такие же, как в C:
- , чтобы вызывающая сторона передавала выходной указатель (на уже выделенный массив, например, в стеке)
- имеет функцию malloc для массива и возвращает указатель.(Или
mmap
или что-то еще, но вызывающий должен знать, как была выделена память, потому что вызывающий затем становится ответственным за ее освобождение.)
Или вы можете сделать странные вещи, такие как помещение массивана стек вызовов и возвращаясь с измененным $sp
(поэтому $sp
указывает на начало массива при возврате);на ассемблере вы можете составить свои собственные соглашения о вызовах, если хотите.И, возможно, верните длину или размер в $v0
, чтобы вызывающий мог восстановить $sp
, когда он в конце концов захочет вернуться.
Этот последний способ на самом деле хорош, если вы не знаете длину заранее,и вы можете создать массив, начиная с хвоста.(Таким образом, он растет как стек вызовов, так как вы используете его как структуру данных стека.)