Skip to content

2024年 408 计算机组成原理 第 15 题

计算机组成原理2024年选择题2分

题目

下列关于整数乘法运算的叙述中,错误的是( )。

错因

A

A 在描述阵列乘法器——纯组合逻辑电路:所有部分积的产生和累加被全部展开成并行的与门 + 加法器树,输入信号一旦稳定输出就稳定。组合逻辑的特点是"输入变 → 输出立即跟着变",所以确实可以在一个时钟周期内得出结果(代价是面积大、功耗高)。A 的叙述正确——本题问"错误的",所以不选 A。

B

B 在描述用 ALU + 移位器循环实现的乘法。ALU 一次只能做一次加/减、移位器一次移一位,做 n 位 × n 位乘法时需要循环 n 次,每次至少占 1 个时钟周期。B 的叙述正确,不选 B。

C

C 在描述编译器对"变量 × 常数"的优化——把乘法展开成移位 + 加/减

由于常数已知,编译器在编译期就能展开成 1–3 条移位/加减指令,比通用乘法快。C 的叙述正确,不选 C。

总解析

题目问"错误的"叙述,D 是错的

逐项核验

选项内容对/错理由
A阵列乘法器 1 周期完成组合逻辑,输入稳定后输出立即稳定
BALU + 移位器无法 1 周期完成需多周期循环,每次累加 1 位部分积
C变量 × 常数可编译为移位+加减编译期常数展开
D两个变量乘运算无法编译为移位+加法的循环实现完全可以——这就是无硬件乘法器场景的标准做法

D 错在哪里

两个变量的乘法正是用"移位 + 加法的循环"实现的——这是无硬件乘法器场景下的经典软件实现(也是早期 8 位机做 16/32 位乘法的常见做法)。算法骨架(n 位 × n 位):

P = 0                       // 累加器(部分积之和)
for i = 0 to n-1 do
    if 乘数最低位 == 1 then
        P = P + 被乘数      // 当前位是 1,累加被乘数
    end if
    被乘数 = 被乘数 << 1    // 被乘数左移 1 位
    乘数  = 乘数  >> 1     // 乘数右移 1 位(取出下一位)
end for

每次循环 = 1 次条件判断 + 可能 1 次加法 + 2 次移位,全部由 ALU 和移位器完成——完全是"移位 + 加法的循环"

后来的 CPU 把这套循环用硬件展开成了"阵列乘法器"或"流水线乘法器",提速但不改变算法本质。D 把这种实现方式直接否定,所以是错的

最终答案是 D

乘法实现方式速记

实现谁做多少周期
阵列乘法器(组合电路)硬件全展开1 周期
ALU + 移位器循环硬件,按位累加n 周期
软件循环(移位 + 加)CPU 执行通用指令序列多于 n 周期
编译器常数优化编译器静态展开1–3 条指令搞定

"两个变量相乘"在没有硬件乘法器时也能做,靠的就是 D 否定掉的那个"移位 + 加"循环——所以 D 是错的。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题