LEA指令如何存储A的地址?

How does LEA instruction store address of A?

这是基于这个问题 LEA instruction

这是代码段我有一个问题

.ORIG X3700
 LEA R0, A
 .....
  A .FILL X1234

@Paul R,回答者,说"The origin of the code is x3700, and you have 12 instructions, so the address of A will be x3700 + x0C = x370C. As you guessed, LEA R0,A loads the address of A into R0, so R0 will contain x370C after that first instruction has been executed."

我同意Paul所说的第一部分,他对A地址是x370C的推理。这就说得通了。

我对下一部分感到困惑,即 "LEA R0, A loads the address of A into R0"。这是我参考的关于 LEA 指令的幻灯片。 Lc3 LEA, 5-23

与 ADD 和 AND 指令不同,LEA 指令只有一种模式。(参考指定了 ADD 和 AND 的两种模式。

从这个图中,LEA的第二部分,A应该是PCoffset 9。但是A的值是4660(十进制)来自,A .FILL X1234,这超出了PCoffset 9的范围,这是 - 256 至 255)。
谁能解释这是怎么回事?我是否使用了错误的图表作为参考?还有其他LEA模式吗?

任何时候您将 PCoffset 视为操作码操作数

LEA R2, A    ; Loads the memory location of A into R2
             ; LEA, DR, PCoffset9

它告诉您,当您的代码被汇编时,它实际上并没有将标签 'A' 放入您的 LEA 命令中。


取下面的代码:

.ORIG X3700     ; Not a code line in the simulator, only used by the assembler
LEA R0, A       ; Line 1, starting at x3700
HALT            ; Line 2
A .FILL X1234   ; Line 3, located at x3702
.END            ; Not a code line in the simulator, only used by the assembler

现在在模拟器中,LEA 行实际上是这样的:

1110 000 000000001    ; Opcode 1110 is LEA
                      ; 000 is our register R0
                      ; 000000001 gives us how many memory locations away A is

这就是偏移量的意思。它会询问 "How many blocks of memory is A away from me?" 问题,如果我们的变量 'A' 距离太多块,那么我们会得到一个错误,因为我们无法在偏移量中表示该值。