2013-06-04 6 views
0

Я строю компилятор для подмножества C, и теперь я имею дело с массивами. Предположим, у меня есть следующие:Адресация массива в сборке AT & T GAS

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

При сборке asignments будет выглядеть так:

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

Проблема заключается в том, что база массива не -4(%ebp) но -12(%ebp) (как это где первый элемент помещается), поэтому индексация должна быть такой:

movl $1, %ebx 
movl $5, -12(%ebp, %ebx, 4) 
Смежные вопросы