什么样才叫计算机?

news2024/11/24 22:36:55

我和小宇早恋了,我们家住隔壁。

33eef83c-e505-11ee-a297-92fbcf53809c.jpg

一、编码与电路——信号的转换

晚上父母会把手机没收,但我们还想继续聊天,又不敢发出声音,于是我们想到了这个办法...

33f96088-e505-11ee-a297-92fbcf53809c.gif

我们把所有的中文都用灯泡的亮灭组合来表示,同时约定好每隔一秒读取一次灯泡的状态并记录下来,这是我们的暗号。

:亮亮灭灭亮

:灭亮亮灭灭

:亮灭亮灭亮

:亮亮亮灭灭

这样,我们虽然没有了手机,依然可以日以继日地聊天,虽然效率很低,但依然很快乐。

我和小宇就这样在不经意间,将语言转换成为了灯泡的亮灭组合,这个过程叫做编码

二、门电路——信号的关联

我和小宇就这样一直秘密保持着通话,直到上了大学,父母再也管不了我们用手机了。

但这么多年的小灯泡通话,使我们总觉得事情没那么简单,于是我们开始了一些新的探索。

33fe4ec2-e505-11ee-a297-92fbcf53809c.gif

我们增加了一个开关。此时当两个开关同时闭合时,灯泡才会亮。

这样两个开关与灯泡之间,不再是之前简单的对应关系了,而是有了逻辑

开关的断开与闭合分别对应着电路的断开与连通。而小灯泡的不亮与亮,也分别对应着电路的断开与连通。那这两者就可以统一,不再依赖于具体的实物表现了。

34032e24-e505-11ee-a297-92fbcf53809c.gif

还有,开关的连通与断开,是主动的。而小灯泡的连通与断开,是被动的,是结果。

我们把开关这里的连通与断开称为输入端,把灯泡的连通与断开称为输出端,并且将整个电路都封装在一个图形里,可以得到如下抽象:

3408408a-e505-11ee-a297-92fbcf53809c.gif

我们决定把这种电路叫做门电路, 上面这个叫与门。 

为了今后更为抽象的探索,我们将电路连通表示为数字 1,电路断开表示为数字 0。

我们将这种表示方式称为二进制

输入 A输入 B输出
000
010
100
111

341000e0-e505-11ee-a297-92fbcf53809c.gif

慢慢地,我们发现了越来越多的玩法。

341438b8-e505-11ee-a297-92fbcf53809c.gif

上面这种电路,我把他抽象成如下门电路形状,叫做或门

3425af08-e505-11ee-a297-92fbcf53809c.gif

之后便一发不可收拾,我和小宇设计了越来越多的门电路,我们发现,只要是我们能想到的逻辑关系,都可以设计成对应的门电路。

342cf60a-e505-11ee-a297-92fbcf53809c.jpg

三、加法器——信号的计算

十进制数可以转换成二进制数,而二进制数又可以对应到门电路的输入端与输出端。

于是我和小宇有了一个大胆的想法,能不能设计一个计算加法的电路呢?

我们首先从最简单的一位二进制数相加开始:

0+0=0;0+1=1;1+0=1;1+1=10

变成一张表格如下

加数 A加数 B加和进位输出
0000
0110
1010
1101

即我们需要设计出一种电路,可以达到表中的输入与输出效果。

经过不懈努力,终于发现这个电路可以由异或门与门两个门电路组成。

34306394-e505-11ee-a297-92fbcf53809c.jpg

这个装置实现了二进制的一位加法,但它并不完美,因为只考虑了这两个数的进位输出,但没有考虑上一位的进位,所以只能叫半加器

3437dfd4-e505-11ee-a297-92fbcf53809c.jpg

如果将前一个进位考虑进来,只需再多一个半加器,并且拼接一个或门即可。

34452112-e505-11ee-a297-92fbcf53809c.jpg

此时我们已经建立好了一个完美的一位加法器,并自豪地称之为全加器

3448c754-e505-11ee-a297-92fbcf53809c.jpg

全加器做出来之后,无论多少位的加法器就都可以做出来了,只需将全加器逐个拼起来即可。我们尝试做一个八位加法器

344ce884-e505-11ee-a297-92fbcf53809c.jpg

OK,大功告成,有了加法器,理论上就可以实现任何的数学运算了。

因为我们知道乘法可以转换成加法,除法可以转换成减法,而减法又可以转换成补码的加法。现在我们可以自豪地称这个部件为,算术逻辑单元 ALU

34515388-e505-11ee-a297-92fbcf53809c.jpg

四、时钟——信号的震荡

我和小宇都非常高兴,终于用电路的方式实现了计算功能。

但慢慢的觉得没什么意思了,于是我们又突发奇想,设计了如下诡异的电路。

3455ca26-e505-11ee-a297-92fbcf53809c.gif

当闭合开关 A 时,整个电路联通,开关 B 将会被吸下来,整个电路断开,电磁铁失去磁性,开关 B 又会弹上去,此时电路又联通,开关 B 又被吸下来。

就这样,开关 B 不断地快速地在开和闭之间循环进行,而我们始终没有去干预这个电路,因此该电路有了自反馈的特性。

由于开关 B 的来回震荡,我们将这种电路称为振荡器,由于它可以产生不断变化的电信号,就像时钟一样不停且规律地跑着,我们将这个装置又称为时钟。它所产生的交替的电信号称为时钟信号

五、RAM——保存信号

虽然有了加法器,但是输入的数字从哪里来?能不能先保存在某个地方呢?

我和小宇经过多次实验,发明了一个非常复杂的电路:

345b29b2-e505-11ee-a297-92fbcf53809c.gif

如果输入端为 1,改变"某控制端"信号(信号由 0 变化到 1 这个瞬间),则输出端变为 1,之后输出端仍然保持(存储)着刚刚的 1。 如果输入端为 0,改变"某控制端"信号,则输出端变为 0,之后输出端仍然保持(存储)着刚刚的 0。

如果想不明白也没关系,只要记住这个电路的设计,实现了一位的存储功能!我们叫它 1 位锁存器

34647774-e505-11ee-a297-92fbcf53809c.jpg

然后我们把多个锁存器组合起来,再加上一些 3-8 译码器,8-1 选择器等电路,就可以实现一个能保存 8 位二进制的存储器,并且可以随机地读写它, 我们把它叫做 RAM,简称为内存

34681eec-e505-11ee-a297-92fbcf53809c.jpg

这个组件通过再次组合,可以形成 N × M 的 RAM 阵列。比如我们可以表示一个 1024 * 8 的 RAM 阵列。

346d360c-e505-11ee-a297-92fbcf53809c.jpg

这表示存储容量为 1024 个单位,每个单位占 8 位。

为了更方便地表示,我们规定 1024 = 1K,8 位 = 1 字节(8 bit = 1 byte),那么我们就可以说,这个 RAM 的存储容量为 1K 个单位,每个单位占 1B。或者说,地址空间为 1K,存储容量是 1KB。 

此时这个 RAM 模块已经近乎完美了,我们甚至可以单独对其进行使用,将数据存入某个地址,将某个地址中的数据读出。

怎么方便人操作呢?只需要将地址输入、数据输入、写操作端分别接入一个控制面板,由开关来控制这些信号的输入是 1 还是 0 即可,然后再将数据输出接入一些灯泡方便观察,这样一个单独的可以手动操作的存储装置,就搞定啦。(下图中有彩蛋~)

34735f1e-e505-11ee-a297-92fbcf53809c.gif

有了可读写的内存,我们就可以事先把几个数字存储内存中了,接下来,我们能否让算术逻辑单元 ALU 自动地读取这个数字,进行加法运算呢?

六、程序——自动化

我们先引入一个新的组件,10 位计数器,这里的 Clk 就接入我们在第四部分讲的时钟信号,Clr 是清零端,具体效果下面动图一目了然。

3487b61c-e505-11ee-a297-92fbcf53809c.gif

计数器的输出就是 0,1,2,3,4,5,可以当作内存中的地址

我们把这个计数器,以及上面讲的 ALU 与 RAM 全部连在一起,尝试实现一个可以累积求和的装置。

我们想计算的是 1+2+3+4+5+6+7,   这个自动化的计算器是这么运行的

1、用控制面板在 RAM 的地址 0~6 处存上 1~7 这几个数字的,在上一节已经实现了。 2、当计数器的值是 0 时,数据 1 被输出到加法器进行计算,此时加法器 A=1,B=0,计算结果为 1,但记住锁存器存储的是上一次的加法器输出 0,这次的计算结果要等下一次锁存器遇到上升沿信号。 3、当计数器的值是 1 时, 数据 2 被输入到加法器,此时锁存器存储了上一次的计算结果 1,并将这个 1 输出给小灯泡,并同时回传到加法器的B,所以此时加法器 A=2,B=1,计算结果为 3 4、当计数器的值是 3 时,以此类推,请看下图 

34982a2e-e505-11ee-a297-92fbcf53809c.gif

我们将累加求和这个过程自动化了!之后如果想计算累加和,只需要用控制面板事先在内存里存好数据就可以了!是不是很方便?

七、程序指令

我们还想要更多的自动化!

现在这个装置,只能无脑地将 RAM 中的数据从头到尾一直累加下去,无法选择加哪个不加哪个,也无法选择什么时候停止。

比如我们 RAM 中的数据是这样的。

地址(16 进制)数据(10进制)
0x00...
0x0110
0x02...
0x0320
0x0430
0x05...
......

我们只想让 RAM 蓝色地址处的数据进行累加,其他地方的数据忽略,并且到 RAM 0x05 处就停止,该怎么做呢?

我们可以再增加一个 RAM,这个 RAM 里存放的数据,表示"指令"的含义!

我们先发明三种指令。

add:把 RAM 这个位置处的值进行累加 nop:忽略此处的值(也就是什么都不做) halt:停止(禁止计数器的值加一) 

那么要想达到上述功能,相应的这个指令 RAM 中的数据应该是这样的。

注意:下面指令 RAM 的地址和上面数据 RAM 的地址之间有一一对应关系!

地址
(16 进制)
指令RAM的值指令含义
0x00nop什么都不做
0x01add累加
0x02nop什么都不做
0x03add累加
0x04add累加
0x05halt停止
.........

我们需要引入一个控制单元,放在如下位置。

34bc9760-e505-11ee-a297-92fbcf53809c.gif

遇到 nop 指令(0x00),那输出就将锁存器的 W 位禁止,不允许锁存器写操作,这样累加结果就不会录入。

再比如遇到输入为 halt 指令(0x05),就将计数器的 EN 位禁止,不允许计数器 +1,这样就达到了停止的效果。

此时再让时钟信号震荡起来,就可以达到有选择地求和过程,并且在指定位置悬停。那现在我们就让时钟信号震动起来,看看这个过程吧。(此处只留关键组件) 

34c181a8-e505-11ee-a297-92fbcf53809c.gif

这个控制单元该怎么实现呢?我们知道,只要给出输入,给出输出,任何组件都可以造出来。本文就不再展开了。 

有了三个指令,我们知道了通过指令这种方式,配合各种复杂的控制器,即可实现将所有操作统统自动化。

接下来我们需要做的,就是设计控制器,以及约定好一大堆指令,使得通过这一大堆指令的排列组合,可以实现任何自动化的计算操作。 

我们将设计好的一大堆指令

称作指令集

我们将指令排列组合后可以实现的功能

称作程序

我们将指令的排列组合这个过程

称作编程

我们将排列组合这些指令的人

称作程序员

而我们将承载这一切的装置,叫做什么呢?

没错,这个破玩意,就是

【以上信息由艾博检测整理发布,如有出入请及时指正,如有引用请注明出处,欢迎一起讨论,我们一直在关注其发展!专注:CCC/SRRC/CTA/运营商入库】

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

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

相关文章

IDA反汇编工具详解之工程和窗口

文章目录 什么是反汇编反汇编的目的ID介绍打开创建工程IDA的基本规则窗口介绍反汇编窗口Names窗口Strings窗口十六进制窗口导出窗口导入窗口函数窗口结构体窗口枚举窗口段窗口签名窗口类型库窗口函数调用窗口问题窗口 什么是反汇编 程序员使用编译器、汇编器和链接器中的一个或…

位图与布隆过滤器

目录 一、位图 1、问题用位图来解决: 二、 布隆过滤器 1、将哈希与位图结合,即布隆过滤器 2.布隆过滤器的查找 3.布隆过滤器的删除 4.布隆过滤器优点 5、布隆过滤器缺陷 三、海量数据处理问题: 一、位图 问题1:给40亿个不…

【C++】详解 INT_MAX 和 INT_MIN(INT_MAX 和 INT_MIN是什么?它们的用途是什么?如何防止溢出?)

目录 一、前言 二、什么是 INT_MAX 和 INT_MIN ? 三、INT_MAX 和 INT_MIN 的用途 四、如何避免溢出问题出现 ? 五、 INT_MAX 和 INT_MIN 的运算 六、leetcode 常考面试题 七、共勉 一、前言 大家在平时刷 leetcode 的时候,肯定会碰到 溢出…

谷歌seo网络营销哪家好?

对于一个好的服务商的评判标准其实不难,保证结果,服务透明化,专业的服务,专业的指导,但怕就怕在你什么都不懂,只看重短期的结果,不懂谷歌seo的基础 一些做谷歌seo的反面例子也是需要了解的&…

上位机图像处理和嵌入式模块部署(qmacvisual三维测量)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在qmacvisual软件里面,关于三维测量方面的内容讲的比较少。目前来说只有一个插件完成这个功能。这可能也和作者自己当时的开发环境有关…

springcloud-Nacos 更强大的注册中心组件

Nacos 实际上从设计思想来说 Eureka 和 nacos 是一样的。 后者是Alibaba推出的 一款更强大 功能更丰富的注册中心 你可以理解为Eureka的高配版 技多不压身既然了解了 Eureka, nacos也来学习一下吧! 安装 首先nacos不像eureka 直接pom里面引个依赖就搞定了&#…

查看angular版本的问题The Angular CLI requires a minimum Node.js version of v18.13.

angular版本与node.js版本不匹配的问题 下载安装angular 查看版本,发现不匹配 安装指定版本即可 查看版本并运行

diandian数据聚合平台参数分析(水)

diandian数据聚合平台参数分析(水) 链接地址:‘暂无’(懂的都懂) 1. 打开网页链接,f12 打开控制台,任意搜索。 2 经过对比分析 需要分析参数key 3 通过debugger分析回溯 发现以下参数生成位置 …

许战海战略文库|向宗老致敬!祝娃哈哈未来三十年行稳致远

摘要:许战海咨询对宗老先生的崇高敬意与对民族品牌的坚定支持,许战海咨询运用其独特的战略视角深入剖析产品战略,旨在帮助娃哈哈有效利用自身的竞争优势,打造爆品,实现进一步的高速增长。 娃哈哈品牌当前所面临的种种挑战,其根源在于缺乏明确和有力的主…

智慧公厕:卫生、便捷、安全的新时代厕所变革

在城市快速发展的背景下,公共厕所的建设和管理变得越来越重要。智慧公厕作为厕所变革的一项全新举措,通过建立公共厕所全面感知监测系统,以物联网、互联网、大数据、云计算、自动化控制技术为支撑,实现对公共厕所的智能化管理和运…

论文阅读之AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

文章目录 原文链接主要内容模型图技术细节实验结果 原文链接 AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 主要内容 这篇文章的主要内容是介绍了一种新的计算机视觉模型——Vision Transformer(ViT),这是…

机器之心 | 基于DiT,支持4K图像生成,华为诺亚0.6B文生图模型PixArt-Σ来了

本文来源公众号“机器之心”,仅用于学术分享,侵权删,干货满满。 原文链接:基于DiT,支持4K图像生成,华为诺亚0.6B文生图模型PixArt-Σ来了 这个模型和 Sora 一样采用了 DiT 框架。 1 前言 众所周知&#x…

latex如何让标题section取消数字标号

解决方法——加一个*号 在LaTeX中,如果你想让section标题取消数字标号,可以使用section*代替section。section*将生成一个不带数字标号的节标题。 例如,你可以这样写: \section*{这是不带数字标号的节标题}这将生成一个标题&am…

protobuf原理解析-基于protobuf-c实现序列化,反向序列化

1.一个实例 前面介绍了使用protobuf的流程. (1). 定义proto文件来描述需要序列化和反向序列化传输的消息. (2). 借助proto-c,为proto文件生成对应的代码控制文件. (3). 程序借助生成的代码控制文件和protobuf-c动态库的支持实现类…

【C语言】数组结构体枚举联合详解

主页:醋溜马桶圈-CSDN博客 专栏:C语言_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.数据在内存中的存储 1.1 数据类型 1.2 整型在内存中的存储 1.2.1原码、反码、补码 1.2.2 大小端介绍 1.2.2.1 什么是大端小端 …

生骨肉冻干喂养有哪些优点?对猫身体好的生骨肉冻干分享

随着科学养猫知识的普及,生骨肉冻干喂养越来越受到养猫人的青睐。生骨肉冻干不仅符合猫咪的饮食天性,还能提供均衡的营养,有助于维护猫咪的口腔和消化系统健康。很多铲屎官看到了生骨肉冻干喂养的好处,打算开始生骨肉冻干喂养&…

module ‘mpmath‘ has no attribute ‘rational‘ 报错解决

**报错:**AttributeError: module ‘mpmath’ has no attribute ‘rational’ 解决: pip install mpmath1.3.0原因: 最新版本的mpmath有变动,直接使用旧版本即可

【virtio-networking 和 vhost-net 简介】

文章目录 Virtio 基本构建块Virtio spec 和 vhost 协议Vhost-net/virtio-net architectureVirtio-networking and OVS总结参考链接 Virtio 是作为虚拟机 (VM)访问简化device(如块设备和网络适配器)的 标准化开放接口而开发的。Virtio-net是一种虚拟以太…

some/ip CAN CANFD

关于SOME/IP的理解 在CAN总线的车载网络中,通信过程是面向信号的 当ECU的信号的值发生了改变,或者发送周期到了,就会发送消息,而不考虑接收者是否需要,这样就会造成总线上出现不必要的信息,占用了带宽 …

基于 Vue3打造前台+中台通用提效解决方案(中)

33、实现全屏展示功能 我们知道在原生dom上,提供了一些方法来供我们开启或关闭全屏: Element.requestFullscreen()Document.exitFullscreen()Document.fullscreenDocument.fullscreenElement一般浏览器 使用requestFullscreen()和exitFullscreen()来实现 早期版本Chrome浏…