汇编 - 使用EAX添加单词

时间:2011-12-15 13:14:03

标签: assembly

我有下一个代码:

Var1: dw 0xFE
Var2: db 0xAB
Var3: db 0xBC

我想为每个变量添加一个。

据我了解,内存看起来像这样:FE00ABBC

为此,下一个命令应该起作用:

mov eax, 0x010000101
add dword [Var1], eax

但是这个有效:

mov eax, 0x01010001
add dword [Var1], eax

为什么呢?感谢。

3 个答案:

答案 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

问题出现是因为在汇编程序源中编写数字常量的顺序与字节实际存储在内存中的顺序不同。