Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 43
1

Циклы: складывать два произвольных числа до тех пор, пока их сумма не превысит 1000

06.07.2020, 10:05. Просмотров 1186. Ответов 28

Добрый деyь! Была посталена задача сделать программу которая будет складывать два произвольных числа до тех пор пока их сумма не привысит 1000. Желательно сделать на микроконтроллере Atmga16. Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2020, 10:05
Ответы с готовыми решениями:

Цикл: Вводите числа до тех пор пока произведение не превысит число 1000 или сумма чисел не превысит число 152
Прошу помочь, мне нужно в школу принести задачи, а в паскале я не очень разбираюсь 1. Вводите...

Составить программу вывода на экран положительных чисел, кратных 3 до тех пор, пока сумма не превысит 1000.
Помогите.Составить программу вывода на экран положительных чисел, кратных 3 до тех пор, пока сумма...

Суммировать числа до тех пор, пока сумма не превысит 15.
Имеется массив А из N произвольных чисел - А(N), среди которых есть положительные, отрицательные и...

Выписывать числа Фибоначчи до тех пор, пока их сумма не превысит 100
Составить процедуру, которая записывала числа фибоначчи( f0=f1=1, f(n)=f(n-1)+f(n-2)) начиная с...

28
Модератор
3509 / 3011 / 545
Регистрация: 07.10.2015
Сообщений: 6,344
06.07.2020, 12:10 21
NikitaKocher, тю, исправь у меня еще одно место:
Assembler
10
rjmp     add_cmp
у mega16 нет команды jmp
0
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 43
06.07.2020, 12:11  [ТС] 22
хорошо, спасибо.
0
Модератор
3509 / 3011 / 545
Регистрация: 07.10.2015
Сообщений: 6,344
06.07.2020, 12:21 23
NikitaKocher, вот еще вариант:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    LDI     R16, 10         ;R17:R16 = sum
    EOR     R17, R17
    LDI     R18, 11         ;будем добавлять 11
    LDI     R2, high(1000)  ;старший байт предельного значения суммы
    EOR     R0, R0          ;0, для складывания старшего байта
sum_loop:
    add     R16, R18
    adc     R17, R0         ;+0+C
    cpi     R16, low(1000)  ;младний байт сравним с константой, равной младшему байту предела
    cpc     R17, R2         ;а старший - с регистром, в котором старший байт предела
    brlo    sum_loop        ;меньше - продолжаем
    breq    sum_ret         ;равно - выход
    sub     R16, R18        ;больше - отнимем последнее слагаемое
    sbc     R17, R0
sum_ret:
0
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 43
06.07.2020, 12:22  [ТС] 24
Цитата Сообщение от liv Посмотреть сообщение
;áóäåì äîáàâëÿòü 11
    LDI     R18, high(1000) ;ñòàðøèé áàéò ïðåäåëüíîãî çíà÷åíèÿ ñóììû
    EOR     R0, R0          ;0, äëÿ ñêëàäûâàíèÿ ñòàðøåãî áàéòà
sum_loop:
    add     R16, R18
    adc     R17, R0         ;+0+C
    cpi     R4, low(1000)   ;ìëàäíèé áàéò ñðàâíèì ñ êîíñòàíòîé, ðàâíîé ìëàäøåìó áàéòó ïðåäåëà
    cpc     R5, R2          ;à ñòàðøèé - ñ ðåãèñòðîì, â êîòîðîì ñòàðøèé áàéò ïðåäåëà
    brlo    sum_loop        ;ìåíüøå - ïðîäîëæàåì
    breq    sum_ret         ;ðàâíî - âûõîä
    sub     R16, R18        ;áîëüøå - îòíèìåì ïîñëåäíåå ñëàãàåìîå

ой тут ошибка кодировки(
0
Модератор
3509 / 3011 / 545
Регистрация: 07.10.2015
Сообщений: 6,344
06.07.2020, 12:24 25
Без регистровых пар, просто старший:младший байт
0
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 43
06.07.2020, 12:24  [ТС] 26
теперь всё хорошо спасибо.
0
Модератор
3509 / 3011 / 545
Регистрация: 07.10.2015
Сообщений: 6,344
06.07.2020, 12:35 27
Лучший ответ Сообщение было отмечено NikitaKocher как решение

Решение

NikitaKocher, внес правки. Пишу на коленке...

Добавлено через 1 минуту
И еще была описка
Окончательный вариант:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    LDI     R16, 10         ;R17:R16 = sum
    EOR     R17, R17
    LDI     R18, 11         ;будем добавлять 11
    LDI     R19, high(1000) ;старший байт предельного значения суммы
    EOR     R0, R0          ;0, для складывания старшего байта
sum_loop:
    add     R16, R18
    adc     R17, R0         ;+0+C
    cpi     R16, low(1000)  ;младний байт сравним с константой, равной младшему байту предела
    cpc     R17, R19            ;а старший - с регистром, в котором старший байт предела
    brlo    sum_loop        ;меньше - продолжаем
    breq    sum_ret         ;равно - выход
    sub     R16, R18        ;больше - отнимем последнее слагаемое
    sbc     R17, R0
sum_ret:
Добавлено через 7 минут
NikitaKocher, вопросы есть? Дал два варианта, выбирай любой на выбор
1
0 / 0 / 0
Регистрация: 13.10.2019
Сообщений: 43
06.07.2020, 12:38  [ТС] 28
Спасибо вам огромное. Погуглил команды и все стало понятнее. Щас на листочке скомпилирую что бы точно понять. Ещё раз спасибо вам большое!
0
404 / 192 / 40
Регистрация: 21.09.2008
Сообщений: 661
08.07.2020, 10:40 29
Цитата Сообщение от NikitaKocher Посмотреть сообщение
Щас на листочке скомпилирую что бы точно понять
Держите компилятор ассемблера avra.
0
Вложения
Тип файла: zip avra.zip (539.9 Кб, 2 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.07.2020, 10:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Организовать ввод чисел до тех пор, пока их сумма не превысит введенного числа m
В VBA немного разбираюсь, но после пары дней раздумий ничего не вышло.... Прошу помощи!...

Вычисление суммы натуральных чисел до тех пор, пока сумма не превысит заданного с клавиатуры числа
Вычисление суммы натуральных чисел до тех пор, пока сумма не превысит заданного с клавиатуры числа

Циклы с постусловием и предусловием. Вычислить сумму квадратов натуральных чисел до тех пор, пока квадрат очередного числа не превысит 81
Практическая работа Задание 2. Вычислить сумму квадратов натуральных чисел до тех пор, пока...

Складывать числа до тех пор, пока не встретится ноль
Складывать числа до встречи 0. Напечатать сумму. Снова суммировать до 0, напечатать новую сумму и...

Сложение чисел до тех пор, пока сумма не превысит заданную величину
Помогите, пожалуйста, найти ошибку! Задание : Организовать цикл типа Do Untill, на шаге которого...

Написать программу ввода произвольных чисел, принимающую ввод до тех пор, пока не будет введён ноль (циклы)
Помогите решить задачу. Условие: Написать программу ввода произвольных чисел до тех пор, пока не...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.