2013-06-04 43 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)