Алгоритм - Assembler
Формулировка задачи:
Здравствуйте! Очень нужен ваш совет! Необходимо придумать алгоритм для реализации следующих преобразований. Есть исходный набор битов и необходимо его преобразовать:
00011000 -->00100100-->01000010-->10000001
различными лог. операциями (сдвигами, делениями)
Я так понимаю что байт надо разделить на младшую и старшую часть
0001 1000
0010 0100
0100 0010
1000 0001
и тут двигать логическими сдвигами, а потом опять склеивать в один байт. Помогите реализовать на ассемблере. Или может это как-то в 16-й системе счисления проще реализовать. Подскажите пожалуйста! Заранее всем спасибо за уделённое время.
Решение задачи: «Алгоритм»
textual
Листинг программы
mov al,0011000b mov cx,3 @@01: mov ah,al and ah,0f0h and al,0fh shl ah,1 shr al,1 or al,ah loop @@01
Объяснение кода листинга программы
- mov al,0011000b - Задаём значение переменной al равное 0011000b (1010100011).
- mov cx,3 - Задаём значение переменной cx равное 3.
- mov ah,al - Перемещаем значение переменной al в переменную ah.
- and ah,0f0h - Применяем операцию AND к переменной ah и числу 0f0h (1111000011). Результат равен 0011000011.
- and al,0fh - Применяем операцию AND к переменной al и числу 0fh (1111000011). Результат равен 0011000011.
- shl ah,1 - Сдвигаем значение переменной ah вправо на 1 позицию. Результат равен 0011000111.
- shr al,1 - Сдвигаем значение переменной al вправо на 1 позицию. Результат равен 0011000011.
- or al,ah - Складываем значения переменных al и ah с использованием операции OR. Результат равен 0011000111.
- loop @@01 - Переходим к следующей итерации цикла, пока значение переменной cx не станет равным 0.
- mov ah,al - Перемещаем значение переменной al в переменную ah.
- and ah,0f0h - Применяем операцию AND к переменной ah и числу 0f0h (1111000011). Результат равен 0011000011.
- and al,0fh - Применяем операцию AND к переменной al и числу 0fh (1111000011). Результат равен 0011000011.
- shl ah,1 - Сдвигаем значение переменной ah вправо на 1 позицию. Результат равен 0011000111.
- shr al,1 - Сдвигаем значение переменной al вправо на 1 позицию. Результат равен 0011000011.
- or al,ah - Складываем значения переменных al и ah с использованием операции OR. Результат равен 0011000111.
- loop @@01 - Переходим к следующей итерации цикла, пока значение переменной cx не станет равным 0.
- mov ah,al - Перемещаем значение переменной al в переменную ah.
- and ah,0f0h - Применяем операцию AND к переменной ah и числу 0f0h (1111000011). Результат равен 0011000011.
- and al,0fh - Применяем операцию AND к переменной al и числу 0fh (1111000011). Результат равен 0011000011.
- shl ah,1 - Сдвигаем значение переменной ah вправо на 1 позицию. Результат равен 0011000111.
- shr al,1 - Сдвигаем значение переменной al вправо на 1 позицию. Результат равен 0011000011.
- or al,ah - Складываем значения переменных al и ah с использованием операции OR. Результат равен 0011000111.
- loop @@01 - Переходим к следующей итерации цикла, пока значение переменной cx не станет равным 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д