当前位置: 首页 > article >正文

计算机硬件的基本组成

一、冯诺依曼结构

存储程序:
“存储程序”的概念是指将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
在这里插入图片描述
冯诺依曼计算机特点:
1、计算机由5大部件组成
2、指令和数据以同等地位存于存储器,可按地址寻访
3、指令和数据用二进制表示
4、指令由操作码和地址码组成
5、存储程序
6、以运算器为中心(输入/输出设备与存储器之间的数据传送通过运算器完成)

二、现代计算机结构

在这里插入图片描述
在这里插入图片描述

2.1、主存储器

在这里插入图片描述
在这里插入图片描述
存储单元:每个存储单元存放一串二进制代码
存储字(word):存储单元中二进制代码的组合
存储字长:存储单元中二进制代码的位数
存储元:即存储二进制的电子元件,每个存储元可存1bit

MAR(memory address register):位数反应存储单元的个数
MDR(memery data register):位数=存储字长

例如:MAR=4位->共有24个存储单元
MDR=16位->每个存储单元可放16bit 1个字=16bit
字的决定是由计算机硬件决定的

1个字节(byte)=8bit

2.2、运算器的基本组成

在这里插入图片描述
运算器:用于实现算术运算(如:加减乘除)、逻辑运算(如:与或非)

ACC(Accumulator):累加器,用于存放操作数,或运算结果
MQ(Multiple-Quotient Register):乘商寄存器,在乘、除运算时,用于存放操作数或运算结果。
X:通用的操作数寄存器,用于存放操作数
ALU:算术逻辑单元,通过内部复杂的电路实现算数运算逻辑运算

2.3、控制器的基本组成

在这里插入图片描述

CU(control unit):控制单元,分析指令,给出控制信号
IR(instruction register):指令寄存器,存放当前执行的指令
PC(program counter):程序计数器,存放下一条指令地址,有自动加1功能

在这里插入图片描述

2.4、跑一个code

高级语言:

int a=2,b=3,c=1,y=0;
void main(){
	y=a*b+c;
}

机器语言:
在这里插入图片描述

第一条指令

在这里插入图片描述
初:(PC)=0,指向第一条指令的存储地址
#1:(PC)→MAR,导致(MAR)=0
#3:M(MAR)→MDR,导致(MDR)=0000010000000101
#4:(MDR)→IR,导致(IR)=0000010000000101
#5:OP(IR)→CU,指令的操作码送到CU,CU分析后得知,这是“取数”指令
#6:Ad(IR)→MAR,指令的地址码送到MAR,导致(MAR)=5
#8:M(MAR)→MDR,导致(MDR)=0000000000000010=2
#9:(MDR)→ACC,导致(ACC)=0000000000000010=2

取指令(#1~ #4)分析指令(#5)执行取数指令(#6~#9)

第二条指令

在这里插入图片描述

上一条指令取指后PC自动+1,(PC)=1;执行后,(ACC)=2
#1:(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)=0000000110=6
#8:M(MAR)->MDR,导致(MDR)=0000000000000011=3
#9:(MDR)->MQ,导致(MQ)=0000000000000011=3
#10:(ACC)->X,导致(X)=2
#11:(MQ)*X->ACC,导致(ACC)=6,由ALU实现乘法运算,如果乘积太大,需要MQ辅助存储

取指令(#1~#4)分析指令(#5)执行乘法指令(#6~#11)

同样的方式分析后面的指令

http://www.kler.cn/news/134094.html

相关文章:

  • K-Means聚类
  • 数电实验-----实现74LS139芯片扩展为3-8译码器以及应用(Quartus II )
  • 【VSCode】Visual Studio Code 下载与安装教程
  • macos 配置ndk环境
  • 【DevOps】Git 图文详解(四):Git 使用入门
  • 阿坤老师的独特瓷器(Java详解)
  • Linux下快速确定目标服务器支持哪些协议和密码套件
  • 学习网络编程No.10【深入学习HTTPS】
  • sqlite 判断数据表是否存在 失效的一种情况
  • Python数据分析实战① Python实现数据可视化
  • Unity中Shader法线贴图(上)
  • qt 重载信号,使用““方式进行connect()调用解决方案
  • 【算法与数据结构】前言
  • WPF中如何在MVVM模式下关闭窗口
  • 【0到1学习Unity脚本编程】第一人称视角的角色控制器
  • 技术贴 | SQL 执行 - 执行器优化
  • 【六袆 - MySQL】SQL优化;Explain SQL执行计划分析;
  • WPF位图效果
  • 详解ssh远程登录服务
  • 基于卡尔曼滤波实现行人目标跟踪
  • 【广州华锐互动VRAR】VR元宇宙技术在气象卫星知识科普中的应用
  • 什么是AIGC
  • JS原生-弹框+阿里巴巴矢量图
  • 【论文阅读笔记】Supervised Contrastive Learning
  • 小迪笔记(1)——操作系统文件下载反弹SHELL防火墙绕过
  • 疑似openAI的BUG
  • 结构体——C语言初阶
  • 飞天使-django之数据库简介
  • 汽车 CAN\CANFD数据记录仪
  • 【LeetCode刷题-树】--1367.二叉树中的链表