原創(chuàng)作品轉(zhuǎn)載請注明出處栋齿,《Linux內(nèi)核分析》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()函數(shù)
2 pushl %ebp
3 movl %esp, %ebp
4 movl 8(%ebp), %eax
5 addl $2, %eax
6 popl %ebp
7 ret
8 f: ;f()函數(shù)
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()函數(shù)
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行開始執(zhí)行main函數(shù)
5. 總結(jié)
目前絕大部分的計算機都是采用馮?諾依曼體系結(jié)構(gòu)乳绕,即存儲程序計算機模型。
計算機執(zhí)行程序時逼纸,首先是CPU控制器從內(nèi)存獲得第一條指令的地址洋措,CPU取得這個指令并執(zhí)行,然后CPU控制器生成下一條要執(zhí)行的指令的地址杰刽。內(nèi)存中保存程序的指令和數(shù)據(jù)菠发,ALU單元負責(zé)一些運算操作。