算术逻辑单元ALU
❶ ALU简介
1)ALU的基本概念
ALU(Arithmetic and Logic Unit) ,全称算术逻辑单元。ALU算术逻辑单元,按照字面意思就是进行算术和逻辑运算的,这是运算器的核心功能。主要采用的是控制逻辑的设计方式。
2)ALU的结构
ALU的抽象结构与具体结构分别如下图左右所示
此处详细解释一下右边的具体ALU结构:可以看见右边黄框里的MS0S1S2S3就是来自控制单元CU的控制信号,用于控制ALU具体做哪一种运算。
- M用来区分运算的种类:是算术运算、逻辑运算还是辅助功能
- S0S1S2S3用于区分该种类下具体做哪种运算:由于24=16,每一个分类下可以做16种操作
例如:M=1,代表做逻辑运算;S0S1S2S3=1001,代表做逻辑运算分类下的异或运算。
同时可以看出来这个ALU的机器字长为4,因为输入(下方)与输出(上方)的信号字长均为4
❷ 电路基础知识
1)逻辑运算
1️⃣ 基础逻辑运算
2️⃣ 复合逻辑运算
逻辑表达式是对电路的数字化描述
关于异或的实际表达式如下,异或可以用于二进制加法与奇偶校验。
同或就是异或的取反,不多赘述
2)门电路
❸ 加法器的实现
1)一位全加器的实现
2)多位全加器的实现
1️⃣ 串行加法器
- 原理:只有一个全加器来实现多位全加,数据逐位串行送入加法器中进行运算,进位触发器用来寄存进位信号,以便参与下一次运算。
- 局限:由于数据是串行进入的,如果操作数长n位,那么就需要这个全加器进行n次加法操作,每次产生1位和结果,计算n次最终产生n位和结果。这将耗费大量时间。
2️⃣ 串行进位的并行加法器
串行进位又称为行波进位,每一级进位直接依赖于前一级进位,形似多米诺骨牌。
- 原理:把n个全加器串接起来,上一个全加器算出的进位就可以作为另一个全加器的输入
- 局限:运算速度很大程度上取决于每一位进位的产生速度。
3️⃣ 并行进位的并行加法器
各级进位信号同时形成,又称为先行进位、同时进位
-
原理:为了避免等待进位所导致的时间消耗,故选择让每一个全加器都不等待进位信息,而是自己去算进位信息(虽然套娃是复杂了点吧,但是自己动手丰衣足食!等进位更慢)
找到套娃公式中反复出现的因子(A与B)以及(A异或B),公式可以进一步简化写为:
-
随着进位的逐渐深入,套娃会导致逻辑表达式越来越复杂,相应的电路也越来越复杂。
3)加减法运算器
1️⃣ nbit 加法运算器
n bit加法运算器可以看做将n个全加器组合而成的一个复合器件,这里将直接通过nbit的输入给出nbit的输出,至于其间的原理可以看做是封装的内容。
2️⃣ nbit 加减法运算器
下半部分将加减法统一为加法,上半部分则是一个基本的nbit加法运算器,无符号与有符号的加减法都可以用改该电路实现。
但是注意溢出的判断上,无符号数与有符号数存在显著差别
-
nbit加减法运算器用于无符号数的加减法
(由于是对有符号数的加减,注意X/Y输入时是原码)
-
nbit加减法运算器用于有符号数的加减法
(由于是对有符号数的加减,注意X/Y输入时已经是补码)
4)标志位
1️⃣ 标志位的生成
ALU除了输出相加结果F以外,还可以生成并输出标志位,用于提供一些关于结果状态的的信息,
每次运算结束后,这些标志位都会被自动存入PSW程序状态字寄存器(在intel系列cpu中被称为标志寄存器)。以intel的8086CPU为例,PSW寄存器有16个bit,OF/SF/ZF/CF的存储位置如下图。
标志位主要由OF/SF/ZF/CF四种,其作用分别为:
-
OF(溢出标志 Overflow Flag):用于判断有符号数的加减运算是否发生了溢出,OF=1时说明发生了溢出
OF在无符号数的加减法中无意义
-
SF(符号标志 Sign Flag):用于判断有符号数加减法运算的正负性,SF=0表示运算结果为正数,SF=1表示运算结果为负数
SF在无符号数的加减法中无意义
-
ZF(零标志 Zero Flag):表示运算结果是否为0,ZF=1表示运算结果为0,ZF=0表示运算结果非零
-
CF(进位/借位标志 Carry Flag):用于判断无符号数的加减法是否发生了进位或者错位(即溢出) ,当CF=1时,说明无符号数发生溢出。
CF在有符号数的加减法中无意义
2️⃣ 标志位的应用
-
判断是否溢出
由于OF、CF分别只对有符号数与无符号数有意义,所以如果某一个输出所对应的OF=1、CF=0,若计算的是有符号数,则发生了溢出,若计算的是无符号数,则没有。比如下面这个例子。
-
比较两个数的大小 cmp
\