计算机系统基本组成与基本功能
冯·诺依曼结构主要思想
计算机应由运算器、控制器、存储器、输入设备和输出设备五个基本部件组成
各个部件的功能:
- 存储器:不仅能存放数据,而且能存放指令,形式上两者没有区别,但计算机应能区分数据还是指令;
- 控制器:应能够自动取出指令来执行;
- 运算器:应能进行加/减/乘/出四种基本算术运算,并且也能进行一些逻辑运算和附加运算;
- 操作人员可以通过输入设备、输出设备和主机进行通信;
内部以二进制表示指令和数据。每条指令由操作码和地址码两部分组成。操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序。
采用“存储程序”工作方式。
现代计算机结构模型及工作原理
计算机执行程序,和它的内部结构是紧密关联的。
计算机是如何工作的
把计算机执行程序比做你妈在厨房做菜~
做菜前
原材料(数据)和菜谱(指令)都按序放在厨房(CPU)外的架子(存储器)上,每个架子都有编号(存储单元地址)。
菜谱的内容:原料位置、做法、做好的菜放哪等。
例如:把10、11号架子上的原料一起炒,并装入3号盘。然后,你告诉你妈:从第5个架子上(起始PC=5)指定菜谱开始做
开始做菜
第一步:从5号架子上取菜谱(根据PC取指令)
第二步:看菜谱(指令译码)
第三步:从架子上或盘中取原材料(取操作数)
第四步:根据菜谱规定洗、切、炒等具体操作(执行指令)
第五步:装盘或者直接送桌(回写结果)
第六步:算出下一菜谱所在架子编号6=5+1(修改PC的值)
继续做下一道菜(执行下一条指令)
程序执行前
数据和指令事先放在存储器中,每条指令和每个数据都有地址,指令按序存放,指令由OP、ADDR字段组成,程序起始地址置PC。
开始执行程序
第一步:根据PC取指令
第二部:指令译码
第三步:取操作数
第四步:指令执行
第五步:回写结果
第六步:修改PC的值
继续执行下一条指令
指令和数据
程序启动之前,指令和数据都存放在存储器中,形式上没有差别,都是0/1序列。
采用“ 存储程序 ”工作方式:
- 程序由指令组成,程序被启动后,计算机只能自动取出一条一条指令执行,在执行过程中无需人的干预。
指令中需给出的信息:
- 操作性质(操作码)
- 源操作数1或/和源操作数2 (立即数、寄存器编号、存储地址)
- 目的操作数地址(寄存器编号、存储地址)
- 存储地址的描述与操作数的数据结构有关!
程序开发和执行过程
从机器语言到高级语言
最早的程序开发过程
用机器语言编写程序,并记录在纸带或卡片上。
输入:按钮、开关
输出:指示灯等
所有的信息都是0/1序列!
其执行速度快,但是书写、阅读及其困难。
汇编语言开发程序
汇编语言程序由汇编指令构成,汇编指令是用助记符和标号来表示的指令。
- 用助记符表示操作码
- 用标号表示位置
- 用助记符表示寄存器
指令:
- 包含操作码和操作数或其地址码(机器指令用二进制表示,汇编指令用符号表示)。
- 只能描述:
- 取(或存一个数)
- 两个数加(或减、乘、除、与、或等)
- 根据运算结果判断是否转移执行
通过汇编程序用来把汇编程序写的程序转化成机器语言写的程序。
优点:
- 不会因为增减指令而需要修改其他指令
- 不需记忆指令编码,编写方便
- 可读性比机器语言强
缺点:
- 程序会很长:需要描述的细节太多,程序会很长很长。
- 不可移植:在不同结构的机器上就不能运行。
结论:机器语言和汇编语言都是面向机器结构的语言,与机器的结构相关。用汇编语言比机器语言好,但是,还是很麻烦。
高级语言开发程序
随着技术的发展,出现了许多高级编程语言
- 它们与具体机器结构无关
- 面向算法描述,比机器级语言描述能力强得多
- 有“ 面向过程 ”和“ 面向对象 ”等语言之分
- 处理逻辑分为三种结构:顺序结构、选择结构、循环结构
最终要将高级语言转化为机器语言,有两种转换方式:
- 编译程序(Complier):将高级语言源程序转换为机器级目标程序(机器语言或者汇编语言),执行时只要启动目标程序即可。
- 解释程序(Interpreter):将高级语言语句逐条翻译成机器指令并立即执行,不生成目标文件。
hello world
hello.c程序的转换处理过程
|
|
hello.c的ascii文本表示
源程序中其实存放的是程序的ascii文本表示。显然计算机是不能执行hello.c。
以下是gcc+Linux平台中的处理过程:
源程序hello.c(文本)——预处理(cpp)——>源程序hello.i(文本)——编译(cc1)——> 汇编语言程序hello.s(文本)——汇编(as)——>可重定位目标程序hello.o(二进制)——print.o连接(Id)——>可执行目标程序hello(二进制)
hello程序的数据流动过程
数据经常在各存储部件间传递,现代计算机大多采用“缓存技术”。
所有过程都是在CPU执行指令所产生的控制信号的作用下进行的。
开发和运行程序需要什么支撑?
最早的程序开发很简单
- 直接输入指令和数据,启动后把第一条指令地址送PC开始执行
用高级语言开发需要复杂的支撑环境
- 编辑器编写源程序(语言处理系统)
- 一套翻译转换软件处理各类源程序(语言处理系统)
- 编译方式:预处理程序、编译器、汇编器、连接器
- 解释方式:解释程序
- 需要一个可以执行程序的界面(环境)——人机接口(操作系统)
- GUI:图形用户界面
- CUI:命令行用户界面
支撑程序开发和运行的环境由系统软件提供,最重要的系统软件是操作系统和语言处理系统