Skip to content

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

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

题目

下列寻址方式中,最适合按下标顺序访问一维数组元素的是( )。

错因

A

相对寻址:EA = (PC) + 偏移。专门用于指令跳转/分支(让分支目标随程序位置移动),与"数据数组访问"完全两个用途。把"相对"听成"按某个基准变化"就可能误选。

B

寄存器寻址:操作数直接放在寄存器中(EA 就是寄存器编号)。数组元素散布在主存里,不可能全装进寄存器;况且每访问一个元素就要换寄存器编号,本质上是死循环展开而不是"按下标遍历"。

C

直接寻址:EA = 指令中给的形式地址,地址固定不变。数组遍历需要"地址 + 下标 × 元素长度"动态变化,直接寻址无法在不修改指令的情况下让地址变化——只能为每个数组元素单独写一条指令。

总解析

变址寻址的定义

把它套到"按下标顺序访问 a[0], a[1], a[2], …" 的场景:

角色安排
形式地址数组首地址(如 a 的基址)—— 编译期固定
变址寄存器装"下标 × 元素大小"—— 运行时按 0、4、8、12……递增

每次循环只需修改变址寄存器的值(一条 ADD 或 INC),就能访问下一个元素。地址灵活、指令本身不需要重写——这正是变址寻址的设计初衷。

与其它三种对比

寻址方式EA 公式是否适合数组遍历
相对寻址✗ 偏移基准是 PC,与数据无关
寄存器寻址操作数 = 寄存器内容✗ 数据不在主存
直接寻址(固定)✗ 一条指令对应一个固定地址
变址寻址基址固定 + 下标变化,正好对应数组

最终答案是 D(变址寻址)

经典代码片段(伪汇编演示变址访问数组):

    MOV R1, #0          ; R1 = 下标 i = 0
LOOP:
    LOAD R2, a(R1)      ; 取 a[i],EA = a + (R1)
    ADD  SUM, R2        ; 累加
    ADD  R1, #4         ; i ++(int 占 4 字节)
    CMP  R1, #LEN
    JNE  LOOP

a(R1) 这种汇编记号就是变址寻址:a 是形式地址(数组基址),R1 是变址寄存器(下标 × 步长)。

最后更新:

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

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