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]
?