请参阅GNU Assembly中带偏移量的内存位置

时间:2015-12-08 19:05:55

标签: assembly x86 offset gnu gas

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

所有帮助都表示赞赏,即使它只是帮助我找到以前的帖子来回答它但我找不到。

1 个答案:

答案 0 :(得分:3)

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

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

在英特尔语法中(实际上GAS也理解并接受),它将是:

 MOV      EAX, [EBP+8]

另一种替代方案(您似乎对此感兴趣)是Base Plus Index寻址:

 MOV      EAX, [EBX + EDI]

这将进入EAX(使用英特尔格式)内存位置的内容,即EBX和EDI的总和。在AT& T格式中,这将是:

 movl     (%ebx,%edi), %eax

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

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