以下内容均来自计算机组成原理(唐朔飞),是哈尔滨工业大学刘宏伟教授讲解,
B站视频地址
1.计算器由五大部件组成
1.冯诺依曼计算机硬件框图
实线表示数据通路,虚线表示控制和状态反馈
此结构计算器会十分繁忙,计算器是系统瓶颈。
.指令和数据以同等地位存于存储器,可按地址寻访
.指令和数据用二进制表示
.指令由操作码和地址码组成
.存储程序
.以运算器为中心
2.以存储器为中心的计算机硬件框图
3.现代计算机硬件框图
-
系统复杂性管理的方法(3Y)
-层次化(Hierachy):将被设计的系统划分为多个模块或子模块
-模块化(Modularity):有明确定义(Well-defined)的功能和接口
-规则化(regularity):模块更容易被重用问题:一个现实中的问题,如何用计算机来解决? 问题:是不是所有问题都可以用计算机的方法来解决? 可计算理论是研究计算可行性和函数算法的理论,又称为算法理论。可计算性通常指一类问题是否可以被 计算机来解决(比如煎鸡蛋是没有办法来计算的,不可计算问题中比较著名的是图灵机停机问题) 假设我们面对的是一个可以有计算机解决的问题,如何用计算机去解决这个问题呢?
计算机的工作步骤
-
上机前的准备
- 建立数学模型
- 确定计算方法
- 编制解题程序
程序—运算的全部步骤
指令—每一个步骤 - 编程举例
计算 a x 2 x^2 x2+b x x x+c = (a x x x+b)x+c
取 x x x到运算器中 取 x x x到运算器中
乘以 x x x在运算器中 乘以a在运算器中
乘以a在运算器中 加b在运算器中
存a x 2 x^2 x2到存储器中 乘以 x x x在运算器中
取b到运算器中 加c到运算器中
乘以 x x x在运算器中 5个指令执行结束
加a x 2 x^2 x2到运算器中
加c到运算器中
8个指令执行结束
指令格式举例
指令包含操作码和地址码
取数 α \alpha α [ α \alpha α] → \rightarrow →ACC(累加器,默认的,不需要指令中指出)
000001 0000001000(假设指令一共16位,其中6位是操作码部分,指明了要做什么操作,000001表示取数;10位是内存地址部分,0000001000表示把存放在内存单元8位置的数据取出来,放到ACC中)
存数 β \beta β [ACC] → \rightarrow → β \beta β(将数据从ACC中存放到内存单元 β \beta β中,指令的二进制,同样是6位操作码,10位的地址码)
加 γ \gamma γ ,假设另外一个操作数默认保存在了ACC里面,加法结果也默认保存在ACC
[ACC]+ γ \gamma γ → \rightarrow →ACC
乘 δ \delta δ [ACC] × \times × δ \delta δ → \rightarrow →ACC(考虑溢出,16位,乘积有可能会超过16位,大于16位的没地方存储)
打印 σ \sigma σ [ σ \sigma σ] → \rightarrow →打印机
停机计算a x 2 x^2 x2+b x x x+c程序的清单
指令和数据存于主存单元的地址 | 指令 | 注释 | |
---|---|---|---|
操作码 | 地址码 | ||
0 | 000001 | 0000001000 | 取数X至ACC |
1 | 000100 | 0000001001 | 乘a得ax,存至ACC中 |
2 | 000011 | 0000001010 | 加b得ax+b,存于ACC中 |
3 | 000100 | 0000001000 | 乘x得到(ax+b)x,存于ACC中 |
4 | 000011 | 0000001011 | 加c得到ax^2+bx+c,存于ACC中 |
5 | 000010 | 0000001100 | 将ax^2+bx+c,存于主存单元 |
6 | 000101 | 0000001100 | 打印 |
7 | 0001100 | 停机 | |
8 | x | 原始数据x | |
9 | x | 原始数据a | |
10 | x | 原始数据b | |
11 | c | 原始数据c | |
12 | 存放结果 |
此表中的地址位从8开始,都是存放的原始数据,前面的是存放操作指令和原始数据的存储位置(操作码是有固定规范的。)
-
指令和数据都是保存在存储器中的
-
存储器结构?
(1)存储器的基本组成 -
如果访问?
-
每次访问获得的数据位数是多少呢?
存储体—存储单元(电子设备)— 存储元件(0/1)
存储体有若干个存储单元构成,刚才表格中的指令(操作码和地址码)就存储在存储单元中
存储单元由多个存储元件构成。
存储元件存放的是0或者1。
举例:存储体相当于大楼,存储单元相当于房间,存储元件相当于床位(有人/无人,表示0/1)存储单元存放一串二进制代码(比如存储单元由6个存储元件,那么存储单元可以存放6位二进制数字)
存储字 存储单元中二进制代码的组合(比如存放的000100,就是存储字)
存储字长 存储单元中二进制代码的位数(比如存放的000100 ,字长是6)每个存储单元赋予一个地址,一个存储单元中存放一个存储字,然后就可以通过地址对存储单元进行访问。
存储单元是按地址寻访,CPU想取数,需要给出存储单元的地址MAR(Memory Address Register)是寄存器,名字是存储器地址寄存器(反映存储单元的个数)
MDR保存了要送入CPU或者刚从存储体中取出的,存储器数据寄存器(反应存储字长)
设MAR =4位,二进制4位,存储单元个数16个,MDR=8位,表明存储字的字长是8位。
对存储单元的读和写,需要用到MAR和MDR
运算器的基本组成及操作过程
ACC 数字寄存器 保存运算结果,乘法超出部分会保存到MQ中,Accumulator,累加器,运算器中运算前存放操作数、运算后存放运算结果的寄存器;
ALU 算术逻辑单元(arithmetic and logic unit) 是能实现多组算术运算和逻辑运算的组合逻辑电路
MQ 乘商寄存器,Multiple—Quotient Register,乘商寄存器主要负责数据的乘法与除法运算并可保存运算结果,是运算器的基本组成部分,是运算器三个基本寄存器之一。
X 此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放操作数;
ACC | MQ | X | |
加法 | 被加数 | 加数 | |
和 | |||
减法 | 被减数 | 减数 | |
差 | |||
乘法 | 乘积高位 | 乘数 | 被乘数 |
乘积地位 | |||
除法 | 被除数 | 商 | 除数 |
余数 |
运算器的结构
运算器的功能,工作原理
1.加法操作过程
指令 加 M
初态 ACC 存放 被加数
【M】
→
\rightarrow
→ X M是加数在内存单元中的地址,把加数从内存单元中取出保存到X寄存器
【ACC】+【X】 → \rightarrow → ACC 加法操作通过ALU执行操作,然后存放的ACC中
2.减法操作
被减法保存在ACC中,减数保存在X,有ALU完成减法操作,存放到ACC
指令 减 M
初态 ACC 存放 被减数
【M】
→
\rightarrow
→ X M是减数在内存单元中的地址,把减数从内存单元中取出保存到X寄存器
【ACC】-【X】
→
\rightarrow
→ ACC 加法操作通过ALU执行操作,然后存放的ACC中
3.乘法操作
指令 乘 M
初始状态 ACC 被乘数
【M】
→
\rightarrow
→ MQ(将M中存放数据,取出存放到MQ中,存放的是乘数)
【ACC】
→
\rightarrow
→ X (将被乘数从ACC中取出,存放到X寄存器)
0
→
\rightarrow
→ACC (把ACC清0)
【X】
×
\times
× 【MQ】
→
\rightarrow
→ACC\MQ(ACC存放高位,MQ存放低位)
4.除法
指令 除 M
被除数隐含的保存在ACC(在除法操作之前,先执行一条指令,将被除数放到ACC中)
初态 ACC 被除数
【M】
→
\rightarrow
→X
【ACC】
÷
\div
÷【X】
→
\rightarrow
→MQ
余数在ACC中
控制器的功能,工作原理
解释指令
保证指令的按序执行
完
成
一
条
指
令
{
取
指
令
P
C
分
析
指
令
I
R
执
行
指
令
C
U
完成一条指令\begin{cases} 取指令 & PC \\ 分析指令 & IR \\ 执行指令 & CU \end{cases}
完成一条指令⎩⎪⎨⎪⎧取指令分析指令执行指令PCIRCU
PC(Program Counter)存放当前欲执行指令的地址,具有计数功能(PC+1) → \rightarrow →PC,至于加几跟具体的结构有关
IR(Instruction register)指令寄存器的缩写,存放当前欲执行的指令
CU(Control Unit) 控制单元
主机完成一条指令的过程
以取数指令为例
1.从PC中取出指令的地址码送入到MAR
2.从MAR中找到指令在存储体中存储的位置
3.将指令从存储体中放入到MDR
4.指令从MDR送入的IR,
5.IR送入到CU,进行指令分析
6.将数据的地址码从IR中送入到MAR
7.从MAR中找到数据在存储体中位置
8.将数据送入到MDR中
9.将数据从MDR存放到ACC中