【计算机组成原理】2.2.1_4 算数逻辑单元ALU

2024-08-25 04:20

本文主要是介绍【计算机组成原理】2.2.1_4 算数逻辑单元ALU,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.2.1_4 算数逻辑单元ALU

00:00

各位同学大家好,在这个视频中我们会学习什么是算术逻辑单元ALU。首先我们会介绍ALU在计算机内部的一个作用,以及它需要支持哪些功能。紧接着我们会介绍ALU具体的实现原理,当然这个部分简要了解即可,考试不太可能考它的实现原理。最后我们会教大家怎么看懂ALU的图示。在考研真题当中有可能会给大家一个电路图作为题目的信息,在电路图当中可能会包含ALU这个部件。

00:35

好的,首先看一下ALU在计算机内部的一个作用。ALU是一个英文缩写,它的全称是Arithmetic and logic unit,翻译过来就是算术逻辑单元。我们知道CPU主要由控制器和运算器这样的两大部件组成。其中控制器负责解析指令,根据当前执行的这条指令的功能,向主机内部的其他部件发出控制信号。那这个控制信号也会发给运算器。接下来运算器会根据控制信号对相应的数据进行处理,比如说进行加减乘除等运算。

01:17

运算器的内部主要由这样的一些部件组成,首先会有一些通用寄存器用于存储正在参与运算的各种各样的数据,而这些数据的加减乘除运算会交给算术逻辑单元ALU去完成。ALU它是一种组合逻辑电路,这个电路实现了各种各样的运算功能,因此ALU它是运算器的核心,我把它标成了红色。除此之外,运算器内部还会有一个PSW程序状态字寄存器。这个寄存器会用于存储CPU的状态以及运算的状态等等各种各样的信息。

02:00

在这儿我们先不展开,在这个地方我们要强调的是算术逻辑单元ALU它是运算器的核心。因为这个电路部件实现了各种各样的运算功能。大家继续往后学习就会了解到,无论是加法、减法、乘法还是除法,这些运算的实现都需要基于加法来完成。因此ALU的核心是一个加法器。好,通过这张图我们了解到CPU由控制器和运算器组成,其中运算器的核心是ALU,而ALU的核心又是加法器,这两点可能在选择题当中进行考察。

02:47

好,现在我们了解到了ALU在CPU内部的一个地位和作用。ALU需要对数据进行处理,那么需要进行哪些类型的处理呢?也就是说ALU需要具备哪些功能呢?首先ALU需要支持一些基本的算术运算,比如加减乘除以及逻辑运算,比如与或非、异或移位等等。观察左边这个ALU的图示,它有两个输入的运算数,A和B分别是N个比特,以及这边会输出N比特的运算结果。在图示的右边这儿有M个比特的控制信号,这个控制信号是由控制器根据当前执行的指令发出的。结合刚才这个图示来看,假如当前执行的是加法指令,那么控制器就会把加法对应的控制信号发给ALU,那ALU这边接收到M个比特的加法信号之后,就会在输出端这个地方输出A加B的结果。

03:59

这个地方需要强调一点,ALU的这个控制信号总共有M个比特,那M的取值应该为多少呢?显然这个M的取值应该和ALU的功能总数有关系。假如说ALU支持K种功能的话,那么控制信号的位数M肯定要大于等于log 以2为底k的对数。比如某个ALU总共支持8种功能,那控制信号M就至少应该等于3比特。因为三比特刚好可以表示八种状态,也就分别对应8种功能。再比如上面这个思维导图当中,我们罗列了ALU的功能总数总共有算术运算四种,逻辑运算5种,其他的功能总共有两种,所以总共有11种功能。在这种情况下,控制信号M的位数应该至少等于4比特,只有4比特才能表示11种功能。好,这个是很常考的一个考点。

05:08

ALU除了支持算术运算和逻辑运算之外,还有可能支持其他的一些功能。比如说求补码和直送。来分别解释一下,首先求补码的功能就是把一个源码送入到ALU的某一个输入端,比如从B这一端输入,同时给出求补码的控制信号,那么输出端这个地方就可以得到这个源码所对应的补码。当我们把源码转变成补码之后,就可以让计算机硬件更方便地实现加减运算。好,这是求补码的功能。

05:48

再来看直送,直送的功能就是不对这个数据进行任何处理,让他怎么进就怎么出。比如这端输入0001,同时给出直送的控制信号,那么输出端这边也会输出0001,没有对数据进行任何处理,直接让他通过ALU送出去。好,这是直送的功能。算术运算和逻辑运算的其他这些功能,大家会通过之后的学习有更深入的了解。

06:20

这是ALU需要实现的一些功能,接下来我们简单了解一下ALU的电路原理图。一个比较简单的实现方法是这样的,ALU有A、B两个运算数,我们可以在ALU的内部设置K个功能电路,比如这个电路实现加法,这个电路实现乘法,这个电路实现与,这个电路实现移位。每一个电路对应一种具体的功能,那我们可以把A和B两个运算数分别送到每一个电路的输入端,比如A这个运算数它会被送到乘法电路,B这个运算数也会被送到乘法电路。经过乘法电路的处理之后,就可以输出乘法运算的结果。同样的道理,我们把A和B两个数同时送到其他的运算电路这儿,比如经过与运算电路的处理,这儿就可以输出A和B逐位相与的一个结果。

07:27

接下来我们可以把这K个功能电路的输出结果通通接入到多路选择器的输入这一端,同时用M个比特的控制信号去决定到底要让多路选择器的哪一条线路输出。比如我们可以规定当我们只有四个功能的时候,可以用两个比特去控制这个多路选择器,当控制信号为00的时候,让加法电路的这个信号从输出端这输出出去,当控制信号为01的时候,让乘法的这个信号从多路选择器的这边输出出去,当控制信号为10的时候,让与运算的这个信号输出,当控制信号为11的时候,让移位运算的这个信号输出出去。

08:26

接下来把这个电路进行封装,隐藏内部的实现细节,就得到了我们之前介绍的ALU。这儿介绍的只是一种最简单的电路实现方式,大家有一个简单的了解即可。考试不会考这些电路细节,我们在考试当中更需要注意的是怎么去看懂ALU的这个图示。

08:50

之前我们说ALU肯定会有M个比特的控制信号,那这个M的取值和ALU支持的功能数量是相关的。M个比特必须要能够表示K种不同的状态,所以M需要大于等于log以二为底K的对数向上取整。另外ALU有两个运算数可以输入,以及一个运算结果被输出。运算数和运算结果的长度N比特和我们的计算机的机器字长是相同。应该这么说,计算机的机器字长就是由ALU的运算位数来决定的。所以像左边这个图当中,这台计算机的机器字长肯定就是N比特。

09:40

在有的题目当中有可能你还会看到ALU有这样的一些输出信号,分别叫ZF、OF、SF和CF。我们把绿色的这几个输出信号称为标志位,这些标志位表示了运算结果的特征。比如说ZF表示运算结果是否为零,OF表示有符号数的运算是否发生了溢出,SF表示的是有符号数的运算它到底为正还是为负,CF表示无符号数的运算是否发生溢出。这些标志位的信息通常会被送入到PSW程序状态字寄存器当中。

10:26

把这些标志位的信息写入PSW是有好处的。比如说当ALU完成一个乘法运算之后,计算机可以去检查PSW当中保存的OF这个标志位。如果OF标志位等于一,那么就说明刚才进行的这个乘法运算发生了溢出。也就是说这个乘法运算的N比特输出结果是错误的那在这种情况下,计算机就需要对这种异常的状态进行处理。总之ALU进行某一个运算之后,把这些标志位信息保存到PSW寄存器当中是有用的。在有的计算机系统当中,也会把PSW程序状态字寄存器称为标志寄存器,英文缩写叫FR, flag register。所以大家在做题的时候,如果看到标志寄存器,那你要知道它和PSW是一个东西,两个名字而已。

11:30

好,最后在这个图当中大家还会看到Cin和Cout这样的两个信号。Cin是进位输入信号,Cout是进位输出信号。大家可以类比之前学过的带标志位加法器,这两个信号大致了解一下就可以,不用过多的深究。好,上面介绍的这些就是考试可能会考察的一些重点。

11:54

我们来看一下2022年的一个统考真题。我们先不管这个题目说了什么,来看ALU的图示。这儿有一个ALU部件,A和B两个运算数分别是16比特以及运算结果F也是16比特。同时侧面这有一个虚线箭头,对应的是ALUOP,也就是ALU的控制信号。现在我们知道这个控制信号肯定来自于控制器,同时控制信号的位数需要大于等于log以二为底K的对数向上取整,其中K指的是ALU支持的功能数量。

12:41

好,再看另外这一边,这儿ALU还有一个输出,这个输出会送到FR,也就是标志寄存器这儿,所以蓝色的这条线它表示的就是ALU输出的一些标志信息。也就是SF、OF、ZF、CF。好,通过这节课的学习,相信ALU的图示相关的这个部分已经难不倒大家了。

13:11

好的,这个视频中我们介绍了算术逻辑单元ALU它的一个作用以及需要支持哪些功能。如果ALU总共支持K种功能,那么ALU的控制信号位数M就应该大于等于log以二为底K的对数向上取整这么多个比特。同时我们强调了ALU的两个运算数以及运算结果,它们的长度都是和机器字长相同的。

13:41

ALU可以对数据进行加减乘除、与或非等等各种各样的处理。在处理完数据之后,除了得到当前这次运算的结果之外,还会输出OF、ZF、SF、CF等等这些标志位的信息、而这些标志位信息会被自动的送入PSW程序状态字寄存器当中、在有的计算机系统当中,PSW又会被称为FR,也就是标志寄存器。

14:12

好,最后再次强调CPU由运算器和控制器组成,ALU是运算器的核心,而加法器又是ALU的核心,这有可能在选择题当中进行考察。关于ALU的实现原理,大家有个简要的了解即可,不需要过多的深究。好的,以上就是这个小节的全部内容。

这篇关于【计算机组成原理】2.2.1_4 算数逻辑单元ALU的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104529

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit