Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1458 | Дата выхода: | 03.06.2011, 18:33 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 215 / 63 | Вопросов / ответов: | 1 / 1 | Вопрос № 183398: Здравствуйте, уважаемые эксперты! Прошу Вас помочь в написании этой программы: Дана двухбайтовая двоичная строка. Сформировать новую строку, в которой каждый бит строки заменен суммой по модулю 2 данного бита и двух его соседей справа. Cпасибо. Вопрос № 183398: Здравствуйте, уважаемые эксперты! Прошу Вас помочь в написании этой программы: Дана двухбайтовая двоичная строка. Сформировать новую строку, в которой каждый бит строки заменен суммой по модулю 2 данного бита и двух его соседей справа. Cпасибо. Отправлен: 29.05.2011, 18:14 Вопрос задал: Илья Андреевич (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Илья Андреевич! Вот Вам программа, решающая Вашу задачу
Код : ;Дана двухбайтовая двоичная строка. Сформировать новую строку, ;в которой каждый бит строки заменен суммой по модулю 2 ;данного бита и двух его соседей справа .model small .stack 100h .data bstring dw 1011001111100010b ;наша строка ;подпрограммы отработки для каждого бита bitProgram dw bit_0_Pr, bit_1_Pr, bit_15_2_Pr, bit_15_2_Pr dw bit_15_2_Pr, bit_15_2_Pr, bit_15_2_Pr, bit_15_2_Pr dw bit_15_2_Pr, bit_15_2_Pr, bit_15_2_Pr, bit_15_2_Pr dw bit_15_2_Pr, bit_15_2_Pr, bit_15_2_Pr, bit_15_2_Pr sSrc db 'Source string: $' sXored db 0dh,0ah,'Xored string: $' sAny db 0dh,0ah,'Press any key$' .code main proc mov ax, @DATA mov ds, ax ;настроим сегмент данных mov di, bstring ;входная двоичная строка xor cx, cx ;номер бита xor bx, bx ;выходная двоичная строка BitsLoop: mov si, cx ;сформируем смещение п/п для бита shl si, 1 ;по 2 байта call bitProgram[si] ;отработаем, в результате, в ax новый бит or bx, ax ;формируем выходную строку побитно inc cx ;по всем битам cmp cx, 16 ;0-15 jb BitsLoop lea dx, sSrc ;выведем исходную строку mov ah, 9 int 21h mov ax, bstring ;строка-слово call PrintBin ;выведем в виде строки бит lea dx, sXored ;результат mov ah, 9 int 21h mov ax, bx ;выходная строка call PrintBin lea dx, sAny ;press any key mov ah, 9 int 21h mov ah, 0 ;ждем any key int 16h mov ax,4c00h ;выход в ДОС int 21h main endp ;п/п возвращает в ax новое значение бита, номер которого в cx, в di - исходная строка bit_15_2_Pr proc ;подпрограмма xor-а бита 2-15 с двумя соседями справа dec cx ;возьмем "соседа соседа" dec cx ;cx - его номер mov ax, di ;исходная строка shr ax, cl ;бит 0 - значение бита "соседа соседа" inc cx ;номер бита "соседа" mov si, di ;исходная строка shr si, cl ;бит 0 - значение бита "соседа" xor ax, si ;ax.0 = xor битов соседей справа bit_current: inc cx ;текущий бит mov si, di shr si, cl ;бит 0 - значение текущего бита xor ax, si ;ax.0 = xor всех битов and ax, 1 ;оставим только один 0 бит shl ax, cl ;и задвинем его на свое место ret bit_15_2_Pr endp ;п/п возвращает в ax новое значение бита, номер которого в cx, в di - исходная строка bit_1_Pr proc ;подпрограмма xor-а бита 1 с соседом справа dec cx ;номер бита "соседа" mov ax, di ;исходная строка shr ax, cl ;бит 0 - значение бита "соседа" jmp bit_current ;обработаем текущий бит bit_1_Pr endp ;п/п возвращает в ax значение 0 бита (он не меняется, у него нет соседей) bit_0_Pr proc mov ax, di and ax, 1 ret bit_0_Pr endp ;п/п вывода слова ax в виде последовательности бит PrintBin proc mov cx, 16 ;число бит mov si, ax ;сохраним в si mov ah, 2 ;ф-я вывода символа на экран PrintBitLoop: rcl si, 1 ;сдвинем старший бит в С mov dl, '0' ;символ '0' adc dl, 0 ;добавим к '0' бит С, получим '0' или '1' int 21h ;выведем loop PrintBitLoop mov dl, 'b' ;в конце добавим 'b' int 21h ret PrintBin endp end main
Вывод программы:
Код : Source string: 1011001111100010b Xored string: 0001101110101110b Press any key ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 31.05.2011, 12:45 Номер ответа: 267484 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267484 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий