2013-08-25 52 views
1

我剛剛開始學習Assembly。我一直在寫簡單的C編碼並將其編譯爲程序集。以下是非常簡單的一個。

C語言的表達

int main(){ 
    int a; 
    a = 25; 
    return a; 
} 

大會

main: 
    pushl %ebp 
    movl %esp, %ebp 
    subl $16, %esp 
    movl $25, -4(%ebp) 
    movl -4(%ebp), %eax 
    leave 
    ret 

我不明白的是,爲什麼16%,從ESP中減去。

+0

我認爲這篇[維基百科文章](http://en.wikipedia.org/wiki/X86_assembly_language#Data_manipulation_instructions)有一篇關於這方面的文章。 – isaach1000

+0

[意思是加上esp,-10在彙編中](http://stackoverflow.com/questions/11627007/meaning-of-add-esp-10-in-assembly) –

回答

2

它在堆棧上創建一些空間(稱爲函數堆棧框架)來存儲局部變量,並且一旦離開函數就會被銷燬。由編譯器生成的編號可能會有所不同,並且比函數所需的更多。

4

在堆棧上分配16個字節。在x86架構上,堆棧從較高地址轉到較低地址。從堆棧指針中減去16將爲該函數的使用分配該內存。