Вопрос № 182399: Здравствуйте! Прошу помощи в следующем вопросе: В массиве, состоящим из N 16-разрядных кодов, определить минимальный элемент и зафиксировать его адрес. Массив находится во внешнем ОЗУ. Процессор Intel 8051....
Вопрос № 182399:
Здравствуйте! Прошу помощи в следующем вопросе: В массиве, состоящим из N 16-разрядных кодов, определить минимальный элемент и зафиксировать его адрес. Массив находится во внешнем ОЗУ. Процессор Intel 8051.
Отправлен: 06.03.2011, 15:50
Вопрос задал: katbka (Посетитель)
Всего ответов: 1 Страница вопроса »
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, katbka! Можно сделать примерно так, как в предлагаемой программе Предполагаем, что элементы хранятся в порядке "младший байт первым" С вопросами обращайтесь в мини-форум
Код:
array equ 0000h ;адрес массива 16-разрядных чисел во внешней памяти N equ 100 ;размерность массива
;Зададим адрес массива и число элементов ;результат в min_adr_lo и min_adr_hi mov arr_adr_lo, #low array ;мл байт адреса массива mov arr_adr_hi, #high array ;ст байт адреса массива mov arr_count, #N ;количество call min ;ищем адрес минимального элемента
loop: ;цикл по всем элементам mov work_adr_lo, dpl ;сохраним адрес текущего элемента mov work_adr_hi, dph movx a, @dptr ;мл байт текущего элемента
mov r0, a ;сохраним inc dptr ;на адрес ст байта movx a, @dptr ;ст байт текущего элемента mov r1, a ;сохраним inc dptr ;на следующий элемент cjne a, min_hi, cmphi ;сравним ст байт текущего элемента со ст байтом минимального jmp cmplow ;если равны, то на сравнение мл байтов cmphi: ;не равны jnc next ;если текущий больше, то на следующий элемент jmp newmin ;если меньше, то сохраняем новый минимальный
cmplow: ;сравниваем мл байты mov a, r0 ;мл
байт текущего элемента cjne a, min_lo, cmplo ;сравним мл байт текущего элемента со мл байтом минимального jmp next ;если равны, то на следующий cmplo: ;не равны jnc next ;если больше, то на следующий
newmin: ;нашли новый минимальный mov min_adr_lo, work_adr_lo ;сохраним адрес минимального mov min_adr_hi, work_adr_hi mov min_lo, r0 ;и его значение mov min_hi, r1 next: ;переходим на анализ следующего элемента
djnz r2, loop ;циклим, пока r2 не ноль pop dph pop dpl ;восстановим dptr ret
end
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 07.03.2011, 11:36
Номер ответа: 266127 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 266127
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.