原创作品转载请注明出处,《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 leave5. 总结
目前绝大部分的计算机都是采用冯•诺依曼体系结构,即存储程序计算机模型。
计算机执行程序时,首先是CPU控制器从内存获得第一条指令的地址,CPU取得这个指令并执行,然后CPU控制器生成下一条要执行的指令的地址。内存中保存程序的指令和数据,ALU单元负责一些运算操作。
网友评论