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

我使用的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汇编格式。

posted @ 2016-02-28 20:30  20125221银雪纯  Views(216)  Comments(0Edit  收藏  举报