1

我再次学习汇编编程的基础知识。我正在逐步学习汇编语言:使用 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]什么?

4

1 回答 1

3

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

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

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

于 2013-06-02T15:33:51.767 回答