我有下一个代码:
Var1: dw 0xFE
Var2: db 0xAB
Var3: db 0xBC
我想为每个变量添加一个。
据我了解,内存看起来像这样:FE00ABBC
为此,下一个命令应该起作用:
mov eax, 0x010000101
add dword [Var1], eax
但是这个有效:
mov eax, 0x01010001
add dword [Var1], eax
为什么呢?感谢。
答案 0 :(得分:1)
您的问题在于您没有考虑架构的endianness。
答案 1 :(得分:0)
看起来你的记忆图是错误的。我会这样解释:
BCAB00FE
^ ^
| |
MSB LSB
这可以准确地解释你所看到的行为。
答案 2 :(得分:0)
您的achitecure是低端,最低有效位是最低内存地址。这与通常的西方写作方向相反。
内存看起来与你描述的完全一样,但是当它被加载时,看起来会被颠倒过来:
`FE 00 AB BC`
low high address
mov eax, 0x1010001
01 00 01 01
low high byte in eax
因此,如果你从左边开始编写,那么eax的内容现在是01010001
。
问题出现是因为在汇编程序源中编写数字常量的顺序与字节实际存储在内存中的顺序不同。