计组第一章知识点
计组即将结课。该开始复习了。打算把知识点写一下,加深一下对知识点的理解。
冯诺伊曼计算机的特点
-
计算机由计算器、存储器、控制器、输入设备和输出设备五大部件组成。
各部件功能如下:
运算器用来完成算数运算和逻辑运算,并将运算的中间结果暂存在运算器内。
存储器用来存放数据和程序。
控制器用来控制、指挥程序和数据的输入、运行以及处理运算运算结果。
输入设备将人们熟悉的信息形式转化为机器能够识别的信息形式,常见有键盘、鼠标
输出设备可以将机器运算结果转化为人们熟悉的信息形式,比如打印机输出、显示器输出等。
-
指令和数据以同等地位存放于存储器内,并可以按地址访问。
按地址访问存储器,简称访存。存储器的这种工作方式对计算机的组成和操作十分有利。
比如当运行程序时,我们只需要给出该程序在主存中的首地址,然后采用PC+1的方式来自动形成下一条指令所在存储单元的地址,机器可以自动完成整个程序的操作。
同时,当我们需要反复调用某条数据或者指令时,只需要指出相应的单元地址号即可,而不必占用更多的存储单元重复存放同一条数据或者指令,提升了存储空间的效率。
此外,由于指令和数据都是由存储单元地址号来反映,所以取一条指令和取一条数据的操作完全可以视为相同的,这样就可以 用一套控制线路来完成截然不同的操作。
-
指令和数据都可以用二进制数表示。
-
指令由操作码和地址码组成,操作码用来表示操作的性质,地址码表示操作数在存储器中的位置。
-
指令在存储器内按顺序存放。通常,指令时顺序执行的,在特定条件下,可根据运算结果和根据设定的条件改变执行顺序【比如JUMP命令和中断?】
-
机器以运算器为中心,输入输出设备与存储器之间的数据传送通过运算器完成。
常见的英文缩写
-
CPU (Central Processing Unit)中央处理器。它由运算器和控制器构成。
运算器里的主要部件是算术逻辑单元(Arithmetic Logic Unit, ALU)【算术运算和逻辑运算不一样,区别应该是有无符号】
控制器里的主要部件是控制单元(Control Unit, CU),用来解释存储器的指令【这不是指存储器向控制器发出了指令,而是指控制单元去解析储存在存储器中的指令】,并发出各种操作命令来执行指令。
由于运算器和控制器在逻辑关系和电路结构上联系十分紧密,这两个部件往往集成在同一芯片上,因此,通常将它们合起来统称中央处理器 CPU。
-
I/O设备 (Input/Output Equipment) 。它时输入设备和输出设备的简称。
-
MM(Main Memory)主存储器。
现代计算器可认为由三大部分组成 CPU、I/O设备以及主存储器组成。
同时CPU与主存储器合起来又可称为主机。I/O设备又可称为外部设备【辅存/外存 算在I/O设备中】
-
ACC(Accumulator)累加器。
-
MQ(Multiplier-Quotient Register)乘商寄存器。
-
X 操作数寄存器。
ACC、MQ、X都属于寄存器,用来存放中间结果。
这三个寄存器在完成不同运算时,所存放的操作数也各不相同。
加法 减法 乘法 除法 ACC 被加数及和 被减数及差 乘积高位 被除数及余数 MQ 乘数及乘积低位 商 X 加数 减数 被乘数 除数 ACC主要对应左操作数(加法中的被加数、减法中的被减数、除法中的被除数),还会存放结果(加法中的和、减法中的差、乘法中的乘积高位、除法中的余数)。
X主要对应右操作数(加法中的加数、减法中的减数、除法中的除数)
MQ如其名,乘商寄存器,它主要存储乘法中的乘数和除法中的商。
我们应该可以很容易记住加法、减法运算中各寄存器存储的值。除法也比较容易记,因为它的ACC是左操作数,X是右操作数,和加减法保持一致,同时因为MQ存储商,所以余数会被保存在ACC中。
乘法运算中是比较特别的,它的左操作数存在X里面,右操作数是乘数,在MQ中,ACC保存了结果乘积的高位,乘积低位在MQ中。
-
PC(Program Counter)程序计数器
-
IR(Instruction Register)指令寄存器
PC、IR加上之前说的CU构成了控制器。
我们知道完成一条指令需要分为 取指、分析和执行三个阶段,而控制器便是完成这三个阶段的关键。
PC存放着当前欲执行指令的地址,它与主存之间的MAR有一条直接通路,具有自动加1的功能,即可自动形成下一跳指令的地址
IR用来存放当前指令,IR的内容来自主存的MDR。IR中的操作码送至CU,记作
OP(IR)->CU
,用来分析指令。IR中的地址码,作为操作数的地址送至存储器的MAR,记作Ad(IR)->MAR
。CU用来分析当前指令所需完成的操作,并发出各种微操作指令序列,以控制所有被控对象。
-
MAR(Memory Address Register)存储器地址寄存器,用来存放欲访问的存储单元地址,其位数对应存储单元的位数。
-
MDR(Memory Data Register)是存储器数据寄存器,用来存放从存储体中取出的代码或者准备往存储器中存储的代码。其位数与存储字长相等。
MAR、MDR与存储体M构成了主存储器。它们实现了按地址访问。
早期计算机的存储字长一般与机器的指令字长、数据字长相等,所以访问一次主存便可以取得一条指令或者一个数据。
但是随着计算机的发展,往往要求指令字长可变、数据字长可变,为了适应这种可变性。其长度不由存储字长来确定,而是根据字节的个数来表示。这时,存储字长、指令字长、数据字长三者可以各不相同,但是它们都是字节的整数倍。
这里再要区分一下机器字长和存储字长。
存储字长其实就是MDR的位数。
而机器字长是指CPU一次能够处理数据的位数,这通常由CPU的寄存器位数有关。两者是不同的。
-
MIPS(Million Instructions Per Second)百万条指令每秒
-
CPI(Cycle Per Instruction)执行一条指令所需的时钟周期
-
FLOPS(Floating Point Operation Per Second)浮点运算次数每秒
MIPS、CPI和FLOPS都是用来测算计算机运算速度的。MIPS为普遍使用的方式。
存储容量
-
存储器的容量包括主存容量和辅存容量。
-
主存容量指主存中存放二进制代码的总位数。存储容量=存储单元个数*存储字长
这里要区分位数和"可能性"。一位有两种可能性,分别是0和1。
存储单元的个数,可以由MAR的位数计算出来,计算的时候用的是“可能性的”概念,比如16位的MAR,每一位有两种可能性,一共有 2 16 2^{16} 216种可能性,每种可能性对应一个存储单元,这实际上就是所谓的访存吧,根据MAR的值,来找到具体的存储单元进行操作。
存储字长就是MDR的个数,比如MDR为32位。那么结合之前的存储单元的个数。存储容量就为 2 16 ∗ 32 = 2 21 = 2 M 2^{16}*32=2^{21}=2 M 216∗32=221=2M位
现代计算机通常用字节数来描述容量的大小,转换原则是
一个字节为8位二进制代码
。所以上述容量也可以表示为 2 18 B 2^{18} B 218B或者 256 K B 256KB 256KB -
辅存容量通常用字节数表示。比如硬盘的容量为 512 G B 512GB 512GB
指令和数据都存在与存储器中,计算机如何区分它们?
- 有两种方式来区分
- 通过不同的时间段来区分指令和数据,即在取指令阶段取出的为指令,在执行指令阶段取出的为数据
- 通过地址来源来区分,由PC提供存储单元地址,取出的是指令,由指令地址码部分提供存储单元地址,取出的是操作数。