我目前正在編寫一個簡單的C編譯器,它將一個.c文件作爲輸入並生成彙編代碼(X86,AT & T語法)。我很難傳遞數組類型參數併爲其生成正確的彙編代碼。這裏是我的輸入:X86 assembly - 處理數組類型參數
int getIndexOne(int tab[]){
return tab[1];
}
int main_test(void){
int t[3];
t[0] = 0;
t[1] = 1;
t[2] = 2;
return getIndexOne(t);
}
一個相當簡單的測試。這是我的輸出:
getIndexOne:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 16
movl %esp, %ebp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
movl %edi, -24(%ebp)
movl $1, %eax
movl -24(%ebp, %eax, 8), %eax #trouble over here
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size getIndexOne, .-getIndexOne
falsemain:
.LFB1:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 16
movl %esp, %ebp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
pushl %ebx
subl $120, %esp
movl $2, -32(%ebp)
movl $0, %eax
movl $0, -24(%ebp, %eax, 8)
movl $1, %eax
movl $1, -24(%ebp, %eax, 8)
movl $2, %eax
movl $2, -24(%ebp, %eax, 8)
leal -24(%ebp, %eax, 8), %eax
movl %eax, %edi
call getIndexOne
addl $120, %esp
popl %ebx
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1:
.size main_test, .-main_test
我無法訪問傳遞的地址(leal指令)的內容。任何幫助將非常感激。 PS:不要擔心我的整數大小,由於其他原因,它們被設置爲8而不是4字節。
我試過兩種不同的方法: 1)在leal指令之前加載EAX中的EAX。 2)將leal指令替換爲:leal -24(%ebp)。 在這兩種情況下,我得到一個錯誤的結果。 在這種情況下你會提出什麼其他方法? –
對不起,我錯過了一個問題...我已經更新了我的答案。 – Jason
這似乎解決了這個問題。我會做一些進一步的測試,然後我會回到你身邊。謝謝。 –