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

原创 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”字符由内存复制到寄存器,寄存器再将结果复制到显示设备上显示出来。

版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/guidao13)。

计算机如何执行取数指令

因为要执行的指令的地址是保存在pc中,指令保存在存储体中,所以第一步就是pc把指令的地址给MAR,再由MAR给存储体,在控制器cu的控制下,存储体把指定单元中保存的那条取数指令取出送入MDR,然后再送...
  • Yoosona
  • Yoosona
  • 2017年09月19日 22:00
  • 432

计算机的指令执行过程分析

取数指令的执行: 存数指令的执行:
  • kai8wei
  • kai8wei
  • 2015年04月26日 14:19
  • 2253

计算机程序是怎样运行的

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

一个程序在计算机中到底是如何运行的?

注:转载于C语言中文网高级部分。 在《载入内存,让程序运行起来》一节中讲到,程序是保存在硬盘中的,要载入内存才能运行,CPU也被设计为只能从内存中读取数据和指令。 对于CPU来说,内存仅仅是一...
  • czg13548930186
  • czg13548930186
  • 2016年09月22日 23:46
  • 3802

计算机程序的执行过程

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

计算机是怎么执行机器语言的?即机器是怎么执行010101的?

在知道了 在没有这些高级语言之前,最早的程序员,是写机器码的,即010101010。受得了吗?  即写01010101这样的代码写到纸带(即打孔纸带)上...
  • Ideality_hunter
  • Ideality_hunter
  • 2017年05月24日 14:17
  • 461

程序是怎么从代码到执行的

一个月多月没发文章了,虽然有几篇在草稿箱里一直删改,但是太水.没好意思发出来.关于这个文章的问题是早就想问了的,但是以前一直基础不够,弄不明白.这学期刚好学了体系结构,也看CSAPP,总算可以说是算比...
  • meiboyu
  • meiboyu
  • 2014年06月03日 20:35
  • 4381

计算机是如何执行程序的

我最近在写一本关于操作系统的书,下面的章节原本是放在本书的开始,        后我感觉不好就扔了,今天把它帖到这里吧         你或许已经卷起了衣袖,或许在摩拳擦掌,正准备大干一场,打...
  • a879365197
  • a879365197
  • 2015年01月14日 11:50
  • 1131

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

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

程序是怎么运行的-总结于《程序是怎么跑起来的》

首先我们需要知道这些基础的计算机软硬件知识。 1.程序运行必要的硬件 1.必须有一个存储器,记忆程序和数据的存储器。 2.必须有一个控制器,控制程序执行的控制器。 3.必须有一个运算器,完成数...
  • u010266352
  • u010266352
  • 2015年08月15日 22:10
  • 2175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序是如何被计算机所执行的?
举报原因:
原因补充:

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