美文网首页计算机收藏程序员
5#Linux内核分析#学习笔记01

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

作者: Samuel_zx | 来源:发表于2015-03-05 23:12 被阅读99次

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

    相关文章

      网友评论

        本文标题:5#Linux内核分析#学习笔记01

        本文链接:https://www.haomeiwen.com/subject/atsmxttx.html