Upload
others
View
42
Download
0
Embed Size (px)
Citation preview
第$
章!
计算机硬件组成
冯&诺依曼结构是图灵机模型的一种具体实现"是现代计算机结构的基础"
FD
是最普及的计算机系统%了解冯&诺依曼结构的工作过程"掌握
FD
的硬件组成和工作原理是了解计算机如何自动完成计算过程的基础"也是深入学习计算机算法和编程的基础%
$"!
!
从图灵机模型到冯!诺依曼结构
图灵机是现代计算机的计算模型"冯&诺依曼结构是图灵机的工程实现"也是现代计算机结构的基础%
$"!"!
!
图灵机模型
图灵机模型是现代计算机的理论模型"它的最大贡献是证明了有些问题是可以通过有限的!机械的步骤得以解决的"这类可以通过有限的!机械的步骤得以解决的问题是可计算的问题%现代计算机能够自动完成可计算问题的解决过程%
!"
图灵机模型组成图灵机模型如图
%0"
所示"由无限长度带子!读写头和控制器组成%无限长度带子被分割为若干格"每一格可以写入有限符号集(
!
"
"
!
!
")"
!
"
*中的某个符号"或者空格符%
读写头可以读到它所指向的位置中的符号(包括空格符*"控制器处于有限状态集(
#"
"
#!
")"
#$
*中的某个状态"初始时处于初始状态#"
%控制器能够根据指定的规则和读入的符号"从一个状态转换到另一个状态%停机状态是一个特殊状态"图灵机计算过程正常结束后处于该状态%读写头和控制器可以在带子上左右移动"但每一次只能移动一格%
图$"!
!
图灵机模型
控制器中的规则通过指令指定"指令由以下内容组成%
"
控制器当前状态+
"
读写头读到的符号+
"
用于取代读写头当前位置符号的符号(新写入符号*+
$/
!!!
!!"
控制器转换后的状态+
"
读写头移动方向(左移!右移!保持不动*%
因此"指令可以用五元组(
#%
"
!
&
"
!
'
"
#(
"
)
*表示"其中#%
表示控制器当前状态"
!
&
表示读写头当前位置读到的符号(包括空格符*"
!
'
表示读写头新写入当前位置的符号(包括空格符*"
#(
表示控制器转换后的状态"
)
表示读写头移动方向"其中1
表示左移一格"
2
表示右移一格"
3
表示保持不动%控制器每执行一条指令"完成一次操作"该操作的依据是控制器当前状态和读写头读到的符号%该操作的结果有三种"一是控制器转换后的新状态"二是读写头重新写入的符号"三是读写头进行的移动%控制器周而复始地执行指令"
直到控制器转换后的新状态为停机状态%
#"
图灵机每次计算过程需要完成的配置
"
*定义符号集图灵机实现计算的关键是改变带子上的符号"控制器每次操作完成的功能是实现转
换函数(
#
"
5
*
#
(
G
"
,
"
F
*"其中#
是控制器当前状态"
5
是读写头当前位置读到的符号"
G
是控制器转换后的状态"
,
是读写头当前位置新写入的符号"
F
是读写头进行的移动操作(左移一格"右移一格"或保持不动*%因此"图灵机每次操作实现的计算"其实是以控制器当前状态和读写头当前位置读到的符号为关键词"以读写头当前位置新写入的符号为结果的一次检索过程%符号集中的符号涵盖了计算前的原始数据和计算后的结果数据"不同的计算对象有着不同的符号集%
!
*定义状态集控制器当前状态和读写头当前位置读到的符号决定了控制器本次操作所实现的计算
功能"控制器状态转换方式决定了控制器已经完成的操作对控制器下一次进行的操作的影响%相同的一系列操作步骤能够实现对任意符号串的计算过程的关键是状态集包含的状态及状态之间的转换方式%不同的计算过程需要定义不同的状态集和状态之间的转换方式%
%
*设计指令序列每执行一条指令"完成一次操作过程"执行一系列指令"完成一系列操作步骤"一系列
操作步骤构成对符号串的完整计算过程%设计指令序列就是在已经定义的符号集和状态集的基础上"确定完成符号串计算过程需要的操作步骤"及每一个操作步骤需要实现的转换函数%转换函数(
#
"
5
*
#
(
G
"
,
"
F
*以当前控制器状态和读写头当前位置读到的符号为条件"以控制器转换后的状态!读写头当前位置新写入的符号和读写头进行的移动操作为结果%
$"
图灵机工程化思路图灵机只是一个模型"用于给出实现自动计算的方法"现代计算机是图灵机模型的一
种实现%
"
*编码一旦图灵机工程化"需要完成图灵机中控制器的电路设计"在进行图灵机控制器电路设
$&
!!!
计前"必须将符号集中的所有符号和状态集中的所有状态转换成控制器电路能够处理的信息形式"这种信息形式称为编码"这种将符号和状态转换为编码的过程称为编码过程%
!
*通用指令格式完成编码过程后"可以设计适合图灵机控制器处理的指令格式%设计指令格式时"一
是需要规范指令中各个元素的表示形式"二是需要定义完整的指令集%规范指令中各个元素的表示形式一是通过编码过程实现"二是需要定义完整的符号集和状态集%定义完整的指令集需要给出能够实现图灵机能够实现的所有计算过程的操作步骤集"并以指令集的方式予以明确%可以通过指令集中指令的组合描述完成图灵机能够实现的任意计算过程所要求的操作步骤%
%
*带子!控制器电路设计一是需要完成带子的电路设计"实现能够存储!读和写符号编码的部件%二是需要完
成控制器电路设计"实现能够执行指令集中所有指令的部件%
$"!"#
!
冯"诺依曼结构
图%+!
所示是现代计算机组成框图"由冯&诺依曼提出"称为冯&诺依曼结构%
图$"#
!
冯"诺依曼结构框图
!"
冯"诺依曼思想冯&诺依曼思想主要包括三点'一是统一用二进制数对所有计算对象!指令!状态等
进行编码+二是采用图%+!
所示的由输入设备!输出设备!运算器!存储器和控制器五大部件组成的计算机结构+三是将数据(计算对象的二进制表示*和指令统一存储在存储器中%
#"
冯"诺依曼结构组成输入设备的功能是实现数据(计算对象的二进制表示*和指令从计算机外部到存储器
的过程"输出设备是实现计算结果从存储器到计算机外部的过程%存储器用于存储!读和写数据和指令%控制器用于执行指令"每执行一条指令"完成一次操作"通过执行一系列指令"完成构成某个计算过程的一系列操作步骤%运算器用于实现数据的运算过程"这些运算过程包括两个数据的四则运算过程和逻辑运算过程等%
$#
!!!
$"
冯"诺依曼结构与图灵机模型之间的关系图灵机模型的核心部件是带子和控制器"带子的功能是存储!读和写符号"对应的部件
就是存储器"从功能上看"带子是顺序存储器"如磁带%读写某个格子中的符号前"需要将读写头移动到该格子"就像读写磁带某个位置的信息前"需要将磁头移动到磁带该位置%现代计算机结构中的存储器是随机存储器"其读写性能远远超过磁带这样的顺序存储器%
图灵机模型中没有设置运算器"运算过程通过转换函数(
#
"
5
*
#
(
G
"
,
"
F
*实现%转换函数实现的运算过程其实是以控制器当前状态和读写头当前位置读到的符号为关键词"
以读写头当前位置新写入的符号为结果的一次检索过程%因此"完成复杂运算过程需要设置大量的控制器状态"并通过执行一系列指令完成这些状态间的转换过程%设置运算器可以大大简化数据的计算过程"并因此减少完成计算过程涉及的状态集中的状态数和操作步骤%由于通过执行一条指令完成一次操作"因此"可以简化完成计算过程需要的指令序列%
控制器的作用是执行指令"通过执行一系列指令"自动完成某个计算过程%但冯&诺依曼结构中指令的含义与图灵机模型中指令的含义不同%一是由于引进了运算器"冯&
诺依曼结构中的指令具有了数据计算功能"一条指令完成的数据计算功能远比图灵机模型中一条指令完成的转换函数复杂+二是冯&诺依曼结构中的指令统一用二进制数表示"
定义了可以用于实现图灵机模型能够实现的所有计算过程的通用指令集+三是冯&诺依曼结构中的指令和数据统一存储在存储器中%
图灵机模型只是给出了自动完成计算过程的方法"因此"并没有涉及将原始符号和指令存入带子和从带子得到计算结果的设备%
$"#
!
核心部件功能和指令执行过程
存储器!运算器和控制器是计算机硬件结构中的核心部件"计算机通过这三种部件的协同工作实现计算过程自动化%
$"#"!
!
存储器
存储器以存储单元为单位组织二进制数"允许以存储单元为单位从存储器读出二进制数"或写入二进制数%
!"
存储器结构存储器结构如图
%+%
所示"它是一个"M$
(图中"6&
"
$6"$
*的阵列"每一格存储一位二进制数"一行可以存储
"
位二进制数"整个存储器共有$
行%存储器的每一行用标识符唯一标识"标识符也用二进制数表示"如第
5
行标识符5555
和第"-
行标识符""""
%每一行的标识符称为地址"因此"用存储器地址唯一标识每一行%存储器的功能是用于存储!读和写二进制数"对于
"M$
阵列结构"存储器以行为单位进行读写操作"即
/5
!!!
一次写入"
位二进制数或一次读出"
位二进制数%对存储器的读写操作也称为对存储器的访问%由于存储器以行作为基本读写单位"因此"将存储器的每一行称为存储单元"
地址称为存储单元地址%存储单元位数没有标准值"不同的计算机有着不同的存储单元位数"
FD
的存储单元位数为&
位%
&
位二进制数有着固定的长度单位...字节%读写存储器"首先需要给出地址"用地址选定存储单元"然后对选定的存储单元进行读写操作%
如图%+%
所示"如果对地址为"55"
的存储单元进行读操作"得到&
位二进制数55"""55"
%同样"如果对地址为5"""
的存储单元进行写操作"并给出新写入的&
位二进制数
""55"5""
"完成写操作后"地址为5"""
的存储单元的内容变为""55"5""
%
图$"$
!
存储器结构
#"
地址位数与存储单元数如果用
6
位二进制数作为地址"可以标识!
6 个不同的存储单元"因此"存储器的地址位数与存储器的存储单元数之间存在关联%为了清楚说明存储单元数"存在以下用于说明存储单元数的单位%
"e
(千*存储单元6!
"5存储单元"K
(兆*存储单元6!
!5存储单元"Q
(吉*存储单元6!
%5存储单元"V
(太*存储单元6!
.5存储单元如果某个计算机用
%!
位二进制数作为地址"该计算机的存储器最多可以有!
%!个存储单元"即
.Q
个存储单元%如果存储单元位数为&
位"该计算机存储器最多允许有.QN
%
N
是字节"表示&
位二进制数"
8
是二进制数最小单位"表示一位二进制数%
/"
!!!
$"
存储器逻辑结构存储器逻辑结构如图
%+.
所示"外部引脚包括4
位地址位(
H
"
"
H
!
")"
H
4
*"
6
位数
图$"&
!
存储器逻辑结构
据位(
)
"
"
)
!
")"
)
6
*和一位读0写控制位(
2
0
G
*%
4
位地址位确定存储器的存储单元数是
!
4
"
6
位数据位确定存储单元位数为
6
"由此可以确定该存储器总的二进制位数为
!
4
M6
位"存储器总的二进制位数也称为存储器的容量%
存储器读操作过程如下'通过4
位地址位选定存储单元"如用地址
"55"
选定图%+%
中存储单元%通过读写控制位发出读命令"存储器将该存储单元内容发送到数据位上"对应图
%+%
"
&
位数据位的内容为55"""55"
%
存储器写操作过程如下'通过4
位地址位选定存储单元"如用地址5"""
选定图%0%
中存储单元%将需要写入的数据发送到数据位上"对应图%0%
"
&
位数据位的内容为""55"5""
"通过读写控制位发出写命令"存储器将数据位上的内容写入到地址选定的存储单元"完成写操作后"地址为
5"""
的存储单元的内容为""55"5""
%
读操作不改变存储单元内容"写操作改变存储单元内容"但在下一次写操作前"存储单元内容一直为写入的内容%
和图灵机模型中的带子不同"只要给出地址"就可读写地址选定的存储单元"这种可以随时读写任意存储单元的存储器称为随机存储器"而带子这种需要事先移动到指定位置"然后读写指定位置符号的存储器称为顺序存储器%
$"#"#
!
运算器
!"
运算器逻辑结构
!!
运算器也称为算术逻辑单元(
B=)<O+:<);1>
*
);X()<
"
B1X
*"其逻辑结构如图%0-
所
图$"'
!
运算器逻辑结构
示"其功能是完成两个操作数之间的四则运算和逻辑运算(当然也包括单个操作数的运算"如对操作数求反等*"它的输入是需要进行运算的两个操作数和用于指定运算类型的操作码"两个操作数用操作数
"
和操作数!
表示%操作码用于指定需要进行的运算"如加运算!减运算等"三位操作码可以指定
&
种不同的运算类型%它的输出是运算结果%不同的运算"有着不同的运算结果"如加运算的结果是操作数
"
加操作数!
后得到的和"减运算结果是操作数"
减操作数!
后得到的差"乘运算结果是操作数"
乘操作数!
后得到的积"除运算结果是操作数"
除以操作数
!
后得到的商和余数%
/!
!!!
#"
运算过程如果运算器三位操作码与运算类型之间的关系如表
%0"
所示"运算器输入如下'操作数
"
为&
位二进制数""""""5"
"操作数!
为&
位二进制数55555"5"
"三位操作码为55"
"运算器进行图%0$
所示的运算过程"得到运算结果555555"5
"进位;,==
S
6"
%
表$"!
!
操作码与运算类型操作码 运算类型 操作码 运算类型55"
操作数"4
操作数! 5""
操作数"M
操作数!
5"5
操作数"Z
操作数! "55
操作数"[
操作数!
!!
同样"如果运算器输入如下'操作数"
为&
位二进制数"""""55"
"操作数!
为&
位二进制数
"""""5""
"三位操作码为5"5
"运算器进行图%0/
所示的运算过程"得到运算结果"""""""5
"借位;,==
S
6"
%
图$"(
!
加运算过程!!!!!!!!
图$")
!
减运算过程
对应其他操作码的运算实例如表%0!
所示%增加运算器后"完成计算过程变得比较简单%如果需要判别某个二进制数能否被
%
整除"只要将该二进制数作为操作数"
"
%
作为操作数
!
"三位操作码设置为"55
"然后判定结果中的余数是否为5
%如果余数为5
"表示该二进制数能被
%
整除+否则"该二进制数不能被%
整除%与图灵机模型中判断某个二进制数能否被
%
整除的计算过程相比"该计算过程要简单得多%
表$"#
!
操作数!操作码和运算结果
操作码操
!
作!
数操作数
"
操作数!
结!!
果
55" """"""5" 55555"5" 555555"5;,==
S
6"
5"5 """""55" """""5"" """""""5;,==
S
6"
5"" """""55" """""5"" 55"555""
"55 55"555"" 555555"" 5555"5""
(商*
555555"5
(余数*
$"
关于运算器运算过程的几点说明运算器完成的运算过程是机械的%对于加运算"运算器对操作数
"
和操作数!
逐位相加"逢二进位"当前位产生的进位"参与上一位的加运算%对于减运算"运算器对操作数
"
和操作数!
逐位相减"不够减时"向上一位借位"每向上一位借位"当前被减位加!
%一旦
/%
!!!
下一位产生借位"当前位减运算时需要多减"
%
运算器不会判定操作数的正负"对于加运算"不会理会是同号相加"还是异号相加%
运算器机械地完成加运算过程能够得到正确结果的前提是操作数"
和操作数!
都是补码%补码实现了运算的机械化%如图
%0$
所示运算过程"因为采用补码"机械地完成两个操作数
Z%
和-
的加运算后"得到正确的结果!
"
""""""5"455555"5"6555555"5
%
$"#"$
!
控制器
!"
控制器功能
!!
控制器的功能是执行指令%由于冯&诺依曼结构将指令和数据统一存储在存储器
图$",
!
控制器工作过程
中"因此"执行指令的第一步是从存储器中读出指令"这个过程称为取指%完成取指后"由控制器根据指令的含义和控制器当前状态"完成指令的执行过程%因此"控制器的主要功能是取指和执行指令%控制器一旦启动"一直进行图
%0&
所示的工作过程"直到执行到要求其停止工作的指令(停机指令*%
#"
控制器结构控制器结构如图
%0#
所示"控制器完成取指的前提是能够给出存储指令的存储单元地址%为做到这一点"一是规定指令序列必须按照执行顺序依次存储在存储器中"二是能够给出存储第一条指令的存储单元地址%由于指令序列顺序存储"因此"存储下一条指令的存储单元地址是存储当前执行的指令的存储单元地址加
"
%知道存储第一条指令的存储单元地址后"通过不断加
"
"依次给出存储所有指令的存储单元地址%程序计数器的作用就是用于给出存储依次执行的所有指令的存储单元地址"它的初始值是存储第一条指令的存储单元地址"每完成一条指令的取指过程"程序计数器自动加
"
"加"
后的程序计数器值是存储下一条指令的存储单元地址%
图$"-
!
控制器结构
从存储器读出的指令存放在控制器中的指令寄存器中"寄存器的作用与存储单元相似"用于存储
6
位二进制数"
6
位是寄存器长度%寄存器的读写速度比存储单元快很多%
指令译码器根据指令的含义和状态寄存器的值确定该条指令需要完成的工作"向其他部件发出命令"命令其他部件各自完成在该项工作中承担的任务%如通过向运算器发出操
/.
!!!
作码"要求运算器完成操作码指定的运算过程%状态寄存器中存放表示运算器运算结果状态的标志信息"如最高位是否产生进位或借位"运算结果是否全零!运算结果是否溢出等"冯&诺依曼结构中控制器的状态比较简单"这些表示运算器运算结果状态的标志信息各种值的组合构成了控制器的状态集%假定状态寄存器中含有三个标志信息"
(
D,==
S
"
j
"
L
+
"其中D,==
S
为"
表示最高位产生进位或借位"
j
为"
表示运算结果为全零"
L
为"
表示运算结果溢出"则控制器状态集最多只有&
种不同的状态%冯&诺依曼结构中控制器的状态集比较简单的主要原因是增加了运算器"使得操作数的运算过程由运算器直接完成%
图$"!.
!
计算机核心部件框图
$"#"&
!
计算机工作过程
!"
计算机核心部件框图
!!
与指令执行过程密切相关的核心部件是存储器!运算器和控制器"它们之间的关系如图
%0"5
所示%运算器完成运算过程需要的两个操作数"一个直接来自存储器"另一个来
/-
!!!
自累加器%累加器其实是一个用于存储运算器运算结果的寄存器"设置累加器的目的是减少存储器的读写次数%由于本次运算过程的结果往往就是下一次运算过程需要的其中一个操作数"因此"将这样的运算结果存放在累加器"而不是重新写入存储器"可以减少对存储器的读写次数%由于存储器的特性"读写存储器需要的时间比读写累加器需要的时间和运算器完成运算过程需要的时间长"因此"减少读写存储器的次数可以加快指令的执行速度%运算器完成运算过程需要的操作码由指令指定%
运算器的结果存放在累加器中"运算器运算过程中产生的状态标志信息"如进位位的值"溢出标志位的值"判断结果是否为
5
"是否为正数的状态信息标志位的值都存放在状态寄存器中%如果需要根据本次运算结果确定下一次运算过程"在进行下一次运算前"可以通过状态寄存器中标志信息的值获得本次运算结果%
原始数据!指令序列都事先存储在存储器中"存放第一条指令的存储单元地址作为程序计算器的初值%
#"
指令格式和功能描述
"
*指令格式指令格式如图
%0""
所示"每一条指令统一由&
位二进制数表示"高.
位为操作码"用
图$"!!
!
指令格式
于确定指令需要实现的功能"低.
位给出存储完成操作码指定操作所需的另一个操作数的存储单元地址%
!
*指令定义与功能描述定义了
/
条指令"每一条指令对应的操作码值!操作数地址字段内容和该条指令的功能描述如表
%0%
所示%如操作码为555"
"操作数地址为6
的指令的功能是完成一次加运算"其中一个操作数(操作数
"
*来自累加器"另一个操作数(操作数
!
*来自地址为6
的存储单元"运算器完成两个操作数的加运算后"将运算结果重新存入累加器%进行四则运算时"指令操作码中的低三位可以直接作为运算器的操作码%
表$"$
!
指令功能介绍操作码 操作数地址 功能描述
555" 6
累加器4
地址为6
的存储单元内容"和#
累加器"
;,==
S
!
j
和L
#
状态寄存器(符号
#
表示存入过程"#和#
累加器$表示将和存入累加器%
;,==
S
是最高位产生的进位位%如果运算结果全零"
j6"
+否则"
j65
%如果运算结果溢出"
L6"
+否则"
L65
*
55"5 6
累加器Z
地址为6
的存储单元内容"差#
累加器"
;,==
S
!
j
和L
#
状态寄存器(
;,==
S
是最高位产生的借位位*
55"" 6
累加器M
地址为6
的存储单元内容"积#
累加器"
j
和L
#
状态寄存器5"55 6
累加器[
地址为6
的存储单元内容"商#
累加器"
j
#
状态寄存器"555 6
地址为6
的存储单元内容#
累加器"55" 6
累加器#
地址为6
的存储单元""""
停机
/$
!!!
$"
完成运算过程所需的指令序列要求完成运算过程'(
Z%
*
4-
"得出完成运算过程所需指令序列的步骤如下%
"
*求出两个操作数的补码!!!!!!!!!!!
3
Z%
4补6""""""5"
!!!!!!!!!!!
3
-
4补655555"5"
!
*完成存储单元分配地址为
"55"
的存储单元存放3
Z%
4补"地址为"5"5
的存储单元存放3
-
4补"地址为"5""
的存储单元存放加运算结果%
%
*设计指令序列完成运算过程涉及下述操作步骤"一是需要将其中一个操作数(3
Z%
4补*存入累加器%二是以累加器中操作数作为操作数
"
"以存储在存储单元中的另一个操作数(3
-
4补*
为操作数!
"完成加运算过程"加运算结果存入累加器%三是将累加器中的值存入用于存放运算结果的存储单元%四是用停机指令停止指令执行过程%每一步用一条指令实现"
得出表%0.
所示的指令序列%
表$"&
!
指令序列操作码 操作数地址 功能描述"555 "55"
3
Z%
4补#
累加器555" "5"5
3
Z%
4补4
3
-
4补#
累加器"
;,==
S
!
j
和L
#
状态寄存器"55" "5""
累加器#
存储运算结果的存储单元"""" 5555
停机
&"
完成指令存储过程从地址为
55""
的存储单元开始按照指令执行顺序依次存储指令"存在如下指令与存储单元之间的分配关系%
"
地址为55""
的存储单元存放指令"555"55"
+
"
地址为5"55
的存储单元存放指令555""5"5
+
"
地址为5"5"
的存储单元存放指令"55""5""
+
"
地址为5""5
的存储单元存放指令""""5555
%
将程序计数器的初值设置为55""
%
'"
指令执行过程控制器以程序计数器的值为地址开始取指和执行指令过程"直到执行停机指令%由
于程序计数器的初值为55""
"控制器从读地址为55""
的存储单元开始指令执行过程%
每一条指令执行前与执行后程序计数器!累加器和相关存储单元内容的变化过程如表%0-
所示%
//
!!!
表$"'
!
关键寄存器和存储单元内容变化过程
指令执
!
行!
前 执!
行!
后
程序计数器 累加器 存储单元内容(地址*
程序计数器 累加器 存储单元内容(地址*
"555"55" 55"" m """"""5"
(
"55"
*
5"55 """"""5" """"""5"
(
"55"
*
555""5"5 5"55 """"""5" 55555"5"
(
"5"5
*
5"5" 555555"5 55555"5"
(
"5"5
*
"55""5"" 5"5" 555555"5 m
(
"5""
*
5""5 555555"5 555555"5
(
"5""
*
""""5555 5""5 555555"5 555555"5
(
"5""
*
5""" 555555"5 555555"5
(
"5""
*
!!
注'
m
表示内容不确定%
"
*指令"555"55"
执行过程!
控制器将程序计数器中的值55""
作为地址读存储器"读到指令"555"55"
"将指令存入指令寄存器"同时"程序计数器值自动增
"
后变为5"55
%
"
控制器分析指令"555"55"
"将指令中的"55"
作为地址读存储器"读到数据""""""5"
"将数据存入累加器"此时累加器中的值为""""""5"
%
!
*指令555""5"5
执行过程!
控制器将程序计数器中的值5"55
作为地址读存储器"读到指令555""5"5
"将指令存入指令寄存器"同时"程序计数器值自动增
"
后变为5"5"
%
"
控制器分析指令555""5"5
"将指令中的"5"5
作为地址读存储器"读到数据55555"5"
"将数据作为运算器的操作数!
%
#
控制器将累加器作为运算器的操作数"
"将指令操作码中的低%
位55"
作为运算器的操作码"运算器完成加运算"得到结果
555555"5
"并将结果存入累加器"此时"累加器中的值变为
555555"5
%根据运算过程最高位产生的进位和运算结果产生标志信息'
;,==
S
6
"
"
j65
和L65
"并将它们写入状态寄存器%
%
*指令"55""5""
执行过程!
控制器将程序计数器中的值5"5"
作为地址读存储器"读到指令"55""5""
"将指令存入指令寄存器"同时"程序计数器值自动增
"
后变为5""5
%
"
控制器分析指令"55""5""
"将指令中的"5""
作为地址"累加器中的值555555"5
作为数据"对存储器进行写操作"完成写操作后"地址为"5""
的存储单元内容变为
555555"5
%
.
*指令""""5555
执行过程!
控制器将程序计数器中的值5""5
作为地址读存储器"读到指令""""5555
"将指令存入指令寄存器"同时"程序计数器值自动增
"
后变为5"""
%
"
控制器分析指令""""5555
"停止指令执行过程%
$"#"'
!
存储程序的本质
通过对计算机工作过程的讨论"可以得出以下存储程序的本质含义%
/&
!!!
"
指令用二进制数表示+
"
完成计算过程所需的指令序列按照执行顺序依次存储在存储器中"存储第一条指令的存储单元地址作为程序计数器初值+
"
控制器以程序计数器的值为存储单元地址开始取指和执行指令过程"直到执行到停机指令+
"
每完成取指过程"程序计数器自动加"
"其值永远为存储下一条指令的存储单元地址+
"
对存储器而言"指令和数据没有任何区别+
"
存储器是随机存储器+
"
控制器为完成指令要求的任务"向运算器!存储器!输入设备和输出设备发出命令"命令这些设备根据指令执行进程各自完成需要承担的功能%
$"$
!
*+
硬件组成和工作原理
FD
是人们常见的计算机"了解FD
硬件组成"不仅可以更好地使用!维护FD
"还可以深入了解计算机组成原理和工作过程%
$"$"!
!
*+
系统
FD
系统如图%0"!
所示"由主机!显示器!键盘和鼠标组成%主机是FD
的核心部件%
图$"!#
!
*+
系统
!"
主机主机中最重要部件是主板"主板上可以插入
中央处理器(
D:(<=,9F=>;:@@)(
*
X()<
"
DFX
*!存储器和多种适配器"每一种适配器用于连接对应的外设%主机中除了主板"还包括硬盘!光驱等外设%
"
*主板主板如图
%0"%
所示"它是一块电路板"上面存在用于插入内存条!
DFX
和适配器的插槽%
DFX
是大规模集成电路"里面包含了实现控制器和运算器功能的全部电路"为了便于理解"可以将
DFX
看作是包含图%0""
中除存储器以外所有电路的集成电路%内存条是作为存储器的设备"适配器用于连接对应的外设%因此"一个插入
DFX
!内存条和若干适配器的主板"及连接在适配器上的外设构成了一个包含冯&诺依曼结构所需的控制器!运算器!存储器!输入设备和输出设备的完整计算机硬件系统%
DFX
和内存条分别如图
%0".
和图%0"-
所示%内存条的选择根据内存容量确定"这里的内存就是前面讨论的存储器"外存指的是硬盘等外部存储设备%
/#
!!!
图$"!$
!
主板
图$"!&
!
+*<
!!!!!
图$"!'
!
内存条
!
*适配器适配器用于连接外设"常见的外设有网络!显示器!音箱等"需要对应的连接网络!显
示器和音箱的适配器"这些适配器也称为网卡(连接网络的适配器*!显卡(连接显示器的适配器*和声卡(连接音箱的适配器*"网卡!显卡和声卡分别如图
%0"$
!图%0"/
和图%0"&
所示%
FD
连接某个外设的前提是已经在主板上插入用于连接该外设的适配器%有些主板本身已经集成了用于连接某些外设的适配器"主板提供用于连接这些外设的专用接口"
这些外设无需通过适配器"而是可以直接连接到主板对应的接口上%如有的主板本身集成了用于连接网络!显示器和音箱等外设的适配器"因此"通过主板上用于连接网络!显示
图$"!(
!
网卡!!!!!
图$"!)
!
显卡
&5
!!!
器和音箱等外设的专用接口直接连接这些外设"主板上无须插入这些外设对应的适配器%
有些外设采用标准接口"如通用串行总线(
X()T:=@,9R:=),9NC@
"
XRN
*接口"而主板本身已经集成了大量的
XRN
接口"这样的外设也无需专用的适配器"直接就可连接到FD
上%
%
*硬盘主机中存在两种类型存储设备"一种是存储器"称为内存"另一种是硬盘"称为外存%
硬盘如图%0"#
所示%存储器只有在加电状态下才能保持存储单元中的内容"一旦断电"
写入存储单元中的数据和指令将不复存在"将这种需要加电维持存储信息的设备称为挥发性设备%硬盘是磁性介质"通过磁介质磁化时不同的极性方向表示二进制数据的
5
和"
"断电后"磁化后的磁介质的极性方向不会改变"因此"硬盘是非挥发性设备"断电后仍然能够保持存储在硬盘中的数据%硬盘对于
FD
是不可或缺的"除非"该FD
无须在本地存储任何文件%主板集成连接硬盘的适配器"提供连接硬盘的专用接口"硬盘可以直接连接到主板上%
图$"!,
!
声卡!!!!!
图$"!-
!
硬盘
.
*光驱光存储介质"如光盘"一是由于便宜"二是容易长期保存"越来越成为人们喜爱的存储
介质%光驱如图%0!5
所示"用于实现光存储介质的读写"有的光驱只能读光存储介质"被称为只读光驱%主板集成连接光驱的适配器"提供连接光驱的专用接口"光驱可以直接连接到主板上%
-
*
XRN
接口通用串行总线(
X()T:=@,9R:=),9NC@
"
XRN
*是一种串口总线标准"
XRN
接口是主机连接符合
XRN
标准的外部设备的接口"所有采用XRN
接口的外设可以直接插入主机XRN
接口"主机XRN
接口支持热拔插功能%图%0!"
所示是一种使用XRN
接口的小型移动存储设备(简称
X
盘*"插入主机XRN
接口后"主机可以像读写硬盘一样读写X
盘%
图$"#.
!
光驱!!!!
图$"#!
!
<
盘
&"
!!!
#"
显示器显示器是
FD
标准的输出设备"用于输出FD
执行程序的结果%目前的显示器可以输出各种媒体信息"如文本!图形!图像和视频等%
$"
键盘和鼠标键盘和鼠标是
FD
标准的输入设备%键盘的作用是输入字符"包括西文字符和通过汉字输入法输入的汉字"键盘和主板集成的键盘适配器能够将通过键盘确定的字符转换成该字符对应的编码"然后将字符对应的编码存入存储器中%鼠标用于控制显示器上光标的移动过程"通过鼠标可以选中图形界面的图标"也可以在显示器上手工绘制各种图形%
显然"能够通过键盘和鼠标输入FD
的媒体信息类型是非常少的"
FD
中丰富的媒体信息类型可以通过多种渠道获得"一是通过光盘和
X
盘复制"二是通过网络下载"三是通过外设输入"输入图像的外设是扫描仪"输入视频的外设是视频采集卡(简称视频卡*%
$"$"#
!
*+
结构
!"
总线结构
!!
DFX
通过总线连接存储器!输入输出(
J(
E
C<
0
LC<
E
C<
"
J
0
L
*接口的结构如图%0!!
所示%总线是用于计算机各个部件之间传输信号的一束导线"根据传输的信号类型"可以将总线分为数据总线!地址总线和控制总线%数据总线用于传输表示数据的信号"如存储单元内容+地址总线用于传输表示地址的信号"如用于选定存储单元的地址+控制总线用于传输控制信号"如控制存储器进行读或写操作的读写控制信号%
DFX
的外部引脚与作为总线的一束导线相连"
DFX
通过外部引脚与总线交换信号"如发送信号到总线"接收总线上的信号等%
图$"##
!
*+
总线结构
图%0!!
所示总线结构中"
DFX
是总线控制器"控制总线的信号传输过程%构成总线的一束导线中导线的数量称为总线宽度"它决定着总线的信号传输能力%
DFX
包含实现控制器和运算器功能所需的全部电路"存储器中存放指令和数据"因
&!
!!!
此"由DFX
反复进行取指和执行指令的过程"直到执行停机指令%取指涉及DFX
从存储器读指令的操作"执行指令过程中涉及
DFX
读写存储器中存储单元内容"
DFX
从输入设备输入数据!从输出设备输出数据的操作%这些操作涉及
DFX
通过总线与存储器!
J
0
L
接口交换信息的过程"这些信息包含地址!数据和控制信息%
#"
存储器读写过程
"
*
DFX
读存储器过程DFX
从存储器的存储单元中读取数据或指令的过程如图%0!%
所示"
DFX
首先通过地址总线给出需要读取的存储单元地址"存储器接收到地址后"选定存储单元%
DFX
随后通过控制总线中的读写控制线给出读信号"存储器接收到读信号后"将选定的存储单元内容发送到数据总线上%
DFX
通过连接数据总线的引脚接收数据总线上的数据"完成从存储器的存储单元中读取数据或指令的过程%图
%0!%
中"
PB/#7
是十六进制表示的存储单元地址"
PB/#
是.
位表示地址的十六进制数"后缀7
用于表示十六进制数%数据""5"555"
是存储在地址为PB/#7
的存储单元中的数据"读操作不会改变存储单元中存储的数据%
!
*
DFX
写存储器过程DFX
将数据写入存储器中存储单元的过程如图%0!.
所示"
DFX
首先通过地址总线给出需要写入数据的存储单元地址"存储器接收到地址后"选定存储单元%
DFX
随后通过数据总线给出写入选定存储单元的数据%最后"
DFX
通过控制总线中的读写控制线给出写信号"存储器接收到写信号后"将数据总线上的数据写入选定的存储单元%图
%0!.
中"
PB/#7
是存储单元地址"数据"5"555""
是DFX
发送到数据总线上的数据"完成写操作后"地址为
PB/#7
的存储单元内容变为"5"555""
%
图$"#$
!
+*<
读存储单元过程!!!
图$"#&
!
+*<
写存储单元过程
%
*对总线的一些说明地址总线宽度决定
DFX
可以读写的不同存储单元的数量"
"$
位地址总线允许DFX
读写!
"$个不同的存储单元"即$.e
个不同的存储单元%
!5
位地址总线允许DFX
读写!
!5个不同的存储单元"即"K
个不同的存储单元%
数据总线宽度决定DFX
一次读写操作可以和存储器交换的二进制数位数%如果数据总线为
&
位"每一次读写操作"
DFX
只能和存储器交换&
位二进制数+如果数据总线为"$
位"每一次读写操作"
DFX
能和存储器交换"$
位二进制数%
存储器完成从接收到地址和读信号"到将地址选定的存储单元内容发送到数据总线
&%
!!!
上这一过程需要时间"这个时间称为存储器的读时间%同样"存储器完成从接收到地址!
数据和写信号"到将数据总线上的数据写入地址选定的存储单元中这一过程也需要时间"
这个时间称为存储器的写时间%存储器读写时间对DFX
读写存储单元的过程有些限制"读存储单元过程中"
DFX
必须在发出地址和读信号后"经过存储器读时间"才能从连接数据总线的引脚上接收数据%写存储单元过程中"必须在发出地址!数据和写信号后"
在存储器写时间内一直通过连接这些总线的引脚维持这些信号%
$"
键盘输入数据至存储单元过程
"
*
J
0
L
接口的作用图
%0!!
中"存储器直接连接在总线上"每一个外设有着与该外设对应的J
0
L
接口"
J
0
L
接口直接连接在总线上"外设与对应的J
0
L
接口相连%为每一个外设设置J
0
L
接口的原因如下%
讨论J
0
L
接口的作用之前"先了解一下现实生活中设置翻译这一职业的原因%假定一个中国人开设的公司中有着多个来自不同国家的雇员"该中国人为了有效管理公司"必须解决与多个来自不同国家的雇员之间的交流问题%一种解决方法如图
%0!-
(
,
*所示"
中国人为了能够与多个来自不同国家的雇员进行交流"需要掌握这些雇员所属国家的语言%这种方法因为两方面的原因而显得不可行%一是雇员是动态的"不断变化的"中国人很难确定下一个雇员所属的国家"因而事先掌握该国的语言+二是随着雇员所属国家的不断增多"中国人也很难能够同时掌握这些国家的语言%因此"提出如图
%0!-
(
8
*所示的第二种解决方法"中国人雇一个外国雇员的同时"再雇一个翻译%翻译具有双重特性"所有翻译面向中国人一面的特性是相同的"都讲中文"不同翻译面向外国雇员一面的特性是不同的"如德语翻译面向德国雇员的一面是讲德语"英语翻译面向英国雇员的一面是讲英语%翻译的设置解决了中国人只需讲中文就能够与多个来自不同国家的雇员进行交流的问题%
图$"#'
!
中国人与多个外国人之间的交流方式
将这一问题延伸到图%0!!
所示的FD
总线结构"外设一是多种多样"且不同的外设需要不同的信号进行控制%二是随着
FD
应用的普及"有更多的外设需要和FD
连接%这就导致
DFX
无法提供控制所有外设需要的信号类型%解决这一问题的方法是设置J
0
L
接口"如图%0!$
所示%
J
0
L
接口与翻译相似"具有双重特性"所有J
0
L
接口与DFX
连接
&.
!!!
的一面是相同的"
DFX
可以用统一的信号对所有J
0
L
接口进行控制%不同J
0
L
接口连接外设的一面是不同的"如显示器对应的
J
0
L
接口提供显示器显示图像所需的视频和帧同步!行同步信号等"打印机对应的
J
0
L
接口提供打印需要的字符编码和走纸等信号%接口的设置实现了
DFX
用统一的信号控制不同的外设的功能%
FD
中某个外设对应的J
0
L
接口就是该外设对应的适配器"也可简称#卡$"显卡就是连接显示器的J
0
L
接口部件%
图$"#(
!
/
#
D
接口的作用
可以说总线和接口使得DFX
可以与任何外设连接"正是多种多样外设的产生并连接到
FD
上"使得FD
的应用领域不断增加%
FD
成为人们解决生产!生活中各种问题的有力工具%
!
*键盘输入数据过程(
"
*键盘接口对于
DFX
"键盘接口中的数据寄存器和状态寄存器等同于两个分别分配地址$57
和$"7
的存储单元"
DFX
可以通过对这两个地址分别为$57
和$"7
的存储单元的读操作读取数据寄存器和状态寄存器中的内容%键盘接口如图
%0!/
所示%
图$"#)
!
键盘输入字符4
的过程
键盘按键后"将该键对应的BRDJJ
码写入键盘接口中的数据寄存器"同时"将状态寄存器中的最低位置
"
%
DFX
读取数据寄存器中内容时"将状态寄存器中的最低位置5
%
因此"判别键盘是否有新的按键动作的依据是状态寄存器中的最低位是否为"
%
&-
!!!
(
!
*读取键盘按键BRDJJ
码过程DFX
读取键盘按键对应的BRDJJ
码的过程如图%0!&
所示%
DFX
首先读取状态寄存器的值"然后判别状态寄存器的最低位是否为
"
%如果状态寄存器的最低位为"
"读取数据寄存器的值"该读操作同时将状态寄存器的最低位置
5
%如果状态寄存器的最低位为
5
"表明键盘没有新的按键动作%
DFX
与读取地址为$"7
的存储单元内容相同的方式读取键盘状态寄存器的值"
DFX
判别状态寄存器值最低位是否为"
的运算过程如图%0!#
所示%与操作是逻辑运算"每一位二进制数独立运算%与操作运算规则如下'
5h565
!
5h"65
!
"h565
!
"h"6"
%
其中h
是与操作符%
&
位二进制数]]]]]]]"
(
]
表示任意二进制数*和&
位二进制数5555555"
的与运算结果为5555555"
(非零*"
&
位二进制数]]]]]]]5
(
]
表示任意二进制数*和
&
位二进制数5555555"
的与运算结果为55555555
"因此"用&
位二进制数5555555"
和状态寄存器中的值进行与运算"可以根据运算结果判别状态寄存器的最低位是否为
"
%
图$"#,
!
+*<
读取按键49+//
码过程!!!
图$"#-
!
+*<
判别最低位是否为!
的过程
在确定状态寄存器最低位为"
的情况下"
DFX
可以通过读取地址为$57
的数据寄存器得到按键的
BRDJJ
码"
DFX
读取数据寄存器值的同时将状态寄存器的最低位置5
%
图%0!/
中假定按键是字符B
键"数据寄存器中是字符B
对应的BRDJJ
码5"55555"
(
."7
*%需要强调的是"
DFX
读取数据寄存器的操作不会改变数据寄存器中的值%在对键盘进行新的按键动作前"数据寄存器中的值一直是
."7
%
从按下键盘中字符B
键"到DFX
读取字符B
对应的BRDJJ
码的过程如图%0!/
所示%
%
*指令执行过程和总线操作假定存储单元地址是
.
位二进制数"程序计数器的初值是55""
"地址为55""
的存储单元存放指令
"555"55"
"该指令的功能是将地址为"55"
的存储单元中的内容存放到累加器中"程序计数器!指令寄存器和累加器都在
DFX
中%
当DFX
启动指令执行过程时"首先开始取指过程"取指过程是一个存储器读操作过程"如图
%0%5
所示%即以程序计数器中的值作为地址"读取该地址选定的存储单元内容"
取指过程读到的存储单元内容存放到DFX
内的指令寄存器中%
DFX
分析指令"确定该指令的功能是读取地址为"55"
的存储单元内容"并将读取到的存储单元内容存放到
DFX
中的累加器中%因此"
DFX
开始第二次存储器读操作过程"