Assembly NASM汇编编程-递增地址

Assembly NASM汇编编程-递增地址,assembly,nasm,increment,memory-address,Assembly,Nasm,Increment,Memory Address,我正在重新学习汇编编程的基础知识。我正在慢慢地工作 我正在使用NASM在64位Slackware机器(x86-x64)上工作 我对增加地址意味着什么有点困惑。在我的bss部分中,我有一个缓冲区resb4096缓冲区。在文本第一节中,将地址分配给esi: mov esi, Buffer 稍后,我inc esi。这似乎将esi提前到下一个字节偏移量。我有点惊讶-我希望esi能提前4个字节,因为它是一个32位寄存器 我是否可以假设地址递增总是一次移动一个字节?我会使用添加esi,4来提升32位吗 当

我正在重新学习汇编编程的基础知识。我正在慢慢地工作

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

我对增加地址意味着什么有点困惑。在我的
bss
部分中,我有一个
缓冲区resb4096
缓冲区。在
文本
第一节中,将地址分配给
esi

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

我是否可以假设地址递增总是一次移动一个字节?我会使用
添加esi,4
来提升32位吗


当我要填充32位寄存器时,是否必须显式要求4个字节?类似于
moveax,DWORD[esi]

%esi是一个寄存器。它可以包含一个地址,你的银行账户余额或其他任何东西。cpu不可能知道它包含什么类型的值
inc
只是一条算术指令,它将存储在寄存器中的值增加1

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


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

,这实际上使我所做的工作更加容易。我担心一次只能处理4个字节。