我一直在使用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注册到存储器?
答案 0 :(得分:1)
包含两条ADD
指令的第一个示例取决于h
的先前内容。第二个示例独立于h
的先前内容。如果h
的值不能保证为零,则这两个示例的行为会有所不同。