【发布时间】:2016-10-11 00:39:50
【问题描述】:
我正在自学汇编语言的某些部分,现在,我专注于将数据声明存储在地址中。
当谈到存储十六进制时,我知道如果我正在处理字节,例如;
1234
我可以这样存储它们:
Address 0000 - 12
Address 0001 - 24
因为双字是 32 位,我假设每个会占用两倍的空间。
如果我以 dword 结尾:
54 00 87 D1 49 5A AF 56 32
它们会这样存储吗:
Address 0000 - 54
Address 0002 - 00
Address 0004 - 87
Address 0006 - D1
Address 0008 - 49
Address 000A - 5A
Address 000C - AF
Address 000F - 56
Address 0011 - 32
?
【问题讨论】:
-
为什么DWORD例子有9个字节?无论如何,你的问题是什么,endianness?
-
@MargaretBloom 我打算尝试用 0 填充其余部分(除非那不正确)。是的,如果我使用 little-endian,即使它是 32 位,程序是否相同? This site 暗示确实如此,而且似乎在说无论我在处理什么,步骤都是一样的。我想我正在寻找验证。
-
使用 little-endian 存储多字节值(word、dword 等)时,经验法则是“低地址的低字节”,其中“低字节”表示最低有效字节。我对您的问题感到困惑,因为在第一个示例中,WORD 1234h 存储在 BE 中,第二个示例存储字节,它们没有字节序。
-
@MargaretBloom 嗯,它确实是 DWORD 540087D1495AAF5632h。不确定这是否会改变任何事情。
-
但是
540087D1495AAF5632h不是 DWORD,DWORD 是 4 个字节。在十六进制格式中,您可以轻松地以字节为单位计算值的长度,每对数字都是一个字节,因此您的值以字节为单位54_00_87_D1_49_5A_AF_56_32= 9 个字节。 (即 2x DWORD + 1 BYTE)。
标签: assembly hex endianness dword