mov eax,4
push dword 0x44434241
mov ebx,1
mov ecx,esp
mov edx,4
int 0x80
add esp,4
我不明白为什么打印ABCD而不是DCBA。 41是最低地址,44是最高地址,为什么? 例如,当我写
x: dd 0x12345678
78位于最低地址但这里的数字仍然不是78563412而是12345678.
答案 0 :(得分:2)
0x12345678
是一个32位值,它表示在一个小端系统上,0x78
位于最低地址(让我们称之为地址addr
),{ {1}}最高:
0x12
并且32位值 addr addr+1 addr+2 addr+3 single 32-bit number
+----+ +----+ +----+ +----+ +--------------+
| 78 | | 56 | | 34 | | 12 | represents | 12345678 |
+----+ +----+ +----+ +----+ +--------------+
与0x44434241
一起保存在最低地址,0x41
保存在最低地址:
0x44
但是你的第一个例子中的代码是 not 使用内存作为32位数字:它使用 addr addr+1 addr+2 addr+3 single 32-bit number
+----+ +----+ +----+ +----+ +--------------+
| 41 | | 42 | | 43 | | 44 | represents | 44434241 |
+----+ +----+ +----+ +----+ +--------------+
系统调用来写一个字节序列< / em>到write
。这个字节序列按它们存储在内存中的顺序写入:
stdout
答案 1 :(得分:1)
我相信这是正在发生的事情 - &gt; &#34;最常见的情况是指在单个16位,32位或64位字中如何排序字节,然后字节顺序与字节顺序相同。通常的对比是,最重要或最不重要的字节是先排序的,即在较大的数据项内的最低字节地址。&#34;