我一直在使用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修好了。为什么我不能在内存中添加两个指令,并获得与添加注册和内存中的MOV相同的结果?
发布于 2012-10-13 02:21:42
包含两个ADD指令的第一个示例取决于h的先前内容。第二个示例独立于h之前的内容。如果h的值不能保证为零,那么这两个示例的行为将有所不同。
https://stackoverflow.com/questions/12866168
复制相似问题