2013-06-02 31 views
1

我正在重新学习装配编程的基础知识。我正在慢慢努力通过Assembly Language Step-by-Step: Programming with LinuxNASM装配编程 - 递增地址

我正在使用NASM在64位Slackware机器(x86-x64)上工作。

我对增加地址的含义有点困惑。在我的bss部分,我有一个Buffer resb 4096缓冲区。在text部分,我的地址分配给esi

mov esi, Buffer 

后来,我inc esi。这似乎将esi提前到下一个字节偏移量。我有点惊讶 - 我期待esi提前4个字节,因为它是一个32位寄存器。

我可以假设增加一个地址将一直移动一个字节吗?我会用add esi, 4来推进32位吗?

当我想填写一个32位寄存器时,是否必须明确要求4个字节?像mov eax, DWORD [esi]

回答

3

%esi是一个注册表。它可以包含一个地址,您的银行账户余额或其他任何东西。 CPU不知道它包含什么样的价值。 inc是一个简单的算术指令,通过1

所以是的,如果你想通过32位来增加它,你已经增加存储在寄存器中的值加4

这是不同的,当你做加载和存储,你会选择的寄存器(比如%al或%eax)将指示加载/存储的大小。如果有任何不明确的地方,或者如果你想改变加载/存储的大小,你需要使用大小限定符(字/双字等)

+0

这实际上使我做得更容易。我担心我必须一次处理4个字节。 –