Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1441 | Дата выхода: | 30.04.2011, 03:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 215 / 65 | Вопросов / ответов: | 1 / 1 | Вопрос № 182934: Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе: Установить заданный разряд 2-байтового слова в 1 или 0. Исходными данными являются адрес слова и команда, расположенные во внешнем ОЗУ. Формат команды: 0 разряд - значение би... Вопрос № 182934: Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе: Установить заданный разряд 2-байтового слова в 1 или 0. Исходными данными являются адрес слова и команда, расположенные во внешнем ОЗУ. Формат команды: 0 разряд - значение бита, 1-4 разряды - номер бита. ОМК Intel 8051. P.S. Преподаватель подсказал, что задачу можно решить тремя способами: с помощью масок, с помощью сдвигов и с помощью проверки "больше или меньше 7", чтобы определить в старшем или младшем байте находится заменяемый элемент. вроде так. вот ссылка на "URL >> АРХИТЕКТУРА И ПРОГРАММИРОВАНИЕ ОДНОКРИСТАЛЬНЫХ МИКРОКОНТРОЛЛЕРОВ MCS-51/52http://depositfiles.com/files/om2ud9mmw Отправлен: 25.04.2011, 02:57 Вопрос задал: Никита Владимирович (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Никита Владимирович! Вот и программа... Идея такая: 1) сдвинаем вправо слово "номер бита" раз так, чтобы нужный бит оказался нулевым в младшем байте 2) вставляем новое значение бита 3) сдвигаем слово обратно, чтобы все встало на те же места Если что не понятно, обращайтесь...
Код: ljmp start Org 100h start: mov sp, #60h mov dptr, #00h movx a, @dptr ;младший байт mov 20h, a ;чтобы иметь возможность адресовать биты inc dptr movx a, @dptr ;старший байт mov 21h, a inc dptr movx a, @dptr ;номер бита (1-4), бит (0) mov 22h, a
rrc a ;номер бита 0-7 mov r2, a ;сохраним как счетчик jz SetBit ;если бит 0, то на установку бита mov r3, a ;дубль счетчика, он нам еще понадобится
RightLoop: ;цикл сдвига двойного слова вправо так, ; чтобы нужный бит оказался на месте 0 бита mov c, 20h.0 ;младший бит младшего байта mov a, 21h ;ст байт rrc a ;сдвиг вправо, acc.7 = мл биту мл слова, ; С = мл биту ст байта mov 21h, a ;сохраним mov a, 20h ;мл байт rrc a ;сдвиг вправо, acc.7 = мл биту ст байта (из C) ;мл бит теряем (не нужен) mov 20h, a ;сохраняем djnz r3, RightLoop ;сдвинаем "номер бита" раз
SetBit: ;установка бита 0 в младшем байте mov c, 22h.0 ;новое значение бита mov a, 20h ;изменяемый байт mov acc.0, c ;устанавливаем mov 20h, a ;сохраняем
;вернем слово на место mov a, r2 ;счетчик сдвигов jz SaveData ;если бит 0, то сдвигать не надо LeftLoop: ;цикл сдвига влево mov c, 21h.7 ;ст бит ст байта mov a, 20h ;мл байт r lc a ;сдвиг влево, acc.0 = ст биту ст слова, ; С = ст биту мл байта mov 20h, a ;сохраняем mov a, 21h ;ст байт rlc a ;сдвиг влево, acc.0 = стл биту мл байта (из C) ;ст бит теряем (не нужен) mov 21h, a ;сохраняем djnz r2, LeftLoop ;сдвинаем "номер бита" раз
SaveData: ;сохраним во внешней памяти mov dptr, #00h mov a, 20h movx @dptr, a inc dptr mov a, 21h movx @dptr, a
Wait: ;бесконечный цикл jmp Wait
End
----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 26.04.2011, 13:05 Номер ответа: 266842 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 266842 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий