计算机的硬件工作原理(图片部分资源摘自王道考研资料)

一、现代计算机的组成

 

此处主存和辅存可以理解为,内存和外存,内存的特点是读取速度快但是不利于保存大量数据,外存的特点 是读取速度慢,但是可以存储大量数据

计算机在开机时不会读取硬盘上的所有数据,开机时先读取的是c盘的数据(系统装在c盘),这样可以实现计算机的开机速度快

当需要有读取的文件时,再在内存中开辟一块空间读取其他地址的数据

二、计算机硬件的工作方式

 

 

 

 

 

 

 

 

 

 

 

 

* Y=a×b+b,这是高级语言程序员看到的一个视角。但事实上CPU不可能一次性完成这样的一个复杂运算,它只能先进行乘法,然后再进行加法,这样的两大步骤,程序在经过编译等连续一系列的骚操作之后,可以把这个高级语言翻译成机器能读得懂的机器语言,同时会把这段程序装入储存
1. 定义abcd4个变量
1. 这个变量存放在地址为5的这个存储单元中,主存中以二进制的形式来存放
1. b存放在6
1. c存放在7
1. 最后计算的Y,是存放在8这个存储单元中
- 每一条指令会分为操作码和地址码,这样的两个部分
- 初:(PC)=0,指向第一条指令的存储地址
    * 程序运行之前PC会指向0这个位置,把存放在这一位置的条指令取出来执行,寄存器的名字后面打一个括号指的是这个寄存器里边的内容
- 1:(PC)->MAR,导致(MAR)=0
    * PC存放的内容需要通过地址总线把它传送到mar这个地址寄存器当中,导致mar这个寄存器的值变为了0
- 3:M(MAR)->MDR,导致(MDR)=000001 0000000101 
    * 接下来要访问的是0号地址所对应的这一串数据,同时控制器会通过控制总线告诉主存储器,这次要进行的是读操作,接下来主存储器会根据mar记录的这个地址信息,去存储体里边找出0号地址所对应的二进制数据,并且把这些二进制数据放到mdr也就是这个数据寄存器当中,这就导致了mdr这个寄存器当中,现在存放的就是想要读取的第1条指令,一个M表示的是memory,也就是主存储器
- 4:(MDR)->IR,导致(IR)=000001 0000000101 
    * 现在CPU要的数据已经放到mdr这计算器当中了,要取走的数据是一条指令,所以这条指令也会通过数据总线把它放到ir,也就是指令寄存器当中,这就导致控制器的ir这个计算器里边已经存放了此次要执行的指令
- 5:OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是“取数”指令
    * 这条指令的前边6个比特是操作码,这6个比特会被送到CU控制单元里,cu会分析这个操作,就知道0000.它对应的是一条取数的指令,所以接下来要把这个地址吗所指明的内存单元里的这个数据取出来,并且放到ACC这个计算器当中,这是取数指令要做的事情
- 6:Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=5 
    * 要读取储存的这个地址的信息,于是就需要把这个地址码放到储存的MAR当中,这就导致此时MAR是等于5,
- 8:M(MAR)->MDR,导致(MDR)=0000000000000010=2 
    * 主存储器根据mar指明的这个地址,去存储体当中找出5号单元的这些数据,并且把这些数据放到MDR当中,
- 9:(MDR)->ACC,导致(ACC)=0000000000000010=2
    * a的值是2好最后再控制单元的指挥下,mdr里的数据会被传送到ACC也就累加寄存器当中,到此完成了一个取数的指令,最终导致a这个变量的值已经被我们放到ACC这个计算器当中了
- 上一条指令取指后PC自动+1,(PC)=1;执行后,(ACC)=2
 * 之前这条指令执行之后导致的效果就是PC此时等于1,然后ACC=2也就是等于a的值
- 1:(PC)->MAR,导致(MAR)=1
- 3:M(MAR)->MDR,导致(MDR)=000100 0000000110
- 4:(MDR)->IR,导致(IR)= 000100 0000000110
- 5:OP(IR)->CU,指令的操作码送到CU, CU分析后得知,这是“乘法”指令 
    * 根据程序计数器PC所指向的位置取得第2条指令,取指令的过程和之前是类似的,通过这样的4个步骤把第2条指令放到IR寄存器当中,那取完指令之后就需要分析指定那和之前一样,会把操作码这个部分送到CU控制单元,然后经过CU分析之后他可以知道000100这个操作码对应的是一个乘法操作,所以这是一条乘法指令,因此接下来CU会指挥其他部件来协调的完成这个乘法操作
- 6:Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=6 
    * 程序Y=a×b+C,现在这一步,要完成的是a×b的操作,而a这个变量之前已经被送到ACC这个计算器里面了,所以现在这一条乘法指令的地址码指明的是另一个乘数,b的存放位置,那b存放在6这个位置,所以这一条指定的地址码会被送到MAR当中指明,要取出的是6号存储单元里边的数据,
- 8:M(MAR)->MDR,导致(MDR)=0000000000000011=3 
    * 接下来储存会根据MAR所指明的这个地址取出相应的这个数据,就把B这个变量的值放到了MDR当中,
- 9:(MDR)->MQ,导致(MQ)=0000000000000011=3
    * 接下来b的值会从MDR再通过数据总线送到MQ也就是乘商寄存器当中,所以现在B的值已经放到MQ里面了
- 10:(ACC)->X,导致(X)=2 
    * 接下来还需要把a的值先放到通用寄存器x当中,当这个CPU执行乘法操作的时候,它会把被乘数放到X这个通用寄存器里边,
- 11:(MQ)*(X)àACC,由ALU实现乘法运算,导致(ACC)=6,如果乘积太大,则需要MQ辅助存储
    * 然后把乘数放到MQ这个乘商寄存器里边,接下来CU会通过控制线告诉ALU算术逻辑单元,让它进行乘法运算,ALU会把X和mq里边存储的这两个数把它们进行一个相乘的操作,然后把最终乘得的结果放到ACC里边,那这个操作导致ACC里面得到了a,乘以B的值,2*3得6

    * 那大家会发现和前边那一条指令相比,其实第1步到第5步这几个步骤每一步要做的事情都是一模一样的,只有当CU控制单元分析出这一条指令是乘法指令的时候,接下来的操作就会产生一些区别,另外和之前说的一样,当取指令结束之后,PC的值也会自动加一

    * 上一条指令取指后 (PC)=3,执行后,(ACC)=7
- 1:(PC)->MAR,导致(MAR)=3
- 3:M(MAR)->MDR,导致(MDR)=000010 0000001000 
- 4:(MDR)àIR,导致(IR)= 000010 0000001000 
- 5:OP(IR)->CU,指令的操作码送到CU,CU分析后得知,这是“存数”指令 
- 6:Ad(IR)->MAR,指令的地址码送到MAR,导致(MAR)=8 
- 7:(ACC)->MDR,导致(MDR)=7
- 9:(MDR)->地址为8的存储单元,导致y=7
  * 就是PC指向了2,也就指向下一条要执行的指令,ACC里边此时存放了上一个运算的结果,也就是a×b的值a×b等于6,接下来执行2这个地址存放了这条指令,那前边的几个步骤都是一样的,通过5个步骤可以完成取指令和分析指令的操作,那CU发现这一次要执行的操作码应该是000011这个操作嘛,对应的是一个加法操作,所以这是一条加法指令,那接下来CU会根据加法指令的这个执行步骤来指挥着其他部件协调工作好,那这次要计算的是a×B+C而a×B的结果,我们是已经存放在ACC当中,所以这个加法指定的地址码指明的是C这个变量它的存放地址,那C是存放在7这个位置了,刚好把这个二进制数转换成十进制就是7,因此接下来要取出7这个地址所存放的数据,那么就需要把这个地址码把它放到MAR地址寄存器当中,接下来组成根据MAR指明的地址取出相应的这个数据,也就把C的值放到了MDR当中,让接下来这一步会把MDR的值再传送到通用计算机X当中,也就是说当我们进行加法运算的时候,ACC里边会先存入被加数,然后通用计算机X当中会存放加速,也就是C的值,接下来控制单元会向ALU发送一个信号,告诉他你此次要执行的是加法操作,那么ALU算是逻辑单元,就会把ACC和X里面只放的值进行一个相加,并且把价格的结果再次存回ACC当中,因此这就导致了ACC=7,也就是把a×B+C的值存放到了ACC里边,好,那到此为止,我们完成了第3条指令,

- 上一条指令取指后(PC)=2,执行后,(ACC)=6
- 1:(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
- 8:M(MAR)->MDR,导致(MDR)=0000000000000001=1 
- 9:(MDR)->X,导致(X)=0000000000000001=1 
- 10:(ACC)+(X)->ACC,导致(ACC)=7,由ALU实现加法运算


    * 就是这个加法指令,看到前边的5个步骤,其实和之前的两条之内没有任何区别。另外再取完指令之后,同样的也会自动的进行PC +1的操作,也就是PC会指向下一条我们应该执行的指令,接下来这条指令的执行前面的这些步骤都是一样的,根据PC记录的这个地址取出这条指令并且放到IR指定计算器当中,然后第5个步骤会把这个指令的操作码把它送到CU当中进行分析,然后CU分析之后发现000010这是一条纯数的题目,也就是要把ACC里边的数据把它存到地址码所指明的存储单元当中,那这个地址码转换成10进制应该是8,而把这个存储单元刚好对应的是y这个变量的存储位置,那现在ACC里边存的是7,也就是a×B+C的值好,接下来执行这个纯属指令,首先会把这个指令的地址码部分,把它送到MAR里边用来指明此次我要存入的是哪一个存储单元,另外还需要把ACC里边的运算结果通过数据总线把它送到MBR当中,也就是说此时MBR里边保存了a×B+C的值,并且才是MAR里边指明了这个值是要存到内存地址为8的这个地方,然后接下来CU控制单元会通过控制总线告诉啊主存储器,说我此次要进行的是一个存一个写的操作,于是主存储器会根据MDR所指明的地址,把MDR当中的。这个数据放到相应的位置当中,这就导致了8号存储单元它的值变为了7,也就是我们最终想要得到的这个结果,Y=a×B+C

- 上一条指令取指后(PC)=4
- 1:(PC)àMAR,导致(MAR)=3
- 3:M(MAR)àMDR,导致(MDR)=000110 0000000000 
- 4:(MDR)àIR,导致(IR)= 000110 0000000000 
- 5:OP(IR)àCU,指令的操作码送到CU,CU分析后得知,这是“停机”指令(利用中断机制通知操作系统终止该进程)

    * 首先需要取出指令,把这个指令把它取到ir指令寄存器当中,然后接下来要把操作码部分送到CU里面,然后CU分析发现,000110这个操作,对应的是停机之灵,所以执行到这一步就知道我们的这段程序运行结束了,那学过操作系统的同学知道要停止一个进程的运行,需要通过系统调用或者说通过中断机制来通知操作系统来终止这个进程,于是接下来执行的指令就不是这一系列指令,而是操作系统相关的那些指令,
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值