Простая функция C для инструкций MIPS - PullRequest
1 голос
/ 22 апреля 2011

У меня есть простая функция c, которую мне нужно преобразовать в инструкции MIPS для домашнего задания.

Функция:

int load(int *ptr) {
     return *ptr;
}

Моя инструкция MIPS, которую я придумал:

load:
     move $v0,$a0
     jr $ra

Это правильно?

1 Ответ

3 голосов
/ 22 апреля 2011

Давайте проанализируем функцию на секунду.

Прежде всего, какие виды всего, что здесь задействовано?

  • ptr - указатель на int.
  • возвращаемое значение должно быть типа int.

Далее, что функция делает с этим?

  • разыменовывает указатель int (т.е. читает значение int, на которое указывает указатель) ptr и возвращает это значение.

Далее рассмотрим, что делает ваш код.

  • вы переместили аргумент в возвращаемое значение.
  • возврат из функции.

Это правильно?

Я бы сказал нет. По сути, вы вернули указатель, а не значение, на которое указатель указывал.

Что вы можете с этим поделать?

Хорошо помните, с какими типами мы имеем здесь дело, и что вы с этим сделали. У вас есть аргумент (типа int *), и вы его возвращаете (типа int). Типы не совпадают. Что мы делали в программе C? Мы разыменовали указатель, чтобы получить значение. Другими словами, преобразовал int * в int. Вам нужно сделать то же самое.

...