Skip to content

2018年 408 计算机组成原理 第 18 题

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

题目

按字节编址的计算机中,某 double 型数组 A 的首地址为 2000H,使用变址寻址和循环结构访问数组 A,保存数组下标的变址寄存器初值为 0,每次循环取一个数组元素,其偏移地址为变址值乘以 sizeof(double),取完后变址寄存器内容自动加 1。若某次循环所取元素的地址为 2100H,则进入该次循环时变址寄存器的内容是( )。

错因

A

把"偏移 / 元素大小"算成了"偏移 / 4"——也许把 double 当成了 4 字节(混淆了 float 和 double 的大小)。0x100 = 256,256 / 4 = 64;可能 25 是把 0x100 直接读成十进制 100 后再 / 4 得到,即 100/4 = 25——把十六进制当十进制读 + 元素大小记错,两个错叠加。

C

漏掉了"乘以 sizeof(double)"那一步——直接把偏移当变址值。,所以"看似下标 = 256"。但题面明说"偏移 = 变址 × 8",反过来推:变址 = 偏移 ÷ 8 = 256 / 8 = 32,不是 64。256 是把变址当 4 字节而非 8 字节得到的(256/4=64)。

D

把 0x100 直接当成十进制 100。0x100 实际上 = ,差了 156。看到十六进制三位 100 别想当然——H 后缀明示是 16 进制。

总解析

第一步:明确变址 → 地址的换算关系

题面给定:

  • 首地址 = 0x2000
  • sizeof(double) = 8 字节(按字节编址 + double 标准大小)
  • 当前元素地址 = 0x2100

第二步:算偏移

第三步:反解变址值

最终答案是 B(32)

逐次循环对照表(验证):

变址值元素地址 = 0x2000 + 变址 × 8
00x2000
10x2008
20x2010
......
310x20F8
320x2100 ← 命中
330x2108

易错点速查

  1. 0x100 ≠ 100——十六进制 0x100 = 256;养成习惯:地址带 H 后缀必须按 16 进制展开
  2. double = 8 字节,不是 4 字节(4 字节是 float)
  3. 偏移和变址的换算:变址 = 偏移 ÷ 元素大小(不是 ÷ 4 也不是直接等于偏移)

衍生:常见类型的字节大小(C 语言):

类型字节数
char1
short2
int / float4
double8
long long8

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数