2012-03-19 2 views
0

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

ответ

1

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

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

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

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

Примечания: Базовый адрес вы получаете должен быть выровнено по границе слова.

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

Смежные вопросы