0

这是我的 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 是指组装过程的第一步,即添加变量以及它们在符号表中保存的值。我知道第 2 步是使用符号表替换值。(以Lc3 汇编为参考)

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

4

1 回答 1

1

您收到此错误是因为 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
于 2015-05-02T09:00:54.667 回答