Как я могу вернуть массив из процедуры MIPS? - PullRequest
0 голосов
/ 02 апреля 2019

Каков стандартный способ возврата массива адресов или значений из процедуры MIPS?

Например, предположим, я хочу прочитать предложение и хочу вернуть слова, найденные в этом предложении. Или, предположим, я хочу вернуть позиции 1-го символа каждого слова. И так далее.

1 Ответ

2 голосов
/ 02 апреля 2019

Стандартные способы такие же, как в C:

  • , чтобы вызывающая сторона передавала выходной указатель (на уже выделенный массив, например, в стеке)
  • имеет функцию malloc для массива и возвращает указатель.(Или mmap или что-то еще, но вызывающий должен знать, как была выделена память, потому что вызывающий затем становится ответственным за ее освобождение.)

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

Этот последний способ на самом деле хорош, если вы не знаете длину заранее,и вы можете создать массив, начиная с хвоста.(Таким образом, он растет как стек вызовов, так как вы используете его как структуру данных стека.)

...