Отладка реализации SHA-256

Я работал над реализацией SHA-256 с использованием MASM32 и сделал исходный код. Однако я не могу заставить его работать правильно и просмотрел его, переписал его фрагменты и скопировал некоторый исходный код во встроенный ASM Delphi, и он отлично работает, но у моего исходного исходного кода ASM есть проблемы. Учитывая, что у меня нет невероятного опыта в этом, возможно ли, чтобы кто-нибудь посмотрел на источник и сказал мне, увидит ли он что-то, что я упустил? Я уже сделал реализацию Delphi, и она отлично работает, поэтому я знаю, что виноват не сам алгоритм, а сам код ASM.

Я планировал оптимизировать задачи после того, как просто заработал. Но имейте в виду, что я все еще учусь (самоучка), поэтому, если вы увидите что-то глупое, что я делаю в этом источнике, я тоже хотел бы иметь возможность учиться. Но моя главная забота - заставить его работать, так как я не вижу, где находятся ошибки.

(Удален код ASM для проблем с пространством, так как теперь я знаю проблему)

Редактировать: я понял, в чем проблема. Что приводит к следующему логическому вопросу, поскольку я не знаю: почему этот код вызвал проблему?

Изменение следующего в конце макроса SHA256Loop:

ADD  h, ECX  
ADD  h, EBX  ; h := t1 + t2;

К этому:

ADD  ECX, EBX  ; h := t1 + t2;
MOV  h, ECX

Починил это. Почему я не мог выполнить две инструкции ADD для памяти и получить тот же результат, что и ADD для регистрации, а затем MOV для памяти?


person Glenn1234    schedule 12.10.2012    source источник


Ответы (1)


Ваш первый пример с двумя инструкциями ADD зависит от предыдущего содержимого h. Второй пример не зависит от предыдущего содержимого h. Если значение h не обязательно равно нулю, то эти два примера будут вести себя по-разному.

person Greg Hewgill    schedule 13.10.2012
comment
Имеет смысл теперь, когда я смотрю на код с учетом этого. Спасибо! Я знал, что это, вероятно, что-то простое, что я упустил из виду! - person Glenn1234; 13.10.2012