Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1430 | Дата выхода: | 23.03.2011, 07:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 217 / 67 | Вопросов / ответов: | 1 / 1 | Вопрос № 182479: Здравствуйте! Прошу помощи в следующем вопросе: В массиве, состоящим из N 16-разрядных кодов, определить минимальный элемент и зафиксировать его адрес. Массив находится во внешнем ОЗУ . оформить как подпрограмму. Параметры подпрограмм хра... Вопрос № 182479: Здравствуйте! Прошу помощи в следующем вопросе: В массиве, состоящим из N 16-разрядных кодов, определить минимальный элемент и зафиксировать его адрес. Массив находится во внешнем ОЗУ . оформить как подпрограмму. Параметры подпрограмм хранить в свободной зоне внутренней памяти данных. Микроконтроллер ATmega8535. Отправлен: 12.03.2011, 07:52 Вопрос задал: katbka (1-й класс) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, katbka! Вот, попробовал ответить... Я не уверен полностью в правильности, т.к. нет возможности проверить. Даже не компилировал. Тянуть студию на 500 Мб мне почему-то не захотелось Пробуйте сами. Если что не так, разберемся
Код: .include "m8535def.inc"
.equ N=100 ;размерность массива
;Назначим регистрам символические имена .def counter=r17 ;количество слов ;регистровые пары .def curr_addr=r30 ;Z=r30-r31: адрес текущего элемента .def min_addr=r28 ;r 28-r29: адрес минимального элемента .def save_addr=r26 ;r26-r27: сохраненный адрес текущего элемента ;одиночные .def work=r16 ;временный регистр .def curr_lo=r18 ;r18-r19: текущее слово .def curr_hi=r19 .def min_lo=r20 ;r20-r21: минимальный элемент .def min_hi=r21
.ESEG ;сегмент в EEPROM array: .db 1,0 ;... задаем 100 слов (предоставляю Вам право набить 200 байт )
.CSEG ;кодовый сегмент rjmp Start
Start: ;точка входа ldi R16, low(RAMEND) ;зададим стек out SPL, R16 ldi R16, high(RAMEND) out SPH, R16
;Зададим адрес массива и число элементов ;результат в min_addr = r28:r29 ;само значение в r20:r21 ldi ZL, low(array) ;мл байт адреса массива ldi ZH, high(array) ;ст байт адреса массива ldi counter, $N ;количество call min ;ищем адрес минимально го элемента
wait: jmp wait ;зацикливаемся
min: ;поиск адреса минимального элемента mov min_lo, $0ffh ;min = заведомо самому большому числу (0ffffh) mov min_hi, $0ffh
loop: ;цикл по всем элементам movw save_addr, curr_addr ;сохраним адрес текущего элемента ld curr_lo, Z+ ;мл байт текущего элемента ld curr_hi, Z+ ;ст байт текущего элемента cp curr_hi, min_hi cpc curr_lo, min_lo brge next ;нашли новый минимальный movw min_addr, save_adr ;сохраним адрес минимального mov min_lo, curr_lo ;и его значение mov min_hi, curr_hi next: ;переходим на анализ следующего элемента dec counter ;уменьшаем счетчик brne loop ;циклим, пока counter=r17 не ноль ret
----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 21.03.2011, 15:59 Номер ответа: 266344 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 266344 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий