Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Boriss
Статус: Академик
Рейтинг: 2652
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2356
∙ повысить рейтинг »
vladisslav
Статус: 8-й класс
Рейтинг: 1341
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска: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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное