计算机是怎样工作的?

小市民0条评论 237 次浏览

本文通过在X86_Linux系统中将一段C代码编译得到汇编代码,简单分析指令执行流程,简单理解计算机是如何工作的。

首先编写一段C代码,main.c
int g(int x)
{
  return x + 1;
}

int f(int x)
{
  return g(x);
}

int main(void)
{
  return f(3) + 2;
}
使用gcc工具将C文件编译成一个.s的汇编文件
gcc –S –o main.s main.c //32位环境下加-m32

原始的汇编文件

对汇编代码进行整理后

画图来分析汇编代码的运行过程,其中ESP为堆栈顶指针,EBP为堆栈基指针,EAX为累加器,EIP寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。

一段汇编代码运行全过程的动图

动图

理解计算机如何工作首先要理解存储计算机(冯诺依曼体系架构)的工作模型。
从硬件角度来看,CPU与内存通过总线连接,在CPU中有个寄存器IP(Instruction Pointer,可以理解为指针)指向内存的代码段CS(Code Segment Register),CPU从IP所指向的内存地址取指令执行,执行完成寄存器后加一再执行下一条指令。
从程序员的思想来抽象来看,CPU抽象为一个for循环,总是执行下一条指令,内存保存指令和数据,CPU负责解释和执行指令,两者通过总线连接。

发表评论

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen