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

一、现代计算机的组成

 

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

计算机在开机时不会读取硬盘上的所有数据,开机时先读取的是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这个操作,对应的是停机之灵,所以执行到这一步就知道我们的这段程序运行结束了,那学过操作系统的同学知道要停止一个进程的运行,需要通过系统调用或者说通过中断机制来通知操作系统来终止这个进程,于是接下来执行的指令就不是这一系列指令,而是操作系统相关的那些指令,
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rstp协议和stp协议对比_3.TCP和UDP协议对比

TCP、UDP协议对比任务:掌握TCP协议、UDP协议的作用;TCP的三次握手和四次挥手;RST断开连接过程和作用。1.TCPTCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC …

计算机组成原理-数据的表示和运算(图片资源摘自王道考研资料)

一、进位计数制 二、BCD码 此处: 58 0101 1000 1101 超出数据能表达的范围,因为 8421码只能表示0-9 十以上数据视为无效数据,因此在此基础上加六,进行校正--> 11010110 0001 0011 ----拆成两个看

lacp可以在access接口吗_现网必用的链路冗余技术,静态LACP链路捆绑,两分钟快速掌握...

一、链路聚合链路聚合(Link Aggregation)是将—组物理接口捆绑在一起作为一个逻辑接口来增加带宽的一种方法,又称为多接口负载均衡组(Load Sharing Group)或链路聚合组(Link Aggregation Group)1、配置手工负载分担模式链路聚合手工负载分担模式下,Eth-T…

Spring 集成web环境

Spring 集成web环境 一、配置ContextLoaderListener 监听器 1.maven坐标 org.springframework spring-web 5.3.14 2.web.xml <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</para…

一只青蛙跳向三个台阶_8. 跳台阶

一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。1. 思路&#xff1a;若只有一级台阶&#xff1a;一种跳法两级台阶&#xff1a;两种跳法(11 / 2)三级台阶&#xff1a;三种跳法(111 / 12 / 21)四级台阶&#xff1a;五种跳法…

spring 框架(一)

目录 一、spring简介 二、spring入门 三、spring配置文件 3.1.bean标签的基本配置(applicationContext.xml) 3.2Bean&#xff08;scope:指对象的作用范围&#xff09;标签范围配置 3.3 Bean生命周期配置 3.4 Bean实例化三种方式 3.5 Bean的依赖注入入门 3.6 Bean的依赖…

cdr添加节点快捷键_CDR快捷键分享,需要的赶紧收藏!

点击上方蓝字&#xff0c;关注我们哦&#xff01;&#xff01;有粉丝在后台留言说&#xff0c;希望我分享一下CDR的快捷键&#xff0c;今天我整理了一下快捷键。来源&#xff1a;内容整理自网络&#xff0c;仅供学习交流一工具箱I 绘制曲线&#xff0c;并对笔划使用预置、画刷、…

spring 框架(二)

目录 一、Spring配置数据源 1.1 数据源(连接池)的作用 1.2数据源的使用 1.3基本实现 1.4.抽取配置文件&#xff0c;降低耦合性(druid) 1.4.1抽取jdbc.properties文件 1.4.2设置数据源的基本连接数据&#xff0c;通过applicationContext.xml设置数据库参数applicationCon…

matplotlib 对称图_Python 绘图,我只用 Matplotlib

散点图散点图显示两组数据的值&#xff0c;如图1-1所示。每个点的坐标位置由变量的值决定&#xff0c;并由一组不连接的点完成&#xff0c;用于观察两种变量的相关性。例如&#xff0c;身高—体重、温度—维度。图1-1 散点图示例使用Matplotlib的scatter()函数绘制散点图&#…

spring框架(三)mvc

目录 1.1准备测试数据 1.2 ApplicationContext应用上下文获取方式 1.2.1添加listener包 1.2.2解耦配置文件 1.2.3 继续提取ContextLoaderListener.java中参数app 1.2.4 Spring提供获取应用上下文的工具 二、SpringMVC 2.1概述 2.2数据准备 2.3添加success.jsp页面 2.4 …

python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法

字符串是字符序列。Python中内置的string类代表基于Unicode国际字符集的字符串。除了Python中常见的操作外,字符串还有一些专属于它们的附加方法。下图显示了所有这些可用的方法: Python中的内置字符串函数 在本文中,我们将学习一些最常用的方法。这里需要注意的重要一点是,…

spring (四) SpringMVC的请求和响应

目录 前言 一、SpringMVC的数据响应 1.1 SpringMVC的数据响应方式 1.1.1页面跳转 直接返回字符串 ​ 1.1.2通过ModelAndView对象返回 1.2 回写数据 1.2.1直接返回字符串 1.2.2返回对象或集合 二、SpringMVC获得请求数据 2.1 获得请求参数 2.2 获得基本类型…

拼接路径优雅方式_中年女人最好少穿马丁靴,简约的“无痕靴”更适合你,优雅高级...

女人在到了中年的时候&#xff0c;经过很多世事的沉淀&#xff0c;气质也会变得更加的淡定与从容。在穿搭上面&#xff0c;也不会喜欢像小姑娘那般的去盲目地追求潮流&#xff0c;跟风一些并不适合自己穿搭的服装&#xff0c;强行的装嫩的话&#xff0c;也会显得有些尴尬。中年…

spring框架(五)之JdbcTemplate基本使用

数据准备 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

spring框架(六)之拦截器

一. SpringMVC拦截器 1.1 拦截器(interceptor)的作用 Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter&#xff0c;用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链&#xff0c;这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方 法或…