Используя MIPS, чтобы найти сумму массива - PullRequest
0 голосов
/ 19 марта 2012

Так что у меня проблемы с проблемой. Я считаю, что a - это массив слов, а базовый адрес a сохраняется в $ a0. Поэтому для int a [10] найдите сумму этого массива, используя mips. Я действительно не знаю, с чего начать, может ли кто-нибудь помочь мне начать, и я думаю, что я смогу закончить это. Большое спасибо!

1 Ответ

1 голос
/ 19 марта 2012

Так как вам дан адрес начала массива, вы знаете, что это также ваш первый элемент.Поскольку это массив типа int, я предполагаю, что это означает, что он будет использовать область памяти размером с слово в mips32, которое составляет 4 байта.Поэтому [1] расположен по адресу [0] + 4 байта.[2] находится по адресу [0] + 8 байт или [1] + 4 байт и т. Д. *

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

Основной поток:

  1. Пусть count = 0, sum = 0 (сумма - ваше возвращаемое значение, поэтому $ v0)
  2. Загрузить значение слова из $ a0 в регистр
  3. Установить $ a0 = $ a0 + 4 (перейти от [count] к [count + 1], целое число 4 байта на mips32)
  4. Установить сумму = сумму + регистр, в который вы загрузили значение слова в
  5. count = count + 1
  6. , если count <10?(установите меньше чем, ответвление) перейдите к # 2 </li>
  7. переходу и ссылке (при условии, что наша сумма уже находится в $ v0)

Примечание: базовый адрес, который вам дают, ДОЛЖЕН быть словом-aligned.

Примечание по оптимизации: Вы можете оптимизировать количество выполняемых инструкций, установив для некоторого регистра значение $ a0 + 40 до шага 1. Это означает, что вы можете избавиться от шага 5, и шаг 6 будет проверять, если$ a0 меньше регистра, который вы установили перед шагом 1. (Последняя оптимизация перемещает шаг 4 в слот задержки шага 6. Если вы используете симулятор, это может не поддерживаться)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...