Алгоритм - 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

Объяснение кода листинга программы

  1. mov al,0011000b - Задаём значение переменной al равное 0011000b (1010100011).
  2. mov cx,3 - Задаём значение переменной cx равное 3.
  3. mov ah,al - Перемещаем значение переменной al в переменную ah.
  4. and ah,0f0h - Применяем операцию AND к переменной ah и числу 0f0h (1111000011). Результат равен 0011000011.
  5. and al,0fh - Применяем операцию AND к переменной al и числу 0fh (1111000011). Результат равен 0011000011.
  6. shl ah,1 - Сдвигаем значение переменной ah вправо на 1 позицию. Результат равен 0011000111.
  7. shr al,1 - Сдвигаем значение переменной al вправо на 1 позицию. Результат равен 0011000011.
  8. or  al,ah - Складываем значения переменных al и ah с использованием операции OR. Результат равен 0011000111.
  9. loop    @@01 - Переходим к следующей итерации цикла, пока значение переменной cx не станет равным 0.
  10. mov ah,al - Перемещаем значение переменной al в переменную ah.
  11. and ah,0f0h - Применяем операцию AND к переменной ah и числу 0f0h (1111000011). Результат равен 0011000011.
  12. and al,0fh - Применяем операцию AND к переменной al и числу 0fh (1111000011). Результат равен 0011000011.
  13. shl ah,1 - Сдвигаем значение переменной ah вправо на 1 позицию. Результат равен 0011000111.
  14. shr al,1 - Сдвигаем значение переменной al вправо на 1 позицию. Результат равен 0011000011.
  15. or  al,ah - Складываем значения переменных al и ah с использованием операции OR. Результат равен 0011000111.
  16. loop    @@01 - Переходим к следующей итерации цикла, пока значение переменной cx не станет равным 0.
  17. mov ah,al - Перемещаем значение переменной al в переменную ah.
  18. and ah,0f0h - Применяем операцию AND к переменной ah и числу 0f0h (1111000011). Результат равен 0011000011.
  19. and al,0fh - Применяем операцию AND к переменной al и числу 0fh (1111000011). Результат равен 0011000011.
  20. shl ah,1 - Сдвигаем значение переменной ah вправо на 1 позицию. Результат равен 0011000111.
  21. shr al,1 - Сдвигаем значение переменной al вправо на 1 позицию. Результат равен 0011000011.
  22. or  al,ah - Складываем значения переменных al и ah с использованием операции OR. Результат равен 0011000111.
  23. loop    @@01 - Переходим к следующей итерации цикла, пока значение переменной cx не станет равным 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5