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

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


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

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

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

Boriss
Статус: Академик
Рейтинг: 2636
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2312
∙ повысить рейтинг »
Жерар
Статус: Специалист
Рейтинг: 1653
∙ повысить рейтинг »

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

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


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

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

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

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

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

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

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



    В избранное