对于新手问题提前抱歉,但奇怪的是我无法找到这个问题的正确答案。简单地说,假设我想从某个变量移动到%ecx寄存器。这个变量是一个充满输入的缓冲区。如何在特定偏移量中引用缓冲区AT,即缓冲区+ 1或缓冲区+ n?我需要它进行基本的字符串迭代。
所有帮助都表示赞赏,即使它只是帮助我找到以前的帖子来回答它但我找不到。
答案 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)