为什么我会收到 "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
这是我的 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