我是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位寄存器将创造一个巨大的溢出,但是,这只是一个问题,我还没有工作了。
我想我已经走过了轨道,但基本上我的问题是上述代码正确的方式来追加一个大端的整数?或者我倒退了,还是我完全不在,等等。不知道这是否合理,太累了。
首先需要指定哪个处理器。在许多处理器上,您不必做任何特殊的事情。 – AShelly
你有没有用你知道的语言实现它,C或类似的东西?从那里开始,写下简单的步骤,然后将其转换为asm。 –
这也是我看过的一个非常基本的东西。我明天就会开始,因为我知道我可以很轻松地在C中做到这一点。谢谢你的提示。 – ozdrgnaDiies