我一直在使用 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
修复。为什么我不能对内存执行两条 ADD 指令并获得与 ADD 相同的结果到寄存器然后 MOV 到内存?