一、实验

使用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;

 }

源代码:

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

汇编代码:

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

去点.开头的代码后

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

 

堆栈变化:

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

 

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

 

 

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

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

 

 

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

 

相关文章:

  • 2021-08-11
  • 2021-06-01
  • 2021-12-06
  • 2021-05-01
  • 2021-08-22
  • 2021-06-19
  • 2021-07-19
猜你喜欢
  • 2022-03-09
  • 2021-12-27
相关资源
相似解决方案