linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作

一、实验

使用gcc –S –o main.s main.c -m32

命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同

int g(int x)

{

  return x + 3;

}

 

int f(int x)

{

  return g(x);

}

 

int main(void)

{

  return f(8) + 1;

 }

源代码:

汇编代码:

去点.开头的代码后

 

堆栈变化:

 

 

 

我对“计算机是如何工作的”理解

通过以上一个小例子,清楚地展示了计算机是如何在堆栈中进行数据流的变化的。我的理解是,当开始运行一段程序,都是在往堆栈压入数据,这个例子中main函数代码运行过程就是这样,这一段代码中还嵌套了g、f函数,当这两个函数运行完成后,执行ret指令,堆栈中的值就开始出栈,当main函数也执行到ret,整个堆栈还原了。所以计算机工作的过程,就是堆栈中数据先增后减直到堆栈还原的过程。小程序是这样的过程,大程序也如此。

 

 

李海空原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

 

posted @ 2016-02-24 20:09  20135329李海空  阅读(276)  评论(0编辑  收藏  举报