C 汇编代码数组还是常规代码行?

C 汇编代码数组还是常规代码行?,c,assembly,att,C,Assembly,Att,我有一个相当简单的汇编代码,但这让我自己在猜测 fn: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax sall $2, %eax addl 8(%ebp), %eax movl (%eax), %eax popl %ebp ret 作为函数,我得到的是 int main(int x, int y) { x = 4*y + x;

我有一个相当简单的汇编代码,但这让我自己在猜测

fn:
    pushl   %ebp
    movl    %esp, %ebp
    movl    12(%ebp), %eax
    sall    $2, %eax
    addl    8(%ebp), %eax
    movl    (%eax), %eax
    popl    %ebp
    ret
作为函数,我得到的是

int main(int x, int y)
{
    x = 4*y + x;
    return x;
}
但我认为这看起来类似于数组索引(看到了类似的帖子,但仍然不确定)。
我不完全确定这段代码是否正确

您忽略了
movl(%eax),%eax
行。返回值不是4*y+x的结果,而是该位置的DWORD。顺便说一下,在C中使用带整数访问的索引数组时,4乘法器是隐式的。你能给我一点关于
movl(%eax),%eax
段在代码行中做什么的指导吗?啊,再仔细想想,我明白了。。。我想!这只是一个非常简单的数组!它将最初存储在EAX中的地址处的值加载到EAX(最终是返回值)。EAX的初始值丢失。换句话说,函数应该是
x[y]