Консультация # 189200: Здравствуйте! Прошу помощи в следующем вопросе: Дано число в двоичном виде. Поменять местами пятый бит с седьмым . Результат разделить на 8 и проинвертировать. Прошу помощи т.к ни черта ни черта не смыслю в ассемблере....
Здравствуйте! Прошу помощи в следующем вопросе: Дано число в двоичном виде. Поменять местами пятый бит с седьмым . Результат разделить на 8 и проинвертировать. Прошу помощи т.к ни черта ни черта не смыслю в ассемблере.
.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
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 15.04.2016, 19:05
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!