程序是如何被计算机所执行的?

原创 2016年08月29日 09:48:08

一、计算机程序
要明白程序是如何被计算机所执行的,首先要明白什么是程序?先看看一下几个问题:
这里写图片描述

  • 程序的概念?
    程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为实现预期目的而进行操作的一系列语句和指令。一般分为系统程序和应用程序两大类。

  • 程序由什么组成?
    程序由数据和指令组成。

  • 什么是机器语言?
    机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。

  • 运行中的程序存储在什么位置?
    程序加载时首先到寄存器中,寄存器会将程序复制到内存中从而进行存储,,当程序运行时,CPU会把主从的程序的数据和指令调用到寄存器特定的位置,从而执行。

  • 什么是内存地址?
    内存地址指系统 RAM 中的特定位置,通常以十六进制的数字表示,如同计算机内部特定位置的编号。

  • 程序的解释和运行的计算机部件叫什么?
    CPU的控制器是计算机的指挥中心,负责决定执行程序的顺序,给出执行指令时机器各部件需要的操作控制命令.,程序的解释和运行也是由CPU的控制器来完成。

    程序=指令+数据
    

二、程序的执行过程
当我们输入以下程序,编译运行,计算机从屏幕输出hello, world!。整个过程计算机都怎么运作的呢?

#include <stdio.h>

void main()
{
printf("hellow,world!\n");
}

计算机内部存储的是0和1,计算机通过位信息以及上下文来解读这些0、1信息的。
hellow,world是由0和1组成的序列,将这些程序代码转换成相应的文本字符,每8位表示一个字节,用来存储一个字符。

hellow,world的ASCII码表示

因为我们输入的hellow,world是人可以阅读和编写的,但是机器并不能直接识别他们,我们需要把这些文字翻译成机器可执行的二进制文件,这一部分的工作是由编译系统完成的。编译系统由预处理器、编译器、汇编器、连接器四部分组成。以hello, world程序为例,各部分共同完成将源文件编译成二进制可执行文件。各个部分完成的具体工作如下:
这里写图片描述

  • 预处理器:根据以#开头的命令,将包含的头文件加载进入源程序源程序。预处理器读取系统头文件stdio.h中的内容,代替此行内容。源程序经过预处理后,得到另一个c程序,此程序通常以.i为后缀保存。

  • 编译器:将预处理后的.i文件转换成汇编程序。编译器将不同的高级语言(如c语言,C++语言)转换成严格一致的汇编语言格式进行输出。汇编语言以标准的文本格式确切的描述每机器语言指令。编译器得到的文件通常以.s为后缀保存。

  • 汇编器:将汇编语言(.s文件)翻译成机器语言指令,并将这些指令打包成一种可定位目标程序格式。汇编后得到的文件即为二进制文件,通常以.o为后缀。

  • 链接器:hello, world程序中调用过printf函数,它是一个c标准库里的函数。Printf函数存放在一个名为printf.o的单独预编译的文件中。而这个文件必须以适当的方式并入到我们的程序中,这个工作由链接器完成。将外部的.o文件并入后,得到一个完整的hello, world可执行文件。可执行文件加载到存储器后,由系统复制执行。

    程序加载进入CPU的过程
    这里写图片描述

  • Shell:命令行解释器,当用户输入一行命令后,shell先判断它是不是一个shell内置命令,如果不是,shell会假定用户输入为一个可执行文件的名字,从而去加载并执行该文件。因此,当我们通过编译系统将源文件编译成可执行二进制文件后,在shell中输入我们得到的可执行二进制文件名,shell将其从磁盘中加载到主存当中,通过CPU进行解释运行,最终通过终端设备(屏幕)将他显示出来,程序运行结束。

  • 主存储器:简称主存,是处理器执行程序时用于临时存放程序及其数据。主存由一组动态随机存储器芯片组成。

  • 运算器:计算机中执行各种算术和逻辑运算操作的部件。

  • 控制器: 计算机中执行各种算术和逻辑运算操作的部件。

三、CPU的组成
CPU是由四大部分所构成的:寄存器、控制器、运算器、时钟。

  • 寄存器
    • CPU内部的内存,程序加载进CPU内部的寄存器中从而被用来解释和运行。
  • 控制器
    • 计算机的指挥中心,负责决定执行程序的顺序,给出执行指令时机器各部件需要的操作控制命令。
  • 运算器
    • 计算机中执行各种算术和逻辑运算操作的部件。
  • 时钟
    • 它是处理操作的最基本的单位,影响着指令的取出和执行时间。

CPU中的主要寄存器
这里写图片描述

累加寄存器(AC) :主要进行加法运算。
标志寄存器(PSW) :记录状态,做逻辑运算。
程序计数器(PC) :是用于存放下一条指令所在单元的地址的地方。
基质寄存器(BX) :储存当前数据内存开始的位置。
变址寄存器 :储存基质寄存器的相对位置。
通用寄存器(GPRs) :支持有所的用法。
指令寄存器(IR) :CPU专用,储存指令。
堆栈寄存器(SP) :记录堆栈的起始位置。

  寄存器寄存器是中央处理器内主要组成结构成分,它是CPU当中有限存贮容量的高速存贮部件,它在工作时能将计算机指令数据进行暂时的存储。

  内存地址=基质+变址

处理器读取并解释存储在存储器中的指令
这里写图片描述

处理器的操作主要是围绕程序计数器、算术/逻辑运算单元、主存来进行运作的。处理器首先从PC所指向的主存存储单元读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC寄存器,使其指向下一条要执行的指令。CPU会执行的操作有:

  • 加载:把一个字节或一个字从主存复制到寄存器,覆盖掉寄存器中原来的值。

  • 存储:把一个字节或一个从寄存器复制到主存,并覆盖主存中原来的值。

  • 操作:把两个寄存器的内容复制到ALU,ALU对两个字做算术运算后存回其中的一个寄存器,该寄存器中原来的值会被覆盖。

  • 跳转:从cpu执行的指令抽取一个字的内容存入PC,覆盖掉原来的值,从而改变下一条要执行的指令,达到跳转的目的。

这里写图片描述

hellow,world程序首先被加载,从磁盘中复制到寄存器中,寄存器将hwllow,world程序复制到主存中进行存储。程序运行过程中,CPU执行hellow,world机器指令,指令的结果是将”hellow,world”字符由内存复制到寄存器,寄存器再将结果复制到显示设备上显示出来。

版权声明:本文为博主原创文章,转载请标明出处(www.pause.vip)。 举报

相关文章推荐

计算机程序是怎样运行的

关于《深入理解计算机系统》 “这本书的中译名为“深入理解计算机系统”,我非常,十分,以及百分之一百二十地不满意。我这么说的原因在于这个译法完全扭曲了书的本意。如果直译原书名,应该是类似于“以程序...

一条指令在cpu中的执行流程(理解CPU组成)

几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数、结果写回。

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

程序在CPU中运行的机制

程序在没有运行之前是保存在外存中的。程序被执行后,加载到内存中为机器语言程序,由CPU进行解析和运行,进而计算机系统整体的控制和数据运算也开始运行。 程序与CPU 程序是指令和数据的组合体。例如C...

程序是怎么跑起来的? —— CPU 是什么?C/C++程序的运行

1. 概念初步 程序:计算机的程序,和做饭、运动会的程序一样,指的是“做事的先后次序”; 程序的组成:程序是指令(及物动词)和数据(宾语)的组合体; C 语言 printf("hello\n");,...

程序是如何被计算机所执行的?

一、计算机程序 要明白程序是如何被计算机所执行的,首先要明白什么是程序?先看看一下几个问题: 程序的概念? 程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的...

计算机是如何运行的

第一次写博客,不会怎么使用排版功能,写的不好请大家见谅! 看计算机如何工作,我们先对一个简单的C语言程序进行反汇编,这是在实验楼进行C语言反汇编实验C语言源代码的截图:   把C语言源代码反汇编

计算机程序的执行过程

一。 计算机程序的执行过程 程序就是指令的集合 为使计算机按预定要求工作,首先要编制程序。程序是一个特定的指令序列,它告诉计算机要做哪些事,按什么步骤去做。指令是一组二进制信息的代码,用来表示...

Java虚拟机(一)--java程序是如何被运行的

本文参考了inside the java virtual machine, second edition。 下面的链接中有这本书部分章节的内容,可以参考一下: http://www.artim...
  • OnlyQi
  • OnlyQi
  • 2011-08-12 12:38
  • 3300

JavaScript程序的执行

① 执行脚本 出现在和标记对之间的JavaScript语句按照它们在脚本中出现的顺序来执行。当一个文件有多个脚本的时候,脚本按照它们出现的顺序来执行。脚本可以出现在一个HTML文档的或中。中的脚本通...

计算机基础(二)——程序执行

程序编译1、源程序如.c/.cpp 2、经过预处理器,得到被修改后的源程序.i: 预处理器可以删除注释、包含其他文件以及执行宏(宏macro是一段重复文字的简短描写)替代。 3、经过编译器,得到...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)