Skip to content

2010年 408 计算机组成原理 第 13 题

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

题目

假定有 4 个整数用 8 位补码分别表示 r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个 8 位寄存器中,则下列运算中会发生溢出的是( )。

错因

A

可能误把 r1=FEH 当成无符号数 254、r2=F2H 当成 242,于是 254 × 242 远超 8 位无符号最大值 255,认为溢出。但题目明说是"8 位补码",FEH/F2H 是补码表示的负数(-2 / -14),它们的乘积只有 28,完全在 8 位补码范围内。关键错点:把"补码"当"无符号"读了。

C

可能逐位心算时把 r1=FEH 错成 -16 之类的数(看到末位 E 联想成 14 或更大);或者用错了"取反加一"的方向,把负数的真值估错。实际 r1 = ……不对——补码求真值的捷径:FEH = 1111 1110₂,最高位 1 表示负,按位取反加 1 得 0000 0010 = 2,所以真值 = -2。r1 × r4 = (-2) × (-8) = 16,不溢出。

D

容易把这一对误判成溢出——因为 r2、r4 看起来都是较大的"H 字头"数。但 r2 = F2H = -14、r4 = F8H = -8,乘积 = 112 = 70H,恰好在 8 位补码上界 +127 之内(边界值!)。心算时若高估了任一因子的绝对值(比如把 F2H 估成 -50 量级),就会得出 800+ 之类的结论。

总解析

第一步:把 4 个 8 位补码还原成真值

补码(H)二进制求真值(最高位 1 → 取反加 1 得绝对值)真值
r1 = FEH1111 1110−2
r2 = F2H1111 0010−14
r3 = 90H1001 0000−112
r4 = F8H1111 1000−8

第二步:算各乘积,对照 8 位补码表示范围

选项真值乘积是否在
A. r1 × r2(−2) × (−14) = 28✓ 不溢出
B. r2 × r3(−14) × (−112) = 1568✗ 远超 +127,溢出
C. r1 × r4(−2) × (−8) = 16✓ 不溢出
D. r2 × r4(−14) × (−8) = 112✓ 不溢出(贴近上界 +127)

第三步:得出答案

只有 B 的乘积 1568 超出 8 位寄存器能表示的范围,必然溢出。

最终答案是 B(r2 × r3)

判定要点

  • 8 位补码的真值范围是 ,记牢这个边界
  • 求负数补码真值的捷径:最高位是 1就按位取反加 1 得到绝对值
  • 乘法溢出判断直接看真值乘积是否超界,不用先做补码乘法再判

最后更新:

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