408考研逐题详解:2009年第16题

2009年第16题

某机器字长为 16 位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一个字节为操作码字段,第二个字节为相对位移量字段。假定取指令时,每取一个字节 PC 自动加 1。若某转移指令所在主存地址为 2000H,相对位移量字段的内容为 06H,则该转移指令成功转移后的目标地址是( )

A. 2006H \qquad B. 2007H \qquad C. 2008H \qquad D. 2009H

解析

与本题相关的知识点如下:

  • 机器字长:计算机一次能处理的二进制数据位数,本题中机器字长为 16 位(2 字节)。

  • 主存按字节编址:主存储器的地址空间按字节(8 位)划分,每个地址对应 1 字节存储单元。

  • 程序计数器(PC):PC 用于存储下一条待执行指令的主存地址。取指令时,每读取一个字节,PC 自动加 1(按字节编址时,PC 增量为 1)。

  • 相对寻址方式:是一种指令寻址方式,把 PC 的值加上指令格式中的形式地址 A 而形成操作数的有效地址,即 EA=(PC)+A,其中 A 是目标地址相对于当前指令的下一条指令地址的位移量(这是大多数现代处理器的规定,如 x86、ARM),可正(向后偏移)可负(向前偏移),补码表示。

    • PC 的更新规则: 当 CPU 执行一条指令时,PC 会自动递增到下一条指令的地址(假设当前指令长度为 N 字节,则 PC = 当前指令地址 + N)。 因此,A 的偏移基准是更新后的 PC 值(下一条指令地址),而不是当前指令的地址。

    • 如果当前指令的地址是 X,指令长度为 N 字节,则: EA(目标地址)= (PC) + A = (X + N) + A

    • 偏移量 A 是一个带符号的整数,表示从下一条指令地址到目标地址的字节偏移量(或字偏移量,取决于架构)。 例如:若 A = +8,表示目标地址在下一条指令地址之后 8 字节的位置(正向偏移)。 若 A = -12,表示目标地址在下一条指令地址之前 12 字节的位置(负向偏移)。

      这种设计使得程序可以通过相对位置而非绝对地址跳转,从而实现位置无关代码(PIC)

相对寻址的典型例子:在循环中,A 通常为负数,使程序跳转回之前的代码(如 A = -(当前循环体长度))。

LOOP:
    ; 循环体(假设占 12 字节)
    SUB R1, 1
    BNE LOOP  ; A = LOOP的地址 - (当前指令地址 + 4) = -12

此外,相对寻址允许程序在内存中任意位置运行,因为跳转地址通过相对偏移计算,无需依赖绝对地址。所以,也应用于动态加载与重定位中。

本题中,每条指令占 2 个字节。转移指令的主存地址为 2000H,当执行该指令后,PC 自动递增到下一条指令地址,即 PC = 2000H+2H=2,002H。题目中为了降低此处的难度,特意说明“假定取指令时,每取一个字节PC自动加1”,即按照题目中的已知条件,每条指令由两个字节组成,当取指令时,取两个字节,则使 PC 自动加 2。

相对位移量 A=06H,则目标地址是:2002H+06H =2,008H。

本题答案:C。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CS创新实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值