1

我正在为 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我应该怎么做?我一直在阅读这本 wikibook,但我不太了解语法。

我尝试了以下方法,但似乎不起作用:

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

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

我错过了什么?

4

1 回答 1

1

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

movl $1, %ebx
movl $5, -12(%ebp, %ebx, 4)
于 2013-06-04T22:13:57.360 回答