0

私は MASM32 を使用して SHA-256 の実装に取り​​組んでおり、いくつかのソースを完成させました。ただし、正しく動作させることができず、それを見て、その一部を書き直し、一部のソースをインライン Delphi ASM にコピーして完全に実行しましたが、元の ASM ソースには問題があります。私はそれについて信じられないほど経験していないことを考えると、誰かがソースを見て、私が欠けているものを見つけたら教えてくれるでしょうか? 私はすでに Delphi の実装を行っており、完全に機能しているため、アルゴリズム自体に問題があるのではなく、ASM コード自体に問題があることがわかります。

単純に機能させた後、タスクを最適化することを計画していました。しかし、私はまだ学習中 (独学) であることを心に留めておいてください。したがって、この情報源で私がやっていることが愚かな側面にあることがわかった場合は、私も学習できるようになりたいと思います. しかし、エラーがどこにあるのかわからないので、私の主な関心事はそれを機能させることです。

(私は今問題を知っているので、スペースの問題のために ASM コードを削除しました)

編集:問題が何であるかを理解しました。わからないので、次の論理的な質問につながるのは、なぜこのコードが問題を引き起こしたのですか?

SHA256Loop マクロの最後で以下を変更します。

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

これに:

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

修正しました。メモリに対して 2 つの ADD 命令を実行しても、ADD を登録してから MOV をメモリに実行したのと同じ結果が得られないのはなぜですか?

4

1 に答える 1

1

2 つの命令を含む最初の例はADD、前の の内容に依存しhます。2 番目の例は、 の前の内容とは無関係ですh。の値hがゼロであることが保証されていない場合、これら 2 つの例の動作は異なります。

于 2012-10-13T02:21:42.890 に答える