NASM汇编编程 - 增加地址

时间:2013-06-02 15:29:24

标签: assembly nasm increment memory-address

我正在学习汇编编程的基础知识。我正在慢慢地完成Assembly Language Step-by-Step: Programming with Linux

我正在使用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]

这样的东西

1 个答案:

答案 0 :(得分:3)

%esi是一个注册。它可以包含地址,您的银行帐户余额或其他任何内容。 cpu无法知道它包含什么样的值。 inc只是一个算术指令,它将存储在寄存器中的值递增1。

所以是的,如果你想把它增加32位,你必须加4。

当您加载和存储时,它会有所不同,您选择的寄存器(例如%al或%eax)将指示加载/存储的大小。如果有任何歧义或者您想要更改加载/存储的大小,则需要使用大小限定符(word / dword等)