我收到“在第 1 行,预期表达式”错误,我不知道为什么。
我正在使用 nand2tetris 的 CPU 模拟器。我尝试将第 1 行更改为 5 行,但并没有解决问题。我只是不明白首先是什么问题。
@j
D=5;
@i;
M=1;
@5
@i
D=M
D=D-A;
@END
D;JGT
@j
@1
M=M-A
@i
@1
M=M+A
@LOOP
0;JMP
我要重新创建的是这个循环: J=5 for(i=1; i<5; i++) { j-- }
我收到“在第 1 行,预期表达式”错误,我不知道为什么。
我正在使用 nand2tetris 的 CPU 模拟器。我尝试将第 1 行更改为 5 行,但并没有解决问题。我只是不明白首先是什么问题。
@j
D=5;
@i;
M=1;
@5
@i
D=M
D=D-A;
@END
D;JGT
@j
@1
M=M-A
@i
@1
M=M+A
@LOOP
0;JMP
我要重新创建的是这个循环: J=5 for(i=1; i<5; i++) { j-- }
乍一看,有几个问题突然出现。
首先,D=5 不是有效的 Hack 操作。如果要将 5 加载到 D 中,则必须先将其加载到 A 中,然后再移动到 D 中:
@5
D=A
第二, ; 是跳转分隔符,后面应该跟一个跳转条件(比如 JEQ,或者 JMP 表示无条件跳转)。您有几行(包括第 1 行),其中有 ; 但没有跳跃条件。这些应该被删除。
最后,您可能应该查看有关 Hack 汇编语言语法的书籍页面,以确保您清楚它是如何工作的。特别是,在上面的代码中,你没有指定你的跳转目标,比如 END 和 LOOP。这是通过 (LABEL) 构造完成的。