计算机是怎么样工作的
实验环境:IA32体系结构,Ubuntu 12.04操作系统
一 单任务计算机的工作
1.1.宏观上的工作原理
1.11冯·诺依曼结构
要想知道计算机是怎样工作的,那么首先对于计算机的结构的了解是必不可少,冯·诺依曼结构奠定了现代计算机的基本结构。如图1所示。
图1冯·诺依曼结构
1.12基本工作原理
按照冯·诺依曼存储程序的原理,计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时才停止执行。那么我们就可以将计算机的工作过程简化成如下图2所示。
图2 计算机基本工作原理
程序计数器,在IA32中通常称PC,linux中寄存器eip存储将要执行的下一条指令在存储器中的地址,通过图2可知,计算机通过这样不断的取指令并且去执行。
1.2基于指令的分析
由上述分析可知,计算机是通过执行机器指令来维持整个计算机的工作,IA32的机器代码与原始C代码相差很大,一些通常对C语言程序员隐藏的处理器状态是可见的,比如程序计数器、整数寄存器等。下面我就通过分析机器指令来了解计算机的工作过程。
当我们用高级语言编程的时候,机器屏蔽了程序的细节即机器级的实现,GCC C编译器可以以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,非常接近于机器代码,所以我们可以通过研究汇编代码来分析计算机的工作过程。
分析的C代码示例如下所示:
int g(int x)
{
return x+3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(8)+1;
}
1.21 GCC的工作过程
在分析汇编代码之前,首先来了解一下GCC的工作过程,从高级C程序文件到可执行目标文件的过程如图3所示。
图3 GCC工作过程
总共分为四个步骤,分别是:
(1)预处理阶段
gcc -E -o example.cpp example.c
(2)编译阶段
从预处理阶段开始:gcc -x cpp-output -S -o example.s example.cpp