РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1601 | Дата выхода: | 21.04.2016, 16:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 18 / 7 | Вопросов / ответов: | 1 / 2 | Консультация # 189200: Здравствуйте! Прошу помощи в следующем вопросе: Дано число в двоичном виде. Поменять местами пятый бит с седьмым . Результат разделить на 8 и проинвертировать. Прошу помощи т.к ни черта ни черта не смыслю в ассемблере.... Консультация # 189200: Здравствуйте! Прошу помощи в следующем вопросе: Дано число в двоичном виде. Поменять местами пятый бит с седьмым . Результат разделить на 8 и проинвертировать. Прошу помощи т.к ни черта ни черта не смыслю в ассемблере. Дата отправки: 15.04.2016, 18:30 Вопрос задал: romanevdokimov1 (Посетитель) Всего ответов: 2 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, romanevdokimov1! Держите программку
.186 ;чтобы можно было использовать сдвиги ; на больше, чем один бит code segment assume cs:code main: mov bl, 10001001b ;исходный байт call print_bits ;выведем на экран call change_bits ;меняем местами 5 и 7 биты (считаем с 0!) call print_bits ;выведем на экран, что получилось shr bl, 3 ;разделим на 8 сдвигом вправо на 3 бита call print_bits ;выведем на экран, что получилось not bl ;инвертируем биты call print_bits ;выведем на экран, что получилось mov ah, 0 ;ждем нажатие на клавишу int 16h mov ax,4c00h ;выход int 21h print_bits proc ;вывод побитно байта bl push bx ;сохраним в стеке mov cx, 8 ;8 бит mov ah, 2 ;ф-я вывода на экран print_bits_loop: shl bl, 1 ;старший бит уходит в С mov dl, '0' ;или '0' или '1' adc dl, 0 ;добавим бит С int 21h ;выводим loop print_bits_loop ;по всем битам mov dl, 0dh ;перевод строки int 21h mov dl, 0ah int 21h pop bx ret print_bits endp change_bits proc ;обмен 5 и 7 битами в байте bl mov al, bl shr al, 2 ;бит 7 сдвигаем на место 5 бита and al, 00100000b ;выделяем по маске 5 бит mov ah, bl shl ah, 2 ;бит 5 сдвигаем на место 7 бита and ah, 10000000b ;выделяем по маске 7 бит and bl, 01011111b ;обнуляем старые 5 и 7 биты or bl, al ;добавляем старый 7 на месте 5 бита or bl, ah ;добавляем старый 5 на месте 7 бита ret change_bits endp code ends end main Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, romanevdokimov1!
Самая сложная часть, обмен битов сделана только операциями сдвигов.
model tiny code org 100h start: mov bx,10000000b; call @@00 rol bx,1 call @@00 rol bl,1 call @@00 rol bl,1 call @@00 ror bx,1 call @@00 ror bl,1 call @@00 rol bh,1 call @@00 ror bx,1 call @@00 sub bx,8 call @@00 xor bx,0FFh ;вывод слова @@00: mov di,bx mov al,10 int 29h mov al,13 int 29h call @@01 @@01: mov al,' ' int 29h mov cx,8 @@02: xor al,al shl di,1 adc al,'0' int 29h loop @@02 ret end start Меняя значение того или иного бита, можно посмотреть как он движется в слове. Удачи!
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий