主存储器的基本构成
类比:菜鸟驿站
情景再现
- 我们(CPU)拿取件号(地址)——给MAR(店员)
- 店员把货架上的目标包裹(数据)——放到柜台(MDR)——我最后从柜台(MDR)取走包裹。
当然,数据可以存入也可以读出,我们可以取出包裹,也可以存放包裹(临时),只要告诉MAR(店员)即可。
补充
- 虽然是说逻辑上MAR、MDR属于主存
- 但是现在的计算机通常把MAR、MDR也集成在CPU内
存储体内部相关概念
- 存储单元:存放一串二进制代码的一个”小格子“、”小区域“
- 存储字(word):存储单元中存放的这一串二进制代码
- 存储字长:存储单元中存放的二进制代码的位数
- 存储元:即存储二进制的电子元件(电容,因为电容可以存储电荷),每个存储元可存1bit
比如要在地址 2 存储数据
-
将要存入的目标地址”2“ 给到MAR
- MAR的位数反映了存储单元的个数;
- 就像在店员的认知内,这个驿站有多大。
-
将要存放的存储字给到MDR——所以,MDR 位数 = 存储字长——柜台的大小,这里能放多大的包裹
例:存储体有多大?
-
MAR = 4bit —— 总共有2^4 个存储单元
-
MDR = 16bit —— 每个存储单元可存放16bit
B与b
易混淆:1个字节(Byte) = 8bit 1B=1个字节,1b=1个bit
-
商家广告:100Mbps的宽带
-
但它是小写的b,所以实际上是12.5MB/s
运算器的基本组成
运算器:用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)
- ACC:累加器,用于存放操作数,或运算结果。
- MQ:乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
- X:通用的操作数寄存器,用于存放操作数
- ALU:算术逻辑单元,通过内部复杂的电路实现算数运算、逻辑运算
- 各自存放内容:
控制器的基本组成
- CU(Control Unit):控制单元,分析指令,给出控制信号IR:指令寄存器,存放当前执行的指令
- PC(Program Counter):程序计数器,存放下一条指令地址,有自动加1功能
- IR(lnstruction Register):指令寄存器
-
控制器是霸道总裁
-
但是 CU 控制单元是霸道总裁的老婆
-
霸道总裁是个耙耳朵,自然是要听CU的
指令
完成一条指令:
- 取指令 PC
- 分析指令 IR【以上1、2可以定为一个取指环节】
- 执行指令 CU
计算机工作过程
各寄存器的注释:
- M:主存中某存储单元
- ACC、MQ、X、MAR、MDR...:相应寄存器
- M(MAR):取存储单元中的数据
- (ACC):取相应寄存器中的数据
- OP(IR):取操作码
- Ad(IR):取地址码
- |||||||||||||
- 每一个存储单元是16bit的存储字长
- 只不过执行的时候,CPU会把它拆解成两部分、操作码、地址码
- 每一次的指令执行过程都分为三个阶段:取指令、分析指令、解析指令
CPU区分指令和数据的依据:指令周期的不同阶段
在取指令的阶段,MDR的内容一定是给IR
但是在执行阶段,CU是来决定MDR的数据给ACC、MQ或者是X
例子
int a=2,b=3,c=1,y=0;
void main(){
y=a*b+c;
}//化成如下机器语言
1、取数
- 初:(PC)=0,指向第0条指令的存储地址
- (PC) → MAR,导致(MAR)=0
- M(MAR)→ MDR,导致(MDR)=000001 0000000101
- (MDR)→IR,导致(IR)=000001 0000000101
- OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是”取数“指令
- Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=5
- M(MAR)→MDR,导致(MDR)=0000000000000010=2
- (MDR)-→>ACC,导致(ACC)=0000000000000010=2
2、取乘法指令
- 上一条指令取指后PC自动+1,(PC)=1;执行后,(ACC)=2
- (PC)→MAR,导致(MAR)=1
- M(MAR)→MDR,导致(MDR)=000100 0000000110
- (MDR)→IR,导致(IR) = 000100 0000000110
- OP(IR)→Cu,指令的操作码送到CU,CU分析后得知,这是“乘法”指令
- Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=6
- M(MAR)→MDR,导致(MDR)=0000000000000011=3
- (MDR)→MQ,导致(MQ)=0000000000000011=3
- (ACC)→x,导致 (X)=2
- (MQ)*(X)→ACC,由ALU实现乘法运算,导致(ACC)=6,如果乘积太大,则需要MQ辅助存储
3、执行加法指令
- 上一条指令取指后(PC)=2,执行后,(ACC)=6
- (PC)→MAR,导致(MAR)=2
- M(MAR)->MDR,导致(MDR)= 000011 0000000111
- (MDR)→IR,导致(IR)= 000011 0000000111
- OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是“加法”指令
- Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=7
- M(MAR)→MDR,导致(MDR)=0000000000000001=1
- (MDR)→x,导致(X)=0000000000000001=1
- (ACC)+(X)→ACC,导致(ACC)=7,由ALU实现加法运算
4、存储数据
- 上一条指令取指后(PC)=3,执行后,(ACC)=7
- (PC)-→>MAR,导致(MAR)=3
- M(MAR)→>MDR,导致(MDR)=000010 0000001000
- (MDR)→lR,导致(IR)= 000010 0000001000
- OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是“存数”指令
- Ad(IR)→>MAR,指令的地址码送到MAR,导致(MAR)=8
- (ACC)->MDR,导致(MDR)=7
- (MDR)→地址为8的存储单元,导致y=7
5、停机指令
- 上一条指令取指后(PC)=4
- (PC)→>MAR,导致(MAR)=3
- M(MAR)→>MDR,导致(MDR)=000110 0000000000
- (MDR)>IR,导致(IR)= 000110 0000000000
- OP(IR)→CU,指令的操作码送到cu,CU分析后得知,这是“停机”指令
- 随后利用终端机制通知操作系统终止该进程。