在 GNU 汇编中引用具有偏移量的内存位置

Refer to memory location with an offset in GNU Assembly

对于这个新手问题提前表示抱歉,但奇怪的是我找不到这个问题的正确答案。简单地说,假设我想从某个变量移动到 %ecx 寄存器。这个变量是一个充满输入的缓冲区。如何在特定偏移处引用缓冲区,即缓冲区 + 1 或缓冲区 + n?我需要它来进行基本的字符串迭代。

感谢所有帮助,即使它只是帮助我找到以前的 post 回答它但我找不到。

在 AT&T 语法中(由 GAS 使用),以下用于间接偏移引用:

 movl     8(%ebp), %eax   ; Move from EBP+8 into EAX

在 Intel 语法中(GAS 实际上也理解和接受)它将是:

 MOV      EAX, [EBP+8]

另一种选择(您似乎对此感兴趣)是 Base Plus Index 寻址:

 MOV      EAX, [EBX + EDI]

这将移动到 EAX(使用 Intel 格式)内存位置的内容,即 EBX 和 EDI 的总和。在 AT&T 格式中,这将是:

 movl     (%ebx,%edi), %eax

老实说,我很少使用这种形式。您可能必须包括比例因子。您可以使用一个来满足您的需求:

 movl     (%ebx,%edi,1),%eax   ; Where 1 is a scaling factor (ebx+edi*scale)