Я новичок в программировании сборки рукоятки.Я пытаюсь написать функцию в сборке arm cortex m4, которая выполняет алгоритм MD5 Hash.Я следую алгоритму страницы вики, найденному здесь https://en.wikipedia.org/wiki/MD5.
В википейдже объявляются константы A, B, C, D и массивы S и K. Все значения показаны в младшем порядке.
About little endian:
Я провел некоторое исследование, и кажется, что в памяти вся строка отображается в порядке , как если бы вся строка была в старшем порядке.Это потому, что каждый символ является байтом.Значения в вики объявляются с прямым порядком байтов, поэтому после того, как я их объявляю, они отображаются в памяти как с прямым порядком байтов (нормальный порядок).
Я сделал предварительную обработку для хэша MD5.Позвольте мне показать вам, как это выглядит в памяти для строки «Быстрая коричневая лиса перепрыгивает через ленивую собаку»:
54686520 51756963 6B204272 6F776E20 466F7820 4A756D70 73204F76 65722054
6865204C 617A7920 446F672E 80000000 00000000 00000000 00000000 00006001
Итак, 54 = T, 68, = h, ... и т.д ...
Теперь вот где моя путаница.
После сообщения добавляется один бит.Это байт 0x80.После этого оставшиеся 512 бит заполняются нулями до последних 64 бит, то есть туда, где идет длина сообщения.Таким образом, как показано, сообщение имеет длину 0x160 бит.Но длина в памяти имеет младший порядок следования, поэтому она отображается как 6001.
Таким образом, длина в памяти имеет младший порядок следования.
Но константы A, B, C, Dи массив K объявлен первоначально в порядке байтов в соответствии с вики.
Поэтому, когда я просматриваю их в памяти, они отображаются как обычно.
Так что теперь яя в замешательстве!моя длина в памяти имеет прямой порядок байтов, а константы и массив K находятся в памяти с прямым порядком байтов.
Каким будет правильный способ просмотра примера в памяти?