R3 不应该保存地址 x3307 吗?

Shouldn't R3 hold address x3307?

我正在做 Question 7 的练习题

我高亮显示的地址不应该是x3307,不是x3308吗?

我的推理方式是(第 2 条指令前的 PC)=(第 1 条指令后的 PC)。

第一条指令后的PC是x3301。因此当第二条指令执行时,PC,x3301 将增加 6 到 x3307.

大家同意吗?还是我错过了什么,R3 实际上应该存储 x3308?

PC 相对偏移量应用于已经增加的 PC 之上,即 PC 的 "after" 值,或者换句话说,后续指令的地址。

来自 Patt & Patel 的附录 A,符号约定 (Table A.1) 对 PC 的描述如下:

Program Counter; 16-bit register that contains the memory address of the next instruction to be fetched. For example, during execution of the instruction at address A, the PC contains address A + 1, indicating the next instruction is contained in A + 1.

LEA 操作码的规范说:

An address is computed by sign-extending bits [8:0] to 16 bits and adding this value to the incremented PC.

所以当第二条指令被执行时'incremented PC'是0x3302。将 6 添加到 0x3308.