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, 1BNE LOOP ; A = LOOP的地址 - (当前指令地址 + 4) = -12
此外,相对寻址允许程序在内存中任意位置运行,因为跳转地址通过相对偏移计算,无需依赖绝对地址。所以,也应用于动态加载与重定位中。
本题中,每条指令占 2 个字节。转移指令的主存地址为 2000H,当执行该指令后,PC 自动递增到下一条指令地址,即 PC = 2000H+2H=2,002H。题目中为了降低此处的难度,特意说明“假定取指令时,每取一个字节PC自动加1”,即按照题目中的已知条件,每条指令由两个字节组成,当取指令时,取两个字节,则使 PC 自动加 2。
相对位移量 A=06H,则目标地址是:2002H+06H =2,008H。
本题答案:C。