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

时间:2023-03-08 20:30:01
linux内核分析 第一周 计算机是如何工作的 20125221银雪纯

我使用的c语言代码是:

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

使用实验楼的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

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

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

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

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

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

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

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

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

总结:

计算机是如何工作的。

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

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

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

  API 程序员与计算机的接口

  ABI 程序与CPU的接口

  约定指令是用什么寄存器

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

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

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