计算机组成原理——小啃一下

CPU和主存储器结构

CPU

  • 运算器
    • ACC(累加器)
    • ALU(算数逻辑单元)
    • MQ(乘商寄存器)
    • X(操作数寄存器)
  • 控制器
    • CU(控制单元)
    • IR(指令寄存器)
    • PC (程序计数器)

主存储器

  • M(主存储体)
  • MDR(存储器数据寄存器)
  • MAR(存储器地址寄存器)

计算机组成框图

指令的操作

指令操作

第一条指令

取指

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: 0000010000001000 ⟶ MDR \textbf{0000010000001000}\overset{\textbf{}}{\longrightarrow}\textbf{MDR} 0000010000001000MDR
3: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR

分析、执行

1: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000001 \textbf{000001} 000001,为取数指令;
2: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001000 \textbf{0000001000} 0000001000,送入 MAR \textbf{MAR} MAR,命令存储器读;
3: 0000001000 ⟶ x MDR ⟶ x ACC \textbf{0000001000}\overset{{x}}{\longrightarrow}\textbf{MDR}\overset{{x}}{\longrightarrow}\textbf{ACC} 0000001000xMDRxACC,存储器将地址码 0000001000 \textbf{0000001000} 0000001000对应数据 x x x送入 MDR \textbf{MDR} MDR MDR \textbf{MDR} MDR再送入 ACC \textbf{ACC} ACC
4 PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第二条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000100 \textbf{000100} 000100,为乘法指令;
4: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001001 \textbf{0000001001} 0000001001,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ a ACC \textbf{MDR}\overset{{a}}{\longrightarrow}\textbf{ACC} MDRaACC,存储器将地址码 0000001001 \textbf{0000001001} 0000001001对应数据 a a a送入 MDR \textbf{MDR} MDR MDR \textbf{MDR} MDR再送入 MQ \textbf{MQ} MQ
6:将 [ACC] \textbf{[ACC]} [ACC]看作被乘数,方括号表示寄存器里的数据
[ACC] → X \textbf{[ACC]} \rightarrow\textbf{X} [ACC]X
0 → ACC \textbf{0} \rightarrow\textbf{ACC} 0ACC
[MQ]*[X] → ACC//MQ \textbf{[MQ]*[X]} \rightarrow\textbf{ACC//MQ} [MQ]*[X]ACC//MQ
7 PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第三条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000011 \textbf{000011} 000011,为加法指令;
4: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001010 \textbf{0000001010} 0000001010,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ b ACC \textbf{MDR}\overset{{b}}{\longrightarrow}\textbf{ACC} MDRbACC,存储器将地址码 0000001010 \textbf{0000001010} 0000001010对应数据 b b b送入 MDR \textbf{MDR} MDR MDR \textbf{MDR} MDR再送入 X \textbf{X} X
6:将 [ACC] \textbf{[ACC]} [ACC]看作被加数,方括号表示寄存器里的数据
[ACC]+[X] → ACC \textbf{[ACC]+[X]} \rightarrow\textbf{ACC} [ACC]+[X]ACC
此时 ACC \textbf{ACC} ACC存储的数据为 a x + b ax+b ax+b
7 PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第四条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000100 \textbf{000100} 000100,为乘法指令;
4: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001000 \textbf{0000001000} 0000001000,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ x ACC \textbf{MDR}\overset{{x}}{\longrightarrow}\textbf{ACC} MDRxACC,存储器将地址码 0000001000 \textbf{0000001000} 0000001000对应数据 x x x送入 MDR \textbf{MDR} MDR MDR \textbf{MDR} MDR再送入 MQ \textbf{MQ} MQ
6:将 [ACC] \textbf{[ACC]} [ACC]看作被乘数,方括号表示寄存器里的数据
[ACC] → X \textbf{[ACC]} \rightarrow\textbf{X} [ACC]X
0 → ACC \textbf{0} \rightarrow\textbf{ACC} 0ACC
[MQ]*[X] → ACC//MQ \textbf{[MQ]*[X]} \rightarrow\textbf{ACC//MQ} [MQ]*[X]ACC//MQ
此时 ACC \textbf{ACC} ACC存储的数据为 ( a x + b ) × x (ax+b)\times x (ax+b)×x
7 PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第五条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000011 \textbf{000011} 000011,为加法指令;
4: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001011 \textbf{0000001011} 0000001011,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ c ACC \textbf{MDR}\overset{{c}}{\longrightarrow}\textbf{ACC} MDRcACC,存储器将地址码 0000001011 \textbf{0000001011} 0000001011对应数据 c c c送入 MDR \textbf{MDR} MDR MDR \textbf{MDR} MDR再送入 X \textbf{X} X
6:将 [ACC] \textbf{[ACC]} [ACC]看作被加数,方括号表示寄存器里的数据
[ACC]+[X] → ACC \textbf{[ACC]+[X]} \rightarrow\textbf{ACC} [ACC]+[X]ACC
此时 ACC \textbf{ACC} ACC存储的数据为 a x 2 + b x + c ax^2+bx+c ax2+bx+c
7 PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第六条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000010 \textbf{000010} 000010,为存数指令;
4: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001100 \textbf{0000001100} 0000001100,送入 MAR \textbf{MAR} MAR,命令存储器写;
5: ACC ⟶ [ A C C ] MDR \textbf{ACC}\overset{{[ACC]}}{\longrightarrow}\textbf{MDR} ACC[ACC]MDR,存储器将对应数据 [ACC] \textbf{[ACC]} [ACC]送入 MDR \textbf{MDR} MDR,将 MDR \textbf{MDR} MDR中的数据写入存储器地址码 0000001100 \textbf{0000001100} 0000001100中;
6: PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第七条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000101 \textbf{000101} 000101,为打印指令;
4: CU ⟶ Ad(IR) MAR \textbf{CU}\overset{\textbf{Ad(IR)}}{\longrightarrow}\textbf{MAR} CUAd(IR)MAR,地址码 0000001100 \textbf{0000001100} 0000001100,送入 MAR \textbf{MAR} MAR,命令存储器读;
5: MDR ⟶ 数据 IO \textbf{MDR}\overset{{数据}}{\longrightarrow}\textbf{IO} MDR数据IO,存储器将对应数据送入 IO \textbf{IO} IO打印;
6: PC+1 \textbf{PC+1} PC+1,生成下一条指令地址。

第八条指令

取指、分析、执行…

1: PC ⟶ 指令地址 MAR \textbf{PC}\overset{\textbf{指令地址}}{\longrightarrow}\textbf{MAR} PC指令地址MAR,命令存储器读;
2: MDR ⟶ 指令 IR \textbf{MDR}\overset{\textbf{指令}}{\longrightarrow}\textbf{IR} MDR指令IR
3: OP(IR) ⟶ 操作码 CU \textbf{OP(IR)}\overset{\textbf{操作码}}{\longrightarrow}\textbf{CU} OP(IR)操作码CU,得到操作码 000110 \textbf{000110} 000110,为停机指令;
4: PC \textbf{PC} PC不在更新指令地址。

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

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

相关文章

Linux基础项目开发1:量产工具——程序框架(一)

前言: 前面已经将Linux应用开发基础知识学习完了,现在让我们来做个小项目练练手,对之前的一些知识点进行一个更加具体详细的认识与了解,我们要进行的项目名称为:电子产品量产测试与烧写工具,这是一套软件&a…

【单调栈】最大宽度坡

public int maxWidthRamp(int[] nums) {/* 此方法思路正确&#xff0c;但超时int n nums.length;Deque<Integer> stack;int max 0;for (int i 0; i < n; i) {stack new LinkedList<>();stack.push(nums[i]);int j i 1;while (j < n) {stack.push(nums…

已知两个链表L1和L2分别表示两个集合,其中元素递增排列。请设计一个算法,用于求出L1与L2的交集,并存放在L1链表中

已知两个链表L1和L2分别表示两个集合&#xff0c;其中元素递增排列。请设计一个算法&#xff0c;用于求出L1与L2的交集&#xff0c;并存放在L1链表中。 代码思路&#xff1a; 我们创建一个辅助链表L3&#xff0c;用于存储L1和L2链表的交集&#xff0c;用s遍历L3各个元素 用p和…

文件夹重命名:克服语言障碍,批量将中文文件夹名翻译成英文

随着全球化的不断深入&#xff0c;英语成为了世界上最广泛使用的语言。在日常生活和工作中&#xff0c;可能经常要将中文文件夹名翻译成英文&#xff0c;以便交流或满足特定需求。手动翻译文件夹名不仅耗时&#xff0c;还容易出错。那有什么方法可以快速、准确地批量将中文文件…

【Qt】判断QList链表内是否有重复数据

QList<int> listInt;listInt.push_back(1);listInt.push_back(1);listInt.push_back(2);listInt.push_back(3);qDebug().noquote() << listInt.toSet().toList();

【前端开发】Remix与Next.js

很容易&#xff0c;我们被问到的最大问题是&#xff1a; Remix与Next.js有何不同&#xff1f; 看来我们必须回答这个问题&#xff01;我们想直接而不带戏剧性地解决这个问题。如果你是Remix的粉丝&#xff0c;并且想开始在推特上对这篇文章做出沾沾自喜的反应&#xff0c;我们恳…

2019年8月15日 Go生态洞察:Go贡献者峰会2019回顾

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

IP代理的巨大潜力,为什么跨境业务需要它?

IP说简单不简单&#xff0c;说复杂也不复杂&#xff0c;打个比方&#xff0c;IP就好比我们上网的一个门牌号&#xff0c;每家每户都会有一个门牌号&#xff0c;而且是唯一的地址。而代理IP&#xff08;代理服务器&#xff09;是一个位于中间的服务器&#xff0c;充当客户端和目…

【C++】map与set

​&#x1f47b;内容专栏&#xff1a;C/C编程 &#x1f428;本文概括&#xff1a;关联式容器的介绍、set、multiset、map、multimap。 &#x1f43c;本文作者&#xff1a;阿四啊 &#x1f438;发布时间&#xff1a;2023.11.27 一、关联式容器的介绍 在之前C的学习之中&#xf…

STM32入门--看门狗

一、独立看门狗简介 STM32F10xxx内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障&#xff1b;当计数器达到给定的超时值时&#xff0c;触发一个中断(仅适用于窗口型看…

VMware虚拟机网络配置详解

vmware为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09; 打开vmware虚拟机&#xff0c;我们可以在选项栏的“编辑”下的…

R语言实操记录——R包无法安装,报错:Warning in system(cmd) : ‘make‘ not found

R语言 R语言实操记录——R包无法安装&#xff0c;报错&#xff1a;Warning in system(cmd) : ‘make‘ not found 文章目录 R语言一、起因二、具体步骤2.1、确认问题源2.2、安装RTools2.3、与R(/Rstudio)绑定2.4、验证可行性 三、疑惑 一、起因 R语言在包的安装上是真的方便&…