Appearance
题目
下列给出的部件中其位数(宽度)一定与机器字长相同的是( )。
I、ALU II、指令寄存器 III、通用寄存器 IV、浮点寄存器
错因
A
把 Ⅱ(指令寄存器)当成与机器字长相同。但指令寄存器的位数 = 指令字长——而指令字长不一定等于机器字长。例如某些 RISC 机定长 32 位指令,但机器字长可能是 64 位;变长指令机(x86)的 IR 通常按"最长一条指令"算,更与机器字长无关。
C
漏选 Ⅰ(ALU)但选了 Ⅱ。同样把 IR 当机器字长(错),且漏掉了 ALU——ALU 是数据通路的核心,要做整数运算,宽度必然 = 整数字宽 = 机器字长。
D
把 Ⅱ、Ⅲ、Ⅳ 都选上。三个判断都错:
- Ⅱ(IR)= 指令字长(不一定 = 机器字长)
- Ⅳ(浮点寄存器)通常更宽(32 位机的浮点寄存器常 64/80 位)
- 真正与机器字长一致的只有 Ⅰ ALU 和 Ⅲ 通用寄存器
总解析
机器字长的定义:CPU 一次能处理的二进制数据的位数 —— 等于整数运算单元的位宽和通用整型寄存器的位宽。
逐项判断:
| 部件 | 位宽决定因素 | 是否 = 机器字长 |
|---|---|---|
| Ⅰ ALU | 整数运算的位宽 | ✓ 必须 = 机器字长 |
| Ⅱ 指令寄存器(IR) | 指令字长 | ✗ 不一定(指令字长 ≠ 机器字长) |
| Ⅲ 通用寄存器(GPRs) | 整数寄存器的位宽 | ✓ 必须 = 机器字长 |
| Ⅳ 浮点寄存器 | IEEE 754 浮点格式宽度 | ✗ 不一定(常为 64 / 80 / 128 位) |
为什么 ALU 和 GPRs 必然等于机器字长:
机器字长本质上就是整数 ALU 的位宽——CPU 能一次"加 / 减 / 与 / 或"多少位,就叫机器字长。整数 GPRs 必须装下一个整数字,所以也是相同的宽度。两者是机器字长的定义对象,不可能不一致。
为什么 IR 和浮点寄存器不一定相同:
| 部件 | 与机器字长的关系 |
|---|---|
| 指令寄存器 IR | IR 装一条指令,宽度 = 指令字长。指令字长可以是机器字长的 0.5 / 1 / 2 倍,甚至变长(如 x86 指令 1~15 字节)。机器字长 32 位的处理器可能用 16 位指令、32 位指令、混合指令 |
| 浮点寄存器 | 浮点格式独立于整数字长。32 位字长机也常装 64 位浮点(IEEE 754 双精度)、80 位扩展精度(x87) |
最终答案是 B(Ⅰ、Ⅲ)。
对照表(典型 32 位机):
| 部件 | 位宽 |
|---|---|
| 机器字长 | 32 |
| ALU(整数) | 32 |
| 整数 GPRs(如 EAX、EBX) | 32 |
| 指令寄存器 IR | 通常 32(定长指令机),变长则按最长指令 |
| 浮点寄存器 | 通常 64(IEEE 754 双精度)或 80(x87 扩展) |
| 段寄存器 / 控制寄存器 | 16 / 32 / 64(视具体寄存器) |
易错点速查:
- 机器字长定义为整数运算单元位宽 → ALU 和 整数 GPRs 一定相同
- 指令字长 ≠ 机器字长 —— 单独的概念
- 浮点寄存器为支持双精度通常更宽,与机器字长无强约束