为什么我会收到 "expected register or immediate value" 错误?

Why am I getting an "expected register or immediate value" error?

这是我的 Lc3 汇编代码

.ORIG x3000
AND R0,R0, #0
AND R2,R2, #0
ADD R2,R2, #7
JSR SUB
ADD R2,R2, ASCII
ADD R0,R2,#0
TRAP x21
SUB   ADD R2,R2,#9
ADD R7,R7,#1
RET
HALT
ASCII .FILL x0000
.END

当我尝试汇编代码时,出现了这些错误

我知道 pass 1 指的是汇编过程的第一步,即向符号 table 添加变量及其所持有的值。我知道第 2 步是使用符号 table 替换值。 (使用 Lc3 Assembly 作为参考)

谁能解释为什么汇编程序在第一遍中尝试替换并导致错误?传递 1 不应该将 ASCII 识别为包含 x0001 的变量而不是尝试替换它吗?

您收到此错误是因为 LC3 的状态机只有两个版本的 ADD 命令。

  • 添加 R1、R2、R3
  • 添加 R1、R2、#7

大家可以看到我们可以把寄存器加在一起,也可以用ADD立即数。 ADD immediate 是我们将最后一个操作数用作 -16 到 15 之间的整数值的地方。


这意味着要使代码段正常工作,您需要先将变量加载到寄存器中。

.ORIG x3000
AND R0,R0, #0
AND R2,R2, #0
ADD R2,R2, #7
JSR SUB


LD R1, ASCII    ; load the value stored in ASCII into R1
ADD R2, R2, R1  ; R2 = R2 + R1


ADD R0,R2,#0
TRAP x21
SUB   ADD R2,R2,#9
ADD R7,R7,#1
RET

HALT    ; Remember to add this at the end of your running code
        ; or else the LC3 will execute the values stored in your
        ; variables 

ASCII .FILL x0001
.END