第 1 行出现“Expression Expected”错误。如何解决?
Posted
技术标签:
【中文标题】第 1 行出现“Expression Expected”错误。如何解决?【英文标题】:"Expression Expected" error on line 1. How to fix it? 【发布时间】:2019-05-28 07:11:58 【问题描述】:我收到“在第 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
【问题讨论】:
【参考方案1】:乍一看有几个问题。
首先,D=5 不是有效的 Hack 操作。如果要将 5 加载到 D 中,则必须先将其加载到 A 中,然后再移动到 D:
@5
D=A
第二,;是跳转分隔符,后面应该跟一个跳转条件(比如 JEQ,或者 JMP 表示无条件跳转)。您有几行(包括第 1 行),其中有 ;但没有跳跃条件。这些应该被删除。
最后,您可能应该查看有关 Hack 汇编语言语法的书籍页面,以确保您清楚它是如何工作的。特别是,在上面的代码中,你没有指定你的跳转目标,比如 END 和 LOOP。这是通过 (LABEL) 构造完成的。
【讨论】:
谢谢。我添加了标签构造,并根据您的建议更改了我的代码。但是我仍然遇到同样的错误,但现在在第 2 行,即 D=A... 我不明白这个错误是什么意思:/@5 D=A D=5 @i M=1 (LOOP) @5 @i D=M D=D-A @END D;JGT @j @1 M=M-A @i @1 M=M+A @LOOP 0;JMP (END)
我再次检查了代码。我改变了它。现在我得到了同样的错误,但在第 13 行......这是我再次调用@j 的时候......因为我一开始就取消了@j,我以后如何再次引用相同的值? @5 D=A @i M=1 (LOOP) @5 @i D=M D=D-A @END D;JGT @j @1 M=M-A @i @1 M=M+A @LOOP 0;JMP (END)
首先,如果您将代码示例缩进 4 个空格以便它显示为预格式化的代码块,将会很有帮助
其次,M=M-A 在 hack 中不是一个有效的 CPU 操作。您应该查看docs.wixstatic.com/ugd/… 中的幻灯片,以刷新您对可以执行哪些操作的记忆。最后,我认为您正在尝试执行 j = j - 1。有一种更简单的方法可以做到这一点。
我可能完全愚蠢,但我一遍又一遍地阅读了 hack 汇编语言说明,但我仍然无法使其工作。我不知道如何使循环发生。到目前为止,我有:@5 D=A @j M=D @1 D=A @i M=D
这使错误消失。但就是这样。 (在 cmets 中,它不允许我逐行放置我的代码,抱歉)。以上是关于第 1 行出现“Expression Expected”错误。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
每个字符串每出现第 2 次,分别用文件的第 n 行替换两个不同的字符串
尝试在 Google Play 上发布我的应用程序时,第 20 行出现错误无法识别的 xmltree 行:'C:“”'