计算机组成原理 第二章 2.3~2.6
一、知识框架总览
第二章 2.3~2.6 的主线是“运算方法 + 运算部件”两条线索:
- 运算方法:定点乘法、定点除法、浮点加减法,核心是“如何用加法器和移位器实现乘除与浮点运算”。
- 运算部件:逻辑运算、ALU(多功能算术/逻辑运算单元)、内部总线、定点运算器基本结构,核心是“数据通路如何组织、控制信号如何产生”。
二、2.3 定点乘法运算
2.3.1 基本思想
定点乘法本质是“移位 + 相加”的重复过程。设被乘数为x,乘数为y,则:
x×y=x× (yn-12n-1 +yn-22n-2 + … +y020 )
即根据乘数每一位的取值决定是否累加被乘数,每处理一位就把部分积右移一位。硬件上只需“加法器 + 移位寄存器 + 控制逻辑”。
2.3.2 原码一位乘法
- 符号处理:符号位单独处理,结果符号 = 两操作数符号的异或。
- 数值部分:取绝对值做无符号乘法,采用“部分积右移”方式。
- 运算规则:乘数最低位为 1 则部分积加被乘数,为 0 则加 0;然后部分积与乘数联合右移一位。
- 结果位数:两个 n 位定点小数相乘,结果为 2n 位,需注意小数点位置与溢出判断。
原码一位乘的优点是规则简单、易于理解;缺点是符号与数值分开处理,硬件上需要额外的符号处理逻辑。
2.3.3 补码一位乘法(Booth 算法)
补码乘法可直接对带符号数运算,符号位参与运算,无需单独处理符号。Booth 算法根据乘数相邻两位yiyi-1 的组合决定操作:
| yi | yi-1 | 操作 |
|---|---|---|
| 0 | 0 | 部分积加 0,右移一位 |
| 0 | 1 | 部分积加 [x]补,右移一位 |
| 1 | 0 | 部分积加 [-x]补,右移一位 |
| 1 | 1 | 部分积加 0,右移一位 |
要点:
- 乘数末位后需附加一位y-1,初值为 0。
- 移位为算术右移,保持符号位不变。
- n 位乘数需进行 n 次“判断—加减—移位”,最后一步通常只加减不移位(视教材约定)。
- Booth 算法天然支持符号位参与运算,是补码乘法的标准实现方式。
2.3.4 阵列乘法器
阵列乘法器用组合逻辑阵列并行产生所有部分积并逐级相加,速度快但硬件量大。其结构可看作“与门阵列产生部分积 + 全加器阵列完成累加”,属于典型的空间换时间设计。
2.3.5 易错点提示
- 原码乘与补码乘的移位方向、符号处理方式不同,不要混用。
- 补码乘法中加 [-x]补 时要注意求补规则(连同符号位一起取反加 1)。
- 结果位数与小数点位置要结合定点小数/定点整数的约定判断。
三、2.4 定点除法运算
3.1 基本思想
定点除法是乘法的逆运算,本质是“比较—减—左移”的重复过程。需先判断是否溢出:定点小数除法要求 |被除数| < |除数|,否则商溢出。
3.2 原码恢复余数法
- 符号单独处理,数值部分取绝对值相除。
- 每次用余数减去除数:若余数为负,说明“不够减”,商上 0,并恢复余数(加回除数);若余数为正,商上 1。
- 然后余数与商联合左移一位,继续下一位。
- 缺点:不够减时需要恢复余数,操作步数不固定,控制较复杂、速度较慢。
3.3 原码加减交替法
为克服恢复余数法步数不固定的缺点,采用“加减交替”:
- 余数为正时,商上 1,下一步做减法(余数左移后减除数)。
- 余数为负时,商上 0,下一步做加法(余数左移后加除数)。
- 无需恢复余数,步数固定,硬件实现更规整。
该方法与原码恢复余数法在数学上等价,但执行效率更高,是原码除法的常用实现。
3.4 补码除法
补码除法中符号位参与运算,商和余数均为补码形式。判断“够减”不再看余数符号,而要看余数与除数符号是否相同:
- 余数与除数同号,说明够减,商上 1。
- 余数与除数异号,说明不够减,商上 0。
- 商的末位需按教材约定进行“末位恒置 1”或修正处理。
补码除法省去了符号单独处理,但判断逻辑和修正规则更易出错,复习时要重点掌握判断条件与移位规则。
3.5 易错点提示
- 除法前必须做溢出判断(|被除数| < |除数|)。
- 恢复余数法与加减交替法的“商位取值”和“下一步加减”要对应清楚。
- 补码除法的“够减”判断依据是符号关系,不是余数正负的直观含义。
四、2.5 定点运算器的组织
4.1 逻辑运算
运算器不仅能做算术运算,还能完成逻辑运算,常见包括:
- 逻辑与(AND):按位与,常用于掩码、清零特定位。
- 逻辑或(OR):按位或,常用于置位。
- 逻辑非(NOT):按位取反。
- 逻辑异或(XOR):按位异或,常用于比较、求反、奇偶校验。
逻辑运算按位独立进行,不产生进位,因此实现简单,通常与算术运算共用 ALU 的数据通路。
4.2 多功能算术/逻辑运算单元(ALU)
ALU 是运算器的核心部件,能够完成加、减、与、或、异或等多种运算。其关键设计思想是:
- 用函数发生器根据操作控制信号S3~S0 选择不同的运算功能。
- 用并行进位链(先行进位)提高加法速度,常见有组内并行、组间并行等结构。
- 典型芯片如 74181(4 位 ALU),通过模式控制端M区分算术运算与逻辑运算。
74181 的功能特点:
- M= 1 时为逻辑运算,M= 0 时为算术运算。
- 通过S3~S0 选择 16 种运算功能。
- 提供进位产生/传播信号,便于多片级联构成更宽位数的 ALU。
4.3 内部总线
内部总线是运算器内部各部件之间传送数据的公共通路。常见组织方式:
- 单总线结构:所有部件挂在一条总线上,同一时刻只能有一个数据传送,需分时复用,速度较慢但结构简单。
- 双总线结构:可同时传送两个操作数,减少冲突,提高效率。
- 三总线结构:可同时提供两个操作数并写回结果,速度最快,硬件开销最大。
总线结构的选择需要在速度与硬件成本之间折中,是运算器组织设计的重要内容。
4.4 定点运算器的基本结构
定点运算器通常由以下部分组成:
- 算术逻辑单元(ALU):完成算术与逻辑运算。
- 寄存器组:存放操作数、中间结果和运算结果,如通用寄存器、暂存寄存器。
- 移位器:完成左移、右移,支持乘除运算与规格化。
- 内部总线:连接各部件,完成数据传送。
- 控制逻辑:根据指令产生运算控制信号与寄存器读写信号。
- 状态寄存器/标志位:记录进位、溢出、零、符号等结果特征。
其数据通路可概括为“寄存器 → 总线 → ALU → 移位器 → 寄存器”的循环,控制信号决定每一步的数据流向与运算功能。
五、2.6 浮点运算方法和浮点运算器
5.1 浮点数的表示回顾
浮点数一般表示为:
N=M×RE
其中M为尾数(决定精度),E为阶码(决定范围),R为基数(通常为 2)。浮点运算需分别处理阶码和尾数。
5.2 浮点加法、减法运算的五个步骤
浮点加减法的核心是“先对齐阶码,再对尾数运算,最后规格化”。标准流程如下:
- 对阶:求阶差 ΔE=Ex −Ey,将小阶向大阶看齐,小阶数的尾数右移 ΔE位,阶码增大到与大阶相同。右移时舍去的低位需保留,供后续舍入使用。
- 尾数求和/求差:阶码对齐后,对尾数进行加或减运算(通常用补码加法实现减法)。
- 规格化:使结果尾数满足规格化形式。左规:尾数溢出或高位无效时左移,阶码相应减小;右规:尾数运算结果溢出(如双符号位为 01 或 10)时右移一位,阶码加 1。
- 舍入:对右移或规格化过程中舍去的位进行处理,常见方法有“0 舍 1 入”法、“恒置 1”法、就近舍入(四舍六入五成双)等。
- 溢出判断:根据阶码是否超出表示范围判断上溢或下溢。阶码上溢表示结果超出浮点数范围,需作溢出处理;阶码下溢通常按机器零处理。
5.3 对阶与规格化的关键细节
- 对阶原则:小阶向大阶看齐,避免大阶数尾数左移导致高位丢失。
- 对阶右移:尾数右移会损失精度,因此需保留附加位参与后续舍入。
- 左规:尾数出现 00.0… 或 11.1… 形式时左移,直到满足规格化要求,同时阶码减 1。
- 右规:尾数求和产生进位导致溢出时右移一位,阶码加 1,一般只需一次右规。
- 舍入与溢出顺序:先规格化、再舍入,舍入可能再次引起溢出,需再次判断。
5.4 浮点乘除法简述
- 浮点乘法:阶码相加,尾数相乘,结果规格化并舍入。
- 浮点除法:阶码相减,尾数相除,需判断除数是否为 0、是否溢出,结果规格化并舍入。
5.5 浮点运算器的组成
浮点运算器通常包括:
- 阶码运算部件:完成阶码加减、比较,判断对阶方向与溢出。
- 尾数运算部件:完成尾数加、减、乘、除,通常复用定点 ALU。
- 规格化与舍入部件:完成左规、右规及舍入处理。
- 寄存器组与控制逻辑:存放操作数、中间结果,产生各步控制信号。
由于浮点运算步骤多、控制复杂,实际实现中常采用流水线或专用浮点协处理器来提高性能。
5.6 易错点提示
- 对阶方向搞反(必须小阶向大阶看齐)。
- 规格化时阶码增减方向与尾数移位方向要对应一致。
- 舍入后可能再次溢出,不能遗漏二次判断。
- 上溢与下溢的处理方式不同,下溢一般按机器零处理。
六、复习要点速记
| 知识点 | 核心口诀 |
|---|---|
| 原码一位乘 | 符号异或,数值右移累加 |
| 补码一位乘 | 看相邻两位,加 [x]补 或 [-x]补,算术右移 |
| 原码除法 | 恢复余数法步数不定,加减交替法步数固定 |
| 补码除法 | 看余数与除数是否同号判断够减 |
| ALU | M 区分算术/逻辑,S3~S0 选功能,先行进位提速 |
| 内部总线 | 单总线简单慢,多总线快但贵 |
| 浮点加减 | 对阶 → 尾数运算 → 规格化 → 舍入 → 溢出判断 |
建议复习时结合教材例题,手算一遍原码/补码乘法、加减交替除法以及一道浮点加减法题,重点体会“移位方向、符号处理、规格化与舍入”这几个高频失分点。