文章目录
1.计算机工作过程分为三步骤
2.从源程序到可执行文件
- 这里以UNIX系统中的GCC编译器程序为例,将C语言源程序转换为
可执行文件(以二进制磁盘文件形式存储)
(1)预处理阶段
- 预处理器(cpp)对源程序中以
#
开头的命令进行处理,例如将#include
命令后面的.h
文件内容插入
程序文件。输出结果是一个以.i
为扩展名的源文件hello.i
。
(2)编译阶段
- 编译器(ccl)对
预处理后的源程
序进行编译
,生成一个汇编语言程序hello.s
。汇编语言源程序中的每一条语句都以一种文本格式
描述了一条低级指令
。
(3)汇编阶段
- 汇编器(as)将
hello.s
翻译成机器语言指令
,把这些指令打包成一个称为可重定位目标文件
的hello.o
,一种二进制文件
,用文本编辑器打开会乱码
。
(4)链接阶段
- 链接器(ld)将多个
可重定位目标文件
和标准库函数
合并为一个可执行目标文件, 或简称可执行文件
。本图例子中,链接器将hello.o
和库函数printf
所在的可重定位目标模块printf.o
合并,生成可执行文件hello
。最终生成的可执行文件被保存在磁盘
上。
3.指令执行过程的描述
- 简单描述:程序中第一条指令位于PC中,根据
PC
取出第一条指令,经过译码,执行步骤
等,控制计算机各功能部件的协同运行,完成这条指令的功能,并计算下一条指令的地址
。用新得到的指令地址继续读出第二条指令并执行,知道程序结束为止。
- 图中从控制器送出的
虚线
是控制信号↓↓↓↓↓↓ - 可以控制如何修改
PC
以得到下一条指令的地址 - 可以控制
ALU
执行什么运算 - 可以控制主存进行
读/写
操作
举个例子
例题:以取数指令(即将指令地址码指示的存储单元中的操作数取出后送至运算器的累加器(ACC)中)为例进行说明。其信息流程如下:
累加器ACC:二进制8位寄存器,存放操作数或运算结果。
M : 主存储器
(1)取指令:PC->MAR->M->MDR->IR
根据PC取指令到IR
。将PC的内容送MAR,MAR中的内容直接送地址线,同时控制器将读/写信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上,MDR从数据线接受指令信息,并传送到IR中。
(2)分析指令:OP(IR)->CU
指令译码器解释操作码OP(IR)并送出控制信号
。指令寄存器(IR)将操作码OP(IR)送至指令译码器(ID)进行解释翻译,将翻译的信息送至操作控制器(OC),OC生成相应的控制信号,送到不同的执行部件。
(3)执行指令:Ad(IR)->MAR->M->MDR->ACC
取数操作
。将IR中的指令地址码送MAR,MAR将内容送至地址线,同时控制器将读/写信号送读/写线,从主存指定单元读出操作数,并通过数据线送至MDR,再传送到ACC中。
- 每取完一条指令,(PC)+1->PC,取下一条指令的地址。