计算机的工作原理(基于机器指令的分析)

本文以IA32体系结构的Ubuntu系统为例,详细介绍了计算机的工作原理,包括冯·诺依曼结构、单任务计算机的基本工作流程和基于指令的分析。通过GCC编译过程,展示了从C代码到汇编代码的转换,并通过汇编代码分析了函数调用、栈操作等机器指令的执行过程,帮助读者深入理解计算机如何执行程序。

计算机是怎么样工作的

实验环境: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值