首页 > 系统服务 > 详细

linux内核分析 第一周 计算机是如何工作的 20125221银雪纯

时间:2016-02-28 21:18:58      阅读:259      评论:0      收藏:0      [点我收藏+]

我使用的c语言代码是:

  1. int g(int x)
  2. {
  3.   return x + 1;
  4. }
  5.  
  6. int f(int x)
  7. {
  8.   return g(x);
  9. }
  10.  
  11. int main(void)
  12. {
  13.   return f(6) + 3;
  14. }

使用实验楼的linux环境得到的汇编代码如下:

 1  g:

 2  pushl %ebp

 3  movl %esp, %ebp

 4  movl 8(%ebp), %eax

 5  addl $1, %eax

 6  popl %ebp

 7  ret

 8  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:

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

汇编代码的工作过程中堆栈的变化如下:

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

总结:

计算机是如何工作的。

冯·诺依曼结构:从硬件的角度:CPU通过总线和内存连接,CPU从IP所指的代码段取指令执行。

        从程序员的角度:内存负责保存指令,CPU负责执行指令。

CPU怎么识别,识别什么样的指令:

  API 程序员与计算机的接口

  ABI 程序与CPU的接口

  约定指令是用什么寄存器

x86计算机中,eip是自加一的指向一个指令,自加一是加一条指令,而非字节等,eip还可以被其他指令修改,如跳转调用指令。

CPU在实际取指令时根据CS:eip来准确定位一个指令。

linux内核使用的是AT&T汇编格式。

linux内核分析 第一周 计算机是如何工作的 20125221银雪纯

原文:http://www.cnblogs.com/echo178905/p/5225550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!