1. 引言
在计算机组成原理中,运算器是 CPU 的核心部件之一,负责完成算术运算与逻辑运算。其中,定点乘法、定点除法是整数运算的基础,而浮点运算则是科学计算、图形处理等场景的关键。本文将从定点乘法与除法的算法原理出发,逐步过渡到定点运算器的组成,再深入浮点数的表示与浮点运算方法,最后介绍浮点运算器的结构设计。
2. 定点乘法运算
2.1 原码一位乘法
原码一位乘法是最直观的乘法实现方式。其核心思想是:符号位单独处理,数值位按位相乘并累加。
设被乘数xxx与乘数yyy均为原码表示:
- 乘积的符号位:xs⊕ysx_s \oplus y_sxs⊕ys(异或)
- 乘积的数值位:∣x∣×∣y∣|x| \times |y|∣x∣×∣y∣
计算过程采用「移位 + 相加」的方式,每次根据乘数当前最低位决定是否加上被乘数,然后部分积右移一位。
例:x = 0.1101, y = 0.1011(原码,数值位 4 位) 部分积初值:0.0000 乘数最低位为 1 → 加 x:0.1101,右移 → 0.0110 1 乘数次低位为 1 → 加 x:1.0011,右移 → 0.1001 11 乘数第三位为 0 → 加 0:0.1001,右移 → 0.0100 111 乘数最高位为 1 → 加 x:1.0001,右移 → 0.1000 1111 结果:符号位 0⊕0=0,数值位 0.100011112.2 补码一位乘法(Booth 算法)
补码乘法可以直接对带符号数进行运算,无需先转换为原码。Booth 算法通过判断乘数相邻两位的差值来决定加/减被乘数:
| yiy_iyi | yi−1y_{i-1}yi−1 | 操作 |
|---|---|---|
| 0 | 0 | 加 0 |
| 0 | 1 | 加[x]补[x]_{补}[x]补 |
| 1 | 0 | 减[x]补[x]_{补}[x]补(即加[−x]补[-x]_{补}[−x]补) |
| 1 | 1 | 加 0 |
Booth 算法的优势在于:符号位参与运算,且对于连续的 1 可以减少加法次数,提高效率。
2.3 阵列乘法器
为了提升乘法速度,硬件上常采用阵列乘法器。它由多个全加器按二维阵列排列,所有部分积同时产生并逐级相加,实现并行计算。其延迟与位数的平方成正比,但相比串行移位加法,速度提升显著。
3. 定点除法运算
3.1 原码一位除法
原码除法分为恢复余数法和加减交替法(不恢复余数法)。
恢复余数法:每次试减后若余数为负,则恢复原余数,商上 0;若余数为正,商上 1。
加减交替法:根据上次余数的符号决定本次是加还是减,避免了恢复操作,效率更高。
加减交替法规则: - 余数为正 → 商上 1,下一步减除数 - 余数为负 → 商上 0,下一步加除数 - 最后若余数为负,需恢复一次3.2 补码一位除法
补码除法同样可以采用加减交替法,但判断规则需考虑符号位:
- 被除数与除数同号 → 做减法
- 被除数与除数异号 → 做加法
- 余数与除数同号 → 商上 1;异号 → 商上 0
补码除法的商符在运算过程中自然形成,无需单独处理。
3.3 除法溢出判断
定点除法必须判断是否溢出:当被除数绝对值大于等于除数绝对值时,商将超出表示范围,此时应产生溢出标志,终止运算。
4. 定点运算器的组成
定点运算器是完成定点算术与逻辑运算的部件,其基本组成包括:
- 算术逻辑单元(ALU):执行加、减、与、或、异或等运算
- 累加寄存器:存放操作数与运算结果
- 数据缓冲寄存器:暂存从内存读取的数据
- 状态条件寄存器:保存进位、溢出、零、符号等标志
- 通用寄存器组:提供多操作数的高速存取
- 多路选择器与总线:控制数据流向
定点运算器的设计重点在于数据通路的组织与控制信号的时序配合,常见结构有单总线、双总线和三总线结构,总线越多并行度越高,但硬件成本也越大。
5. 浮点运算方法
5.1 浮点数的表示
浮点数由阶码和尾数两部分组成,通用格式为:
N=M×2EN = M \times 2^{E}N=M×2E
其中MMM为尾数(决定精度),EEE为阶码(决定范围)。IEEE 754 标准定义了单精度(32 位)和双精度(64 位)格式:
| 类型 | 符号位 | 阶码 | 尾数 |
|---|---|---|---|
| 单精度 | 1 位 | 8 位 | 23 位 |
| 双精度 | 1 位 | 11 位 | 52 位 |
5.2 浮点加减运算
浮点加减法的步骤可归纳为「对阶 → 尾数运算 → 规格化 → 舍入 → 溢出判断」:
- 对阶:求阶差ΔE=Ex−Ey\Delta E = E_x - E_yΔE=Ex−Ey,小阶向大阶看齐,尾数右移ΔE\Delta EΔE位
- 尾数加减:对阶后尾数按定点加减法运算
- 规格化:结果尾数需满足1/2≤∣M∣<11/2 \le |M| < 11/2≤∣M∣<1,左规或右规
- 舍入处理:常用「0 舍 1 入」或「恒置 1」法
- 溢出判断:检查阶码是否超出表示范围
5.3 浮点乘除运算
浮点乘除法的规则相对简单:
- 乘法:阶码相加,尾数相乘,结果规格化
- 除法:阶码相减,尾数相除,结果规格化
需要注意阶码运算可能产生溢出(上溢或下溢),以及尾数运算后的规格化与舍入。
6. 浮点运算器
浮点运算器(FPU)是专门处理浮点运算的部件,其结构比定点运算器复杂得多。典型组成包括:
- 浮点寄存器堆:存放浮点操作数
- 阶码运算部件:完成阶码的加减与比较
- 尾数运算部件:完成尾数的乘除与加减
- 规格化与舍入部件:对结果进行标准化处理
- 异常处理逻辑:检测上溢、下溢、除零等异常
现代处理器中,浮点运算器通常采用流水线设计,将浮点加减、乘除拆分为多个流水级,以提升吞吐率。例如经典的 x87 协处理器、以及现代 CPU 中的 SSE/AVX 浮点单元,都体现了这一设计思想。
7. 总结
本文系统梳理了计算机组成原理中运算器的核心内容:
- 定点乘法:原码一位乘法、Booth 补码乘法、阵列乘法器
- 定点除法:恢复余数法、加减交替法、补码除法与溢出判断
- 定点运算器:ALU、寄存器组、状态寄存器与总线结构
- 浮点运算:浮点数表示、加减法的对阶与规格化、乘除法的阶码运算
- 浮点运算器:阶码/尾数运算部件、规格化舍入、流水线设计