Разбить на части - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. В р-тате подсчёта MD5 хеша строки имею 7193518E6F5F0076EF05680742323F9C (3731393335313845364635463030373645463035363830373432333233463943 hex). Далее требуется разбить это на 16 двухбайтных кусочков и с каждым провести логическую операцию И (AND) c 8000001F. Подскажите,как это реализовать.Своего багажа знаний недостаточно).

Решение задачи: «Разбить на части»

textual
Листинг программы
use16
org 100h
 
    mov si,md5
    mov di,arr
    mov cx,16
    cld
    @@:
        lodsw
        and ax,8000001Fh
        stosw
        loop @b
    ret
    
md5 db '7193518E6F5F0076EF05680742323F9C'
arr dw 16 dup(0)

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

  1. Используется 16-битный режим адресации.
  2. Начальный адрес равен 100h.
  3. Переменная si содержит адрес строки, которую необходимо разбить.
  4. Переменная di содержит начальный адрес массива, в который необходимо разбить строку.
  5. Переменная cx содержит количество байтов в строке.
  6. Флаг направления (df) установлен в 1.
  7. Цикл @@ повторяется 16 раз.
  8. В каждой итерации цикла значение байтов из строки загружается в ax.
  9. Флаг направления (df) сбрасывается в 0, что приводит к использованию обратного хода переходов.
  10. Исполняется команда stosw, которая записывает значение ax в массив, начиная с адреса di.
  11. Команда loop используется для проверки условия выхода из цикла.
  12. После завершения цикла программа возвращает управление.
  13. Строка md5 содержит 16-байтовое значение '7193518E6F5F0076EF05680742323F9C'.
  14. Массив arr содержит 16 нулевых значений, которые будут заменены значениями из строки md5.

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


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

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

7   голосов , оценка 3.571 из 5