我正在为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)
我错过了什么?
答案 0 :(得分:1)
问题是数组的 base 不是-4(%ebp)
而是-12(%ebp)
(因为这是放置第一个项目的位置)所以索引应该是这样的:
movl $1, %ebx
movl $5, -12(%ebp, %ebx, 4)