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

修复。为什么我不能对内存执行两条 ADD 指令并获得与 ADD 相同的结果到寄存器然后 MOV 到内存?

4

1 回答 1

1

您的第一个带有两条ADD指令的示例取决于h. 第二个例子独立于前面的内容h。如果h不保证 的值为零,则这两个示例的行为将有所不同。

于 2012-10-13T02:21:42.890 回答