AT& T GAS组件中的阵列寻址

时间:2013-06-04 20:25:23

标签: arrays assembly gas att

我正在为C的子集构建编译器,现在我正在处理数组。假设我有以下内容:

int main() {
    int x[3];
    x[0] = 1;
    x[1] = 3;
    x[2] = 4;
}

在装配中,符号就是这样:

movl    $1, -12(%ebp)
movl    $3, -8(%ebp)
movl    $4, -4(%ebp)

到目前为止,这么好。现在,如果我想访问存储在%ebx中的任意位置,我该怎么做?我一直在阅读this wikibook,但我不太懂语法。

我已经尝试了以下但它似乎不起作用:

# Suppose I want to do x[1] = 5
movl $1, %ebx

movl $5, -4(%ebp, %ebx, 4)

我错过了什么?

1 个答案:

答案 0 :(得分:1)

问题是数组的 base 不是-4(%ebp)而是-12(%ebp)(因为这是放置第一个项目的位置)所以索引应该是这样的:

movl $1, %ebx
movl $5, -12(%ebp, %ebx, 4)