一次函数计算的工作过程及主机的硬件:主存、运算器、控制器、


主存储器的基本构成

类比:菜鸟驿站

情景再现

  • 我们(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的

指令

完成一条指令:

  1. 取指令 PC
  2. 分析指令 IR【以上1、2可以定为一个取指环节】
  3. 执行指令 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、取数

  1. 初:(PC)=0,指向第0条指令的存储地址
  2. (PC) → MAR,导致(MAR)=0
  3. M(MAR)→ MDR,导致(MDR)=000001 0000000101
  4. (MDR)→IR,导致(IR)=000001 0000000101
  5. OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是”取数“指令
  6. Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=5
  7. M(MAR)→MDR,导致(MDR)=0000000000000010=2
  8. (MDR)-→>ACC,导致(ACC)=0000000000000010=2

2、取乘法指令

  1. 上一条指令取指后PC自动+1,(PC)=1;执行后,(ACC)=2
  2. (PC)→MAR,导致(MAR)=1
  3. M(MAR)→MDR,导致(MDR)=000100 0000000110
  4. (MDR)→IR,导致(IR) = 000100 0000000110
  5. OP(IR)→Cu,指令的操作码送到CU,CU分析后得知,这是“乘法”指令
  6. Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=6
  7. M(MAR)→MDR,导致(MDR)=0000000000000011=3
  8. (MDR)→MQ,导致(MQ)=0000000000000011=3
  9. (ACC)→x,导致 (X)=2
  10. (MQ)*(X)→ACC,由ALU实现乘法运算,导致(ACC)=6,如果乘积太大,则需要MQ辅助存储

3、执行加法指令

  1. 上一条指令取指后(PC)=2,执行后,(ACC)=6
  2. (PC)→MAR,导致(MAR)=2
  3. M(MAR)->MDR,导致(MDR)= 000011 0000000111
  4. (MDR)→IR,导致(IR)= 000011 0000000111
  5. OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是“加法”指令
  6. Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=7
  7. M(MAR)→MDR,导致(MDR)=0000000000000001=1
  8. (MDR)→x,导致(X)=0000000000000001=1
  9. (ACC)+(X)→ACC,导致(ACC)=7,由ALU实现加法运算

4、存储数据

  1. 上一条指令取指后(PC)=3,执行后,(ACC)=7
  2. (PC)-→>MAR,导致(MAR)=3
  3. M(MAR)→>MDR,导致(MDR)=000010 0000001000
  4. (MDR)→lR,导致(IR)= 000010 0000001000
  5. OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是“存数”指令
  6. Ad(IR)→>MAR,指令的地址码送到MAR,导致(MAR)=8
  7. (ACC)->MDR,导致(MDR)=7
  8. (MDR)→地址为8的存储单元,导致y=7

5、停机指令

  1. 上一条指令取指后(PC)=4
  2. (PC)→>MAR,导致(MAR)=3
  3. M(MAR)→>MDR,导致(MDR)=000110 0000000000
  4. (MDR)>IR,导致(IR)= 000110 0000000000
  5. OP(IR)→CU,指令的操作码送到cu,CU分析后得知,这是“停机”指令
  6. 随后利用终端机制通知操作系统终止该进程。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM