Вопрос № 149309: Здратсвуйте уважаемые эксперты, я тока начал изучать ассемблер.И вот столкнулся с такой проблемкой. Значит,мне нужно, написать программу которая переворачивает биты в числе. Прошу пожалуста помочь....
Вопрос № 149.309
Здратсвуйте уважаемые эксперты, я тока начал изучать ассемблер.И вот столкнулся с такой проблемкой. Значит,мне нужно, написать программу которая переворачивает биты в числе. Прошу пожалуста помочь.
Отвечает: Овчинников Алексей
Здравствуйте, Иван Горбинко! Вопрос в том что вы подразумеваете под фразой; "переворачивает биты в числе". От этого зависит какое будет приложение. Если это инвертирование, то есть замена установленных битов (1) на неустановленные(0), и соответственно (0) на (1). То программа будет простейшей, необходимо применить всего один оператор; "not" инвертирует биты в заданном операнде к форме обратного кода операнда. Не оказывает влияния на флаги. То есть если вам необходимо инвертировать например
байт находящийся в регистре AH, то опуская такие функции как ввод и вывод необходимого числа программа будет выглядеть так; "not AH", после выполнения этого оператора в регистре AH будет находится байт обратный заданному. Если-же вы под переворачиванием подразумеваете замену местами 0на7; 1на6; 2на5; 3на4 биты( а например в слове или двойном слове еще сложнее), то программа будет выглядеть значительно сложнее. И здесь не обойтись без других логических
опреаций; "and", "or" и "xor" производят стандартные логические операции, а так-же операций сдвига. Ниже представлена часть кода которая выполняет эту операцию с одним байтом расположенном в регистре AH
Приложение:
--------- Пишу на FASM
Ответ отправил: Овчинников Алексей (статус: 4-й класс)
Ответ отправлен: 03.11.2008, 01:11
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 149309 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Сори за не точную постановку задачи, я имел ввиду под словом "переворачивает" типо как зеркальное отражение допусти вводишь ты 128 а оно выводит 1 ,ну и на оборот.
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Иван Горбинко! Решается очень просто: выталкиваем очередной бит источника, например, налево в бит переноса С, затем вталкиваем из С направо в регистр-результат. В зависимости от разрядности имеем три подпрограммки... Удачи...
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 03.11.2008, 10:23
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 149309 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Good job)
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.