如何在ASM中附加64位Big-Endian int?

时间:2011-11-17 03:32:31

标签: assembly append bit-manipulation endianness

我是大会新手,但不是编程新手以及它如何运作。因为我已经知道了很多语言,所以我决定让我的第一个ASM程序计算输入文件的SHA-1哈希值。我已经完成了许多单独的部分,但有两个部分我遇到了麻烦;我会在这里寻求帮助。

基本上,我对Big和Little端数字的概念以及如何在ASM中表示它们感到困惑。引用SHA-1 Psuedocode:

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

这很可能是错误的,因为这都使用了32位寄存器,因此向左移位64位会产生巨大的溢出,但这只是我还没有解决的另一个问题。

我认为我已经偏离了轨道,但基本上我的问题是上面的代码是一个附加大端整数的正确方法吗?或者我是倒退了,还是我完全关闭了一切,等等。不确定这是否有意义,太累了。

1 个答案:

答案 0 :(得分:1)

作为big-endian 64位整数的数字1的二进制表示是

<- Start of message                                   End of message ->

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001

^ big (most significant) end