2011-11-17 48 views
2

我是Assembly的新手,但对编程并不陌生,一般来说它的工作原理。因为我已经知道了很多种语言,所以我决定让我的第一个ASM程序计算输入文件的SHA-1哈希值。我已经制定了很多单独的部分,但有两个部分我遇到了麻烦;我会在这里寻求帮助。如何在ASM中追加64位Big-Endian int?

基本上,我对大小数字的概念以及如何在ASM中表示它们感到困惑。从SHA-1伪码报:

append length of message (before pre-processing), in bits, 
as 64-bit big-endian integer 

浮现在脑海中的唯一一件事就是,例如占1号为:

[63 0's]1 

或者

1[63 0's] 

或者

[31 0's] 1 [32 0's] 

基本上我的思想到目前为止我的基本属于:

mov eax, message ;Move message to be hashed into eax 
shl eax, 64  ;Shift message over enough bits to store 64-bits 
or  eax, msglen ;Adds message length to the very end of message 

这很可能是错误的,因为这一切使用,因此左移64位的32位寄存器将创造一个巨大的溢出,但是,这只是一个问题,我还没有工作了。

我想我已经走过了轨道,但基本上我的问题是上述代码正确的方式来追加一个大端的整数?或者我倒退了,还是我完全不在,等等。不知道这是否合理,太累了。

+0

首先需要指定哪个处理器。在许多处理器上,您不必做任何特殊的事情。 – AShelly

+2

你有没有用你知道的语言实现它,C或类似的东西?从那里开始,写下简单的步骤,然后将其转换为asm。 –

+0

这也是我看过的一个非常基本的东西。我明天就会开始,因为我知道我可以很轻松地在C中做到这一点。谢谢你的提示。 – ozdrgnaDiies

回答

1

作为大端64位整数的数目1的二进制表示是

<- Start of message         End of message -> 

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 

^ big (most significant) end 
+0

这似乎正是我所期待的。看起来很容易,但没有明确地告诉过它。谢谢。 – ozdrgnaDiies