这一篇文章我们要讲解的是,算术逻辑单元,本片的内容可能比较枯燥乏味,当然这篇Blog也是为了在以后回顾的时候能够快速的理解算术逻辑单元!
其中对应的内容如下所示:
- 算术逻辑单元-ALU
- 简单介绍ALU 英特尔74181
- ALU有两个单元 一个算术单元和一个逻辑单元
表示和存储是计算机中重要的功能,但是真正的目的是计算,有意义的处理数字!
例如说两个数字相加: 1+2 对应的操作由计算机的算术逻辑单元处理! 大家都简称为 ALU
ALU是计算机的数学大脑,当我们理解了对应的ALU的设计和功能之后,就理解了现代计算机的基石,因此这篇Blog是自我学习和总结算术逻辑单元比较重要的一篇!
当然,像刚刚上文所说的算术逻辑单元的解释可能还不够细致,算术逻辑单元就是 计算机里负责运算的组件 基本其他所有的组件都用到了它!
在当时最早的ALU是英特尔的74181,第一个完整封装在芯片里面的ALU,关于英特尔的74181就不在文中展示了,有兴趣的朋友可以自行百度一下!
其实关于ALU他是有两个单元的,一个是算术单元,另外一个是逻辑单元 听起来算术逻辑单元好像是那么一回事的样子!
01|算术单元
我们先来讲讲算术逻辑单元中的算术单元,负责计算机中所有的数字操作! 最好理解和最平常的就是 加减法的应用!
譬如说 1+1
这种就叫做增量运算,我们可以使用晶体管一个个拼接起来,但是可能会复杂得令人难以理解! 当然,我这么说也是基于之前对晶体管的简单理解才这么说的,但是,我们可以利用抽象思维,使用对应的逻辑门来做,其中逻辑门中,最常用到的就是前几篇文章中所介绍到的,关键词:and,or,not,还有对应的XOR
你看类似于最简单的加法电路,是拿2个bit加在一起! 两个输入:A,B 一个输出:两数之和 对应的三个都是单个bit(0和1)
因此前三种可能如下:
InputA | InputB | Output |
---|---|---|
0 | 1 | 1 |
1 | 0 | 1 |
0 | 0 | 0 |
对应的二进制当中,0与false对应,1和true对应! 这组输入输出和XOR门的逻辑完全一样! 因此我们可以把XOR作为1位加法器
但是对应的第四种可能就是这样的了
InputA | InputB | Output |
---|---|---|
1 | 1 | 2 |
但是二进制中没有对应的2,因此就需要考虑进位的问题了! 进位之后为 10 因此其实真正的输出一部分为0 我们需要额外的线作为 进位 对应的只有1+1的时候进位才为true 算出来的结果用1bit存不下! 因此我们可以使用逻辑门做这个事情,使用逻辑门组成抽象化的组件半加器!
此时两个输入对应的两个输出,可能你会好奇的是为什么会有两个输出,其中的一个输出为进位,当进位true的时候才能够算总和!
如果说超过了1+1的运算半加器失效了,就需要使用到全加器 这样一来 半加器输出了进位和下面的三个加在一起! 上个结果的进位输入到第二个半价器,最后一个OR门检查进位是不是true,这样就做出了全加器! 这样算8bit其实也是可以的,思路如下所示:
我们从 A 和 B 的第一位开始
叫 A0 和 B0 好了,现在不用处理任何进位,因为是第一次加法,现在不用处理任何进位,因为是第一次加法,所以我们可以用半加器,来加这2个数字,输出叫 sum0,现在加 A1 和 B1,因为 A0 和 B0 的结果有可能进位,所以这次要用全加器,除了 A1 和 B1,还要连上进位,以此类推来计算,注意到每个金卫士怎么连接到下一个全加器的,因此叫做8位行波进位加法器!
但是如果说,第9位有进位的话,那么就会出现 溢出 的问题! 两数之和太大了,超过了用来表示的值!
其实我们玩吃豆人,玩到了256关,就会出问题了,对应的算术逻辑单元就会溢出,这也是厉害玩家的代表
如何解决这个问题,我们需要更多位的全加器,但是对应的问题就是需要更多的逻辑门,每次仅为都需要时间,这样一来效率可能没有那么高了!
当然现在来看的话,现在的移动设备和所谓的处理器的计算效率已经不可同日而语,现在计算机用的加法电路有所不同,叫做 超前进位加法器 更加的迅速,对应的所做的事情是一样的,都是将二进制数相加!
ALU的算术单元可以做的操作不仅仅是加法,当然还有一些,分别为:
- 加法
- 带错位的加法
- 减法
- 带错位的减法
- 增量
- 减量
- negate建立临时对象赋值给另外的对象,赋值之后并且销毁
其实很明显的就能够看出没有乘法和除法! 没有对应的乘法和除法是因为可以将乘法使用多次加法来实现,虽然说比较慢,但是并非不能实现!
对应的笔记本和手机有更好的处理器,专门做乘法的算术单元,对应的乘法单元比加法复杂,没有什么魔法只是更多的逻辑门 然而便宜的处理器没有!
02|逻辑单元
对应的逻辑单元是ALU的另外一半,比如之前的and,or,not都是属于逻辑操作的,而逻辑单元就是负责逻辑这块的!
检查ALU输出是否为0的电路,使用一推OR门检测是否为1,之后再取反就可以知道了! 这其实是一个高层次的概括!
之前说到的英特尔74181只能处理4位的输入,当时我们之间举的例子是8位的,都是有利于我们理解整体概念的!
74181用了大概70多个逻辑门,但是不能够处理乘除相关的操作! 向小型迈出了一大步,对应的计算机也更加的便宜了! 8位的ALU如果说要做的话可能需要几百个逻辑门,因此工程师们不想用ALU做那些事情,使用的是类似于V的处理模型,用的是计算机的操作代码执行操作 操作代码会告诉ALU做什么操作,对应的还会有标志符的输出!
虽然说这篇文章写的虽然不够直观清晰,这也是我在不断学习过程中总结的,之后我会对本篇文章进行内容的修改和补充,如果你有更好的意见或者意见,请在评论区告诉我!
网友评论