5#Linux內核分析#學習筆記01

原創作品轉載請注明出處,《Linux內核分析》MOOC課程 http://mooc.study.163.com/course/USTC-1000029000

實驗步驟:

1. 在Linux下編寫一個C語言程序main.c

int g(int x)
{
      return x + 2;
}

int f(int x)
{
      return g(x);
}

int main(void)
{
      return f(6) + 3;
}

2. 將main.c編譯成匯編語言文件main.s
gcc -S -o main.s main.c -m32

3. 去掉main.s文件中以點號"."開頭的行,得到匯編代碼如下:

  1    g:                              ;g()函數 
  2         pushl   %ebp                     
  3         movl    %esp, %ebp               
  4         movl    8(%ebp), %eax            
  5         addl    $2, %eax                 
  6         popl    %ebp                     
  7         ret                              
  8    f:                              ;f()函數                                                                                                                        
  9         pushl   %ebp                     
 10         movl    %esp, %ebp               
 11         subl    $4, %esp                 
 12         movl    8(%ebp), %eax            
 13         movl    %eax, (%esp)             
 14         call    g                        
 15         leave                            
 16         ret                              
 17    main:                           ;main()函數
 18         pushl   %ebp                     
 19         movl    %esp, %ebp               
 20         subl    $4, %esp                 
 21         movl    $6, (%esp)               
 22         call    f                        
 23         addl    $3, %eax                 
 24         leave                            
 25         ret     

4. 從第17行開始執行main函數

初始狀態:17 main:
18 pushl %ebp
19 movl %esp, %ebp
20 subl $4, %esp
21 movl $6, (%esp)
22 call f
9 pushl %ebp
10 movl %esp, %ebp
11 subl $4, %esp
12 movl 8(%ebp), %eax
13 movl %eax, (%esp)
14 call g
2 pushl %ebp
3 movl %esp, %ebp
4 movl 8(%ebp), %eax
5 addl $2, %eax
6 popl %ebp
7 ret
15 leave
16 ret
23 addl $3, %eax
24 leave

5. 總結

目前絕大部分的計算機都是采用馮?諾依曼體系結構,即存儲程序計算機模型。

計算機執行程序時,首先是CPU控制器從內存獲得第一條指令的地址,CPU取得這個指令并執行,然后CPU控制器生成下一條要執行的指令的地址。內存中保存程序的指令和數據,ALU單元負責一些運算操作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容