Я новичок в сборке, но не новичок в программировании и в том, как оно работает в целом. Поскольку я уже знаю довольно много языков, я решил заставить свою первую программу ASM вычислять хэш SHA-1 входных файлов. У меня уже есть много отдельных частей, но у меня есть две проблемы; один я попрошу здесь помочь.
По сути, я запутался в понятиях порядковых чисел Big и Little и того, как их представлять в ASM. Цитировать из псевдокода SHA-1:
append length of message (before pre-processing), in bits,
as 64-bit big-endian integer
Единственное, что приходит на ум, это, например, представить число 1 как:
[63 0's]1
Или
1[63 0's]
Или
[31 0's] 1 [32 0's]
По сути, моя мысль до сих пор такова:
mov eax, message ;Move message to be hashed into eax
shl eax, 64 ;Shift message over enough bits to store 64-bits
or eax, msglen ;Adds message length to the very end of message
Скорее всего, это неправильно, так как все это использует 32-битные регистры, поэтому смещение влево на 64-битное соединение приведет к огромному переполнению, но это еще одна проблема, которую мне еще предстоит решить.
Я думаю, что я сошел с пути, но в основном мой вопрос заключается в том, является ли приведенный выше код правильным способом добавления целого числа с прямым порядком байтов? Или у меня это задом наперед, или я просто полностью отключен во всем и т. Д. Не уверен, что это имеет смысл, слишком устал.