计组期末复习

本文介绍了计算机的冯·诺伊曼结构,详细阐述了计算机如何通过存储程序工作方式执行指令。同时,文章深入探讨了C程序的编译过程,包括预处理、编译、汇编和链接四个阶段,解释了从源代码到可执行文件的转化步骤。此外,还简单概述了hello程序的生命周期。
摘要由CSDN通过智能技术生成

前言

处于期末考试中,所以…(此处省略一些狡辩的借口) 。其实就是本周除了完成了一个数据结构大作业,其他啥都没学

什么是计算机

  • 计算机是一种能对数字化信息进行自动、高效算术和逻辑运算的处理装置。

 

冯.诺伊曼结构的主要思想

  1. 计算机应由运算器、控制器、存储器、输入设备和输出设备五个基本部件组成。
    1. 存储器不仅能存放数据,而且也能存放指令,形式上两者没有区别,都是0/1序列,但计算机应能区分数据还是指令;
    2. 控制器应能自动取出指令来执行;
    3. 运算器应能进行加/减/乘/除四种基本算术运算,并且也能进行一些逻辑运算和附加运算;
    4. 操作人员可以通过输入设备输出设备和主机进行通信
  2. 内部以二进制表示指令和数据。每条指令由操作码和地址码两部分组成。操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序。
  3. 采用存储程序工作方式。
    • 程序由指令组成,程序被启动后,计算机能自动取出一条一条指令执行,在执行过程中无需人为干预。
      在这里插入图片描述

 

计算机是如何工作的?

程序在执行前

数据和指令事先存放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、ADDR字段组成,程序起始地址置PC。

 

开始执行程序

  1. 根据PC取指令
  2. 指令译码
  3. 取操作数
  4. 指令执行
  5. 回写结果
  6. 修改PC的值,继续执行下一条指令

 

指令执行过程中,指令和数据被从存储器取到CPU,存放在CPU内的寄存器中,指令在IR中,数据在GPR中。

 

hello程序的生命周期

hello程序的生命周期是从一个源程序开始的,文件名是hello.c。为了在系统上运行hello.c程序,每条C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序(可执行目标文件)的格式打好包,并以二进制磁盘文件的形式存放起来。

在Unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:

linux> gcc -o hello hello.c

在这里,GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello

上述的翻译过程一共分为四个阶段(预处理、编译、汇编、链接),执行这四个阶段的程序(预处理器、编译器、汇编器、链接器)一起构成了编译系统。

在这里插入图片描述

 

C程序编译的四个阶段

  • 预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。

    比如hello.c程序中的第1行的#include <stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。

    这样我们就得到了以.i为文件扩展名的另一个C程序。

  • 编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.shello.s中包含一个汇编语言程序。

    该汇编语言程序中的每条语句都以一种文本格式描述了一条低级机器语言指令。

  • 汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种叫作可重定位目标程序的格式,并将结果保存在目标文件hello.o中,hello.o文件是一个二进制文件。

  • 链接阶段:由于hello程序调用了printf函数,而printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,所以这个文件必须以某种方式合并到我们的hello.o程序中。

    链接器(ld)就负责处理这种合并,结果就得到hello文件,它是一个可执行文件,可以被加载到内存中,由系统执行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值