您的位置:首页 > 理论基础

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

2016-02-28 20:30 323 查看
我使用的c语言代码是:

int g(int x)

{

return x + 1;

}

int f(int x)

{

return g(x);

}

int main(void)

{

return f(6) + 3;

}

使用实验楼的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汇编格式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: