Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
6 / 5 / 1
Регистрация: 12.11.2019
Сообщений: 153

Рекурсивное вычисление суммы элементов массива в MIPS

16.12.2021, 21:14. Показов 1649. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется код:
C
1
2
3
4
5
6
7
int summa(int N, int a[100])
{
    if (N==0)
        return a[0];
    else
        return a[N]+summa(N-1, a);
}
Помогите пожалуйста переписать на assambler MIPS..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2021, 21:14
Ответы с готовыми решениями:

java 2 рекурсивное вычисление суммы элементов массива
Киньте прогу плиз : рекурсивное вычисление суммы элементов массива Добавлено через 6 минут и рекурсивное вычисление максимума в...

Рекурсивное вычисление суммы элементов последовательности
Написал лабораторную работу, но сейчас понял что у меня на самом деле вычисляется не сумма элементов, а последний элемент. Формула n-ного...

Одномерный массив. Рекурсивное вычисление суммы элементов.
Написать программу на паскале с рекурсивной функцией, вычисяющей сумму элементов одномерного мссива исходный массив А 23 14 5 67 2 34 11...

9
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
17.12.2021, 10:03
Цитата Сообщение от Lapys Посмотреть сообщение
переписать на assambler MIPS..
https://godbolt.org/z/6PMj9E1ov
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
17.12.2021, 20:42
Voland_, там компилятор заоптимизировал всё и убрал рекурсию
Можно -Os заменить на -O1... тогда он лишние действия (как при -O0) убирает, но рекурсию оставляет.
Вот только названия регистров потом придётся самому добавить, ориентируясь на номера.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
17.12.2021, 22:30
Цитата Сообщение от Humanoid Посмотреть сообщение
Voland_, там компилятор заоптимизировал всё и убрал рекурсию
я, если честно, не знаю этот ассемблер совсем )

Не по теме:

На экзамене:
- Как называется прибор для измерения тока? Студент - глядь в шпаргалку.
- Амперметр.
- Правильно. А как называется прибор для измерения напряжения? Студент в
шпаргалку, а преподаватель его по руке хлоп.
- ЭЭЭ...Ну...Это...Напряжометр! Препод - в шпаргалку, а студент - его по руке.
- Хм. Правильно!


...
PS: [какая-то бага с тегом "SPOILER", несколько раз уже сталкивался]
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
18.12.2021, 12:48
Цитата Сообщение от Voland_ Посмотреть сообщение
я, если честно, не знаю этот ассемблер совсем

Не по теме:

Он довольно простой. Там главная проблема - это отложенные слоты, когда инструкция, которая идущая следом за прыжком, выполняется одновременно с прыжком. Например,

Code
1
2
3
beq a1,zero, label1
addiu a0, a0, 10
.....
Тут фишка такая, что addiu выполнится только если beq сработает (если a1==0) и прыгнет на label1. Казалось бы, что addiu стоит уже после инструкции прыжка, но выполнится при прыжке. А если прыжка не будет, то и addiu не будет выполняться. Это часто создаёт путаницу, когда забываешь про эту особенность. Даже видел компилятор, который во все отложенные слоты вставляет инструкцию nop и тогда можно об этом не думать.



А заметить отсутствие рекурсии легко. Вызов функции - это инструкция "jal". И тут быглым осмотром видно, что её нет. Если изменить -Os на -O1, то она появляется... но появляется работа со стеком, поэтому код становится больше.
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
18.12.2021, 22:18
Humanoid, спасибо. Много специфики. Я глянул еще код на AVR - GCC с оптимизацией тоже старается уйти от рекурсии.

PS: тут еще функция не очень прикольно написана. Если объявить массив
C
1
static int a[100];
вне функции (и убрать его из аргументов), то это заметно разгрузит стек в рекуррентном вызове.
0
6 / 5 / 1
Регистрация: 12.11.2019
Сообщений: 153
20.12.2021, 20:25  [ТС]
а возможно ввести в .asciiz больше 10 символов? Может есть какой-нибудь аналог формата переменной, в которую я могу ввести больше 10 символов?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
21.12.2021, 13:21
Цитата Сообщение от Lapys Посмотреть сообщение
а возможно ввести в .asciiz больше 10 символов?
сам формат это не запрещает. Почему вы решили, что нельзя?

PS: в общем, всегда можно разбить .asciiz на много .ascii, постави единственный ноль в конце.
0
6 / 5 / 1
Регистрация: 12.11.2019
Сообщений: 153
21.12.2021, 13:23  [ТС]
Потому что вводя число состоящее больше, чем из 10 цифр(например 11) в $a0 сохраняется 0., вместо числа.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
21.12.2021, 13:28
Цитата Сообщение от Lapys Посмотреть сообщение
Потому что вводя число состоящее больше, чем из 10 цифр(например 11) в $a0 сохраняется 0., вместо числа.
Что-то где-то понятно, но ничего конкретного. "Вводя" куда? "Число" в каком виде? Какой "$a0" и что это вообще? Наверное, вы плоховато мотивированы, чтобы получить правильный ответ ) Вы можете показать строчку в файле, как они выглядят у вас?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2021, 13:28
Помогаю со студенческими работами здесь

Рекурсивное вычисление среднего элементов массива
Надо решить задачу на рекурсию. написать рекурсивную функцию, которая возвращает среднее из n элементов массива чисел.

Рекурсивное нахождение суммы элементов массива.
Привет Народ! Напишите пожалуйста рекурсию вычисление суммы элементов одномерного массива Заранее спасибо!

Рекурсивное вычисление суммы
Описать решение задачи о нахождении n – члена последовательности, о нахождении суммы числового ряда. При выполнении задачи использовать...

Рекурсивное вычисление суммы
Напишите рекурсивную подпрограмму , которая вычисляет сумму S=1+3+5+...+(2n-1) .

Рекурсивное вычисление суммы
3. Составьте программу вычисления суммы: X x2 x3 xn 1 + --- + --- + --- + ... + --- 1! ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru