8.1-CPU结构(学习笔记)

【README】

本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


【1】CPU结构

Cpu的首要功能就是解释指令;功能列表如下:

  • 1)    取指令:从内存中读取指令;
  • 2)    分析指令:对指令的操作码部分进行解码;分析这条指令要完成什么功能,是指令集中的哪一条指令;
  • 3)    执行指令: cpu控制器发出各种操作命令,由这些操作命令去控制相关部件去完成指令要求的操作;(这些操作命令有一定的先后顺序);
  • 4)    控制器控制参数输入及结果输出;
  • 5)    总线管理: 对总线的控制权,使用权进行管理;
  • 6)    处理异常情况和特殊请求: 在程序执行过程中,控制器能够对异常情况,或特殊请求进行及时处理;

【2】cpu结构框图

【2.1】总线功能列表

1)    控制总线:双向,由cpu向各个部件发出的控制命令,或外部设备向cpu提出的请求以及外部设备的状态,可以通过控制总线来传输;
2)    数据总线:双向,由cpu向存储器或外设写出或读入数据;
3)    地址总线:单向, 由cpu发出,送给内存或外设接口;

【2.2】cpu内部结构

【2.2.1】寄存器

PC,程序计数器寄存器,存储要取出的指令的地址;
IR,指令寄存器,从内存中取出指令,被放入到IR寄存器中;

。。。其他寄存器;

【2.2.2】控制单元CU

操作控制和实际控制:这两部分需要控制单元CU,由控制单元对指令进行译码,译码之后,在给定时刻给出给定的操作命令;

【2.2.3】ALU(算术逻辑运算单元):

算术运算,逻辑运算都是在ALU中进行计算中;
另外在运算过程中,还需要寄存器,如2个操作数可能都保存在寄存器中,或运算结果也需要输出到寄存器中;

【2.2.4】中断系统

还需要中断处理,所以需要中断系统;

refer2 计算机中断系统小结(cpu响应中断)_PacosonSWJTU的博客-CSDN博客_各中断源如何向cpu提出中断请求


 【3】cpu的寄存器

 【3.1】用户可见寄存器

1)    通用寄存器:用于存放操作数,如8086cpu的AX,BX等;
2)    数据寄存器:存放操作数,如有保存整数的寄存器,也有保存浮点数的寄存器;如把ACC寄存器和MQ寄存器拼接在一起用于保存两个数相乘的积;
3)    地址寄存器:保存地址,如8086cpu中的段寄存器,如段基址,堆栈指针寄存器SP;
4)    条件码寄存器:存放条件码,根据条件码来判断是否要跳转执行指令;

补充:用户可见的寄存器指的是 用户在编写程序的过程中,可以使用这些寄存器的值;

【3.2】控制和状态寄存器

PC -> MAR -> M -> MDR ->IR  讲的是取指令的过程,其中

  1. PC-程序计数器寄存器:保存了将要执行的下一条指令的地址;
  2. MAR-主存(内存)地址寄存器:保存了访问内存(访存)的地址,从内存读出或写入内存某地址;
  3. M:主存(内存);
  4. MDR-主存(内存)数据寄存器:保存了访问内存(访存)的数据,从内存的MAR指定的地址单元读取的数据,或写入到MAR指定的地址单元的数据;
  5. IR:指令寄存器:存储要执行的指令;(而PC存储的下一条执行的地址)

步骤如下:

  1. PC -> MAR :PC(程序计数器寄存器)保存了下一条执行指令的地址,把下一条指令地址送入到MAR;
  2. MAR -> M :MAR中的指令地址送入到地址总线,地址总线再送入到主存;
  3. M -> MDR:从主存的MAR指定的内存单元读取数据(指令)到MDR
  4. MDR ->IR  :把读取的数据(指令)从MDR 送入 IR;

写到这里,本文扩展性的给出取指令的步骤(干货):

步骤

描述

1

PC把下一条指令的内存地址送入MAR;

2

MAR把地址送到地址总线,再由地址总线送到存储器;

3

CU把读控制信号送到控制总线上;再由控制总线送到存储器;

4

存储器执行读操作,把相应的数据送到数据总线;通过数据总线送到MDR;

(这个时候,指令已经被取出到cpu了,并保持到MDR寄存器中)

5

MDR把指令送到IR中;

6

CU把PC加1(得到下一条指令的地址);为下一条指令的取指操作做准备;

【补充】

状态寄存器 :反映了指令执行结果的情况或计算机的软硬件状态;
PSW: 程序状态字寄存器(procedure state word);

程序状态字是什么?
在中断或者是子程序调用过程中,为了能够让程序能够正确返回断点,返回断点后,还能够接着执行给定程序;在中断前或转子程序前,就需要保存程序的运行现场和断点,包括了程序运行的软硬件信息;这些软硬件信息就可以保存在程序状态字寄存器(它是一个大的寄存器);


【4】控制单元CU和中断系统  

【4.1】控制单元CU

1)控制单元作用:产生全部指令在执行时所需要的微操作命令序列;

任何一条指令的执行,它会在cpu中译码;
根据它是一条什么样的指令,或完成什么功能;要产生完成这些功能所需的微操作命令及序列(保证微操作命令的顺序);

2)控制器的设计方式

  • 组合逻辑设计: 通过硬连线逻辑,如精简指令集计算机 CISC;
  • 微程序设计:存储逻辑;适用于复杂指令的设计;

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

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

相关文章

生物信息 python 书籍_用python做生物信息数据分析(1-环境准备)

写在前面四五年前,接触生物信息的时候,阴差阳错,我选择用perl。事实上,直到嫌我,我还是认为我当初的选择,完全正确!。在做一些小文本的快速处理上,perl在我看来,从来最优…

8.2-指令周期(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】指令周期 【1.1】指令周期概述 1)指令周期:取出并执行一条指令所需的全部时间&#xff1…

深入理解多线程(三)—— Java的对象头

转载自 深入理解多线程(三)—— Java的对象头上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型。这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头。主要介绍一下对象头的作用,结构以及他和锁的关系。 Java对象…

python tkinter 背景色改变不了_python - Tkinter背景颜色问题 - 堆栈内存溢出

我有一个脚本,其中包含Tkinter模块,我想每隔3分钟更改一次背景颜色,例如绿色3分钟,然后橙色,然后红色。 我有显示绿色的代码,但无法更改它。当我在代码中创建函数时,会遇到一些不同的错误&#…

回顾微软近年来对于Linux和开源的策略

2014年十月,在旧金山举办的一场活动中,微软的CEO Satya Nadella向公众表示,微软“爱Linux”。作为昔日的竞争对手,微软对Linux的态度逐渐从敌对转变为合作。自那次发言以来,微软在开源方面频频重拳出击,似乎…

深入理解多线程(四)—— Moniter的实现原理

转载自 深入理解多线程(四)—— Moniter的实现原理本文是《深入理解多线程系列文章》的第四篇。点击查看原文,阅读该系列所有文章。 在深入理解多线程(一)——Synchronized的实现原理中介绍过关于Synchronize的实现原理…

(转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入。它是Spring中一个强大的扩展接口。本篇文章来https://juejin.cn/post/6…

通过图书编号查询python_Python图书接口调用代码实例

1.[代码][Python]代码#!/usr/bin/python# -*- coding: utf-8 -*-import json, urllibfrom urllib import urlencode#----------------------------------# 图书电商数据调用示例代码 - 聚合数据# 在线接口文档:http://www.juhe.cn/docs/50#-------------…

深入理解多线程(五)—— Java虚拟机的锁优化技术

转载自 深入理解多线程(五)—— Java虚拟机的锁优化技术本文是《深入理解多线程》的第五篇文章,前面几篇文章中我们从synchronized的实现原理开始,一直介绍到了Monitor的实现原理。这一篇在前几篇的基础上,深入介绍一下…

Visual Studio Code 1.0正式发布

Visual Studio Code 是一个运行于 OS X,Windows 和 Linux 之上的,针对于编写现代 web 和云应用的跨平台编辑器。 这标志着 Microsoft 第一次向开发者们提供了一款真正的跨平台编辑器。虽然完整版的 Visual Studio 仍然是只能运行在 Windows 之上&#xf…

springboot使用ImportBeanDefinitionRegistrar 动态注册bean

【README】 1.采用 ImportBeanDefinitionRegistrar 动态注册bean,应用场景有: 如 一个后端服务需要用到多个 rabbitmq集群客户端,kafka客户端;这时就需要手动注册多个同类型的bean,但不同beanName,并用 …

python 线性回归函数_Python实现的简单线性回归算法实例分析

本文实例讲述了Python实现的简单线性回归算法。分享给大家供大家参考,具体如下:用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果:> summary(fit)Call:lm(formula weight ~…

UWP应用模型概述

Andrew Clinick是微软的一名项目经理,在Build 2016大会上,他概括地讲述了通用Windows平台(UWP)应用模型的新特性。今年的其中一个亮点是,代号为Centennial的项目实现了桌面应用程序到UWP应用的转换。 Andrew一开始就阐…

8.3-指令流水(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】如何提高机器速度 1 提高访存速度多体并行:对多个存储体进行交叉访问,在一个主存周期中&am…

Java虚拟机是如何执行线程同步的

转载自 [译]Java虚拟机是如何执行线程同步的想介绍下synchronized的原理,但是又不知道从何下手,在网上看到一篇老外的文章,介绍了和线程同步相关的几个基础知识点。所以想把它翻译一下给大家看看。相信看过这些基础知识之后再看我后面要写的s…

python开方运算符_Pytorch Tensor基本数学运算详解

1. 加法运算示例代码:import torch# 这两个Tensor加减乘除会对b自动进行Broadcastinga torch.rand(3, 4)b torch.rand(4)c1 a bc2 torch.add(a, b)print(c1.shape, c2.shape)print(torch.all(torch.eq(c1, c2)))输出结果:torch.Size([3, 4]) torch.…

重新审视演进式设计

演进式设计是一种理念,它曾经颠覆过传统笨拙的计划式设计,如今,它依旧焕发着生命力,但我们不能以静止的眼光去看待它,而应该尝试着引入一些新的方法、框架乃至技术。 ♦ ♦ 说起来,所谓Evolutionary Design…

9.1-微操作命令的分析(学习笔记)

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 1)完成一条指令需要4个周期: 取值周期;间址周期(或有)&…

小知识 | Java中的“魔数”

转载自 小知识 | Java中的“魔数”在编程过程中,我们可能经常听到“魔数”这个词,那么这个词到底指的是什么呢?什么数叫做魔数呢?一、标识文件类型的“魔数”大多数情况下,我们都是通过扩展名来识别一个文件的类型的&a…

python setup.py 指定文件到指定路径_linux下python安装到指定目录

由于使用公司服务器时没有root权限,只能把python安装到个人文件夹下,使用源码包方式安装,这里记录一下。1.python下载cd到目录/users/w,在此目录下安装python。通过wget命令下载python源码包:2.解压python到当前目录$ …