计算机收藏程序员

5#Linux内核分析#学习笔记01

2015-03-05  本文已影响99人  Samuel_zx

原创作品转载请注明出处,《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单元负责一些运算操作。

上一篇下一篇

猜你喜欢

热点阅读