计算机中的第三个伟大发明

news2025/4/16 16:58:00

        本节我们学习了控制计算机跳转指令的第三个发明的由来,以及清除指令。并且展示了计算机的整体控制部分的布线图。

第三个发明

        对于跳转指令,有时它会跳转,有时不会。跳或不跳只是两种可能性,所以只需要一个bit就可以确定哪一种会发生。计算机的第三个伟大发明,是用来确定这个bit的。

        还记得我们之前讲过的ALU部件的“进位”吗?加法或者移位会产生这个“进位”。另外有个bit告诉我们两个输入是否相等,一个bit告诉我们a输入是否较大,还有一个bit告诉我们ALU的输出是否全为零。这些bit的使用是我们还没有提及的东西。这四位将被称为“标志”位,它们将用于决定“Jump If”指令是执行RAM中的下一条指令还是跳转到其他地址。

        我们试图让计算机完成的是,首先执行一条ALU指令,然后有一条或多条“Jump If”指令。“Jump If”将根据ALU指令期间发生的情况跳转或不跳转.

        当然,当“Jump If”执行时,ALU指令的结果早已消失。如果你回过头来看ALU指令的细节,只有在步骤5中,所有正确的输入才会进入ALU,并且得到想要的答案。此时,答案被设置为ACC。所有四个标志位的开启时间相同,它们仅在ALU指令的步骤5期间有效。因此,我们需要一种方法将标志位的状态保存为ALU指令步骤5期间的状态。

        这是我们要添加到CPU的最后一个寄存器。这将被称为FLAG寄存器,我们将只使用其中的四位,每个标志一个。来自ALU的标志位连接到该寄存器的输入端,它将在ALU指令的第5步期间被设置,就像ACC一样,它将一直保持设置状态,直到下一次执行ALU指令。因此,如果有一条ALU指令后跟一条“Jump If”指令,“标志”位可以用来“决定”是否跳转。

        每个指令周期都使用步骤1中的ALU向下一条指令的地址加1,但只有ALU指令的步骤5有设置标志的连接。(我们没有在ALU指令的布线中显示这种连接,因为我们还没有引入Flag Reg,但它将出现在完整的控制部分图中。)Flag位和Jump IF指令的组合是第三个也是最后一个伟大的发明,使我们今天所知的计算机能够工作。

        这是“Jump If”指令的指令代码。指令的后四位告诉CPU应该检查哪个标志。在与要测试的标志相对应的指令位中输入“1”。如果您测试的任何一个标志打开,则跳转将发生。这种安排为我们提供了许多决定是否跳的方法。如果跳转被执行,则有第二个字节包含要跳转到的地址

        这是控制部分的接线,使跳转指令起作用。

        第4步将IAR移动到MAR,因此我们准备好获得“跳转到地址”,如果我们跳转,我们将使用它。但因为我们可能不会跳转,我们还需要计算RAM中下一条指令的地址。因此,步骤4也打开总线1并在ACC中设置答案。

        在步骤5中,我们将ACC移动到IAR,这样我们就可以在不跳转的情况下获取下一条指令。

        第6步是做出“决定”的地方。如果AND门的第三个输入打开,我们将把指令的第二个字节从RAM移到IAR。第三个输出来自有四个输入的OR门。这四个输入来自与IR中的Jump If指令的最后四位进行AND运算后的四个Flag位。例如,如果指令的“等于”位中有“1”,并且“等于”标志位处于启用状态,则跳转将发生。

        这里有更多关于我们计算机语言的单词。”“J”表示跳跃,“C”表示进位,“A”表示A较大,“E”表示A等于B,“Z”表示答案全部为零。下面是测试单个Flag的语言

        您还可以通过在四个位中的多个位中输入1来同时测试多个标志位。实际上,由于有四个位,所以有16种可能的组合,但四个位都关闭的组合没有用,因为它永远不会跳。为了完整起见,以下是其余的可能性。

清除标志指令

        当进行加法或者移位时候,我们有可能通过操作打开进位标志。但会出现的问题是,如果您只是添加两个单字节数字,那么您不关心任何先前的进位,但进位标志可能仍然是从先前的操作中设置的。在这种情况下,你可以加上2+2,得到5!

        因此,我们需要一个清除标志指令,在出现意外进位问题的任何加法或移位之前使用该指令。这是此指令的指令代码。不使用第4、5、6,7的bit位。

        这条线路非常简单,也有点棘手。我们不会在总线上启用任何东西,因此它和“A”ALU输入将全部为零。我们将打开“总线1”,因此“B”输入为0000 0001。我们不会向ALU发送操作,因此它将处于ADD模式。因此,ALU将0和1相加,可能存在进位输入。然后答案将是0000 0001或0000 0010。但不会有进位输出,答案不是零,B大于A,因此“等于”和“大于A”都将关闭。此时,当所有四个标志位都关闭时,我们“设置”标志寄存器

        对应的计算机语言:

计算机的整体控制部分

        我们现在已经连接了CPU的控制部分。因此,我们可以在RAM中放置一系列指令,时钟、步进器、指令寄存器和连线将获取并执行这些指令。以下是整个控制部分:

        这看起来很复杂,但是我们前面已经拆分见过了它的所有子部分。因为大多数“enable”和“set”需要多个连接,所以还需要添加一些或门。这实际比RAM部件少很多,但重复性要更大。比较混乱的地方是接线。

        我们前面介绍的导致某个活动发生的是放在指令寄存器的指令代码,另外一个名称是“机器语言”,这是计算机理解的唯一语言(代码)。下面是所有指令代码和机器语言,我们在计算机上的所有操作都只是CPU执行一系列指令的结果。

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

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

相关文章

【Kubernetes快速实战】

K8S官网文档:https://kubernetes.io/zh/docs/home/ 文章目录前言一、K8S核心特性二、K8S集群安装1.安装K8S集群1、关闭防火墙2、关闭 selinux3、关闭 swap4、给三台机器分别设置主机名5、在 k8s‐master机器添加hosts,执行如下命令,ip需要修改…

全球最受欢迎的「数字游民」城市竟然是它?

相信你已经或多或少听说过「数字游民」这个词汇了。 「数字游民」译自英文词组Digital Nomad,是指那些没有办公室等固定工作场所,利用互联网从事远程工作,实现地域和时间的相对自由,在全球范围内移动生活的人群。 想想看&#x…

STM32实战总结:HAL之电机

电机基础知识参考: 51单片机外设篇:电机_路溪非溪的博客-CSDN博客 无刷电机和有刷电机 先详细了解有刷电机: 带你了解(有刷)电机工作原理_哔哩哔哩_bilibili 再详细了解无刷电机: 无刷直流电机工作原理_哔哩…

MySQL在centos上的安装

去mysql官网下载mysql 通过mysql官网的download界面,找到community server,然后选择对应linux版本下载对应的安装包 这里直接上链接 https://downloads.mysql.com/archives/community/ 可以通过cat /etc/centos-release命令找到当前centos对应的版本 下…

[附源码]java毕业设计小区供暖收费管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

重磅上市《精通Neo4j》

重磅上市《精通Neo4j》重磅上市《精通Neo4j》一、写在前面的话二、主要内容三、更多介绍Here’s the table of contents:重磅上市《精通Neo4j》 《精通Neo4j》是继《Neo4j权威指南》之后第二本由中国人原创的图数据库领域专业书籍。由清华大学出版社于2022年11月出版&#xff0…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-步长的进一步理解和max_iter

视频作者:菜菜TsaiTsai 链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 既然参数迭代是靠梯度向量的大小d步长α梯度向量的大小d \times步长\alpha梯度向量的大小d步长α来实现的,而J(θ)J(\theta)J(θ)的降…

群推王|如何引爆您的推特流量

推特营销主要吸引力在于其庞大的用户群体。它是最大的社交媒体平台之一,据统计每月有3.3亿活跃用户,为品牌知名度和增长做出了重大贡献。 尽管我们都知道推特营销的重要性,但是在实际运用上大家可能会遇到一些问题,比如您有很多粉…

C/C++ 结构体变量初始化的几种方法总结及内存排列(字节对齐)

前言 最近看到一些别人的代码,对结构体的初始化使用了不同的语法,就决定对结构体的初始化方法做个探索,这里小小的记录一下。 注意,没有初始化的结构体变量是不会输出的,比如 struct SBase{int iNumberOne;int iNum…

Redis的分布式锁问题(八)基于Redis的分布式锁

Redis的分布式锁问题(八)基于Redis的分布式锁 分布式锁 什么是分布式锁? 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。 在…

springboot+vue3+ts实现一个点赞功能

前端&#xff1a;vitevue3tselementplusless 后端&#xff1a;springboot2.7.5mybatisplus 后端&#xff1a; 引入pom依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</…

通俗理解模拟退火算法,小白也看得懂!

模拟退火的实例 齐白石原是木匠&#xff0c;快30岁才正式学画。直到57岁以后画风开始转变&#xff0c;才真正有所成就。 鲁迅原本留日学医&#xff0c;25岁弃医从文&#xff0c;但37岁时才写出第一篇白话文小说《狂人日记》。 项羽在24岁巨鹿之战成名&#xff0c;26岁封王却走…

Advances in Graph Neural Networks笔记2:Fundamental Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 本书网址&#xff1a;https://link.springer.com/book/10.1007/978-3-031-16174-2 本文是本书第二章的学习笔记。 我们学校没买这书&#xff0c;但是谷歌学术给我推文献时给出了一个能免登录直接上的地址&#xff0c;下次就不一定好使了&#…

Web of science,scopus,Google scholar的介绍和区别

Overview 最近为了和实验室同学分享这几个常见的数据库的区别&#xff0c;因此做了一个简单的 从这张图上面可以看到&#xff0c;Web of science (Wos)是在1997年&#xff0c;由Institute for Scientific Information (ISI)合并多种索引建立的&#xff0c;而ISI在1992年加入了…

11.21二叉树oj

目录 一.队列.栈顺序表总结 二.猫狗问题 三.股票价格跨度 四.二叉树的初始化 1.获取树中节点的个数 1.遍历思路 2.子问题思路 2.叶子节点个数 3.获取第K层节点的个数 4.获取二叉树的高度 6.判断一棵树是不是完全二叉树 一.队列.栈顺序表总结 1.顺序表和栈的底层都是…

C++ 单向链表手动实现(课后作业版)

单向链表&#xff0c;并实现增删查改等功能 首先定义节点类&#xff0c;类成员包含当前节点的值和下一个节点的地址 /node definition template <typename T> class Node { public:T value;Node<T>* next;Node() {}Node(const T& value) {this->value va…

ES6 入门教程 19 Generator 函数的语法 19.7 yield星号表达式

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程19 Generator 函数的语法19.7 yield* 表达式19 Generator 函数的语法 19.7 yield* 表达式 如果在 Generator 函数内部&…

windows域控批量创建账号方法

目录 一、收集信息 二、编写脚本 &#xff08;一&#xff09;新建aduser.ps1的powershell脚本 &#xff08;二&#xff09;New-Aduser命令详解 三、生产环境报错 &#xff08;一&#xff09;ConvertTo-SecureString &#xff08;二&#xff09;指定的账号已存在 &#xff…

debian11 安装后必备配置

debian11 安装后必备配置 运行环境&#xff1a;PVE v7.2-11 CT容器 系统版本&#xff1a;Debian-11-standard_11.3-1_amd64.tar.zst 启动信息 Debian GNU/Linux 11 debian tty1debian login: root Password: Linux debian 5.15.64-1-pve #1 SMP PVE 5.15.64-1 (Thu, 13 Oct …

【数据结构】堆的实现堆排序Top-K

文章目录一、堆的概念及结构二、堆实现&#xff08;1&#xff09;创建结构体&#xff08;2&#xff09;具体函数实现及解析1.0 交换函数1.1 堆的打印1.2 堆的初始化1.3 堆的销毁1.4 堆的插入1.5堆的向上调整算法1.6 堆的删除1.7堆的向下调整算法1.8 取堆顶的数据1.9 堆的数据个…