为什么我的代码总是在第 2 行出现比较失败,我该如何解决这个问题?

Why does my code keep get a comparison failure at line 2, and how could I fix this?

在CPU模拟器Add4.asm中使用hack汇编语言,测试一直在第2行失败。我尝试了各种形式来修复它,但无法弄清楚。我如何将它设置为 0 或者如果这不是问题,我还能如何修复我的代码? ADD4 Hack 汇编语言帮助

每当我 运行 我的 .asm 文件时,我在第 2 行遇到比较失败。请帮我解决这个问题。这是我的 .asm 代码,后面是 ADD4.tst。 Add4.asm 的行号已清楚注释。

Add4 将四个数(在 RAM[0], …, RAM[3] 或 R0, …, R3 中找到)相加并将结果存储在 RAM[0] (a.k.a. R0) 中。您的程序必须在 30 个周期或更少的时间内完成

Add4.asm:

1. @1
2. D=M
3. @2
4. D=D+M
5. @3
6. D=D+M
7. @4
8. D=D+M
9. @5
10. D=D+M
11. @0
12. M=D

Add4.tst:

load Add4.asm,
output-file Add4.out,
compare-to Add4.cmp,
output-list RAM[0]%D2.6.2;
set RAM[0] 1,
set RAM[1] 2,
set RAM[2] 3,
set RAM[3] 4,
repeat 30
{ ticktock; }
output;
set PC 0,
set RAM[0] 0,
set RAM[1] 0,
set RAM[2] 0,
set RAM[3] 0,
repeat 30
{ ticktock; }
output;
set PC 0,
set RAM[0] -10,
set RAM[1] 5,
set RAM[2] 100,
set RAM[3] 9,
repeat 30
{ ticktock; }
output;

add4.cmp:

1.|  RAM[0]  |
2.|      10  |
3.|       0  |
4.|     104  |

不知道 Add4 应该做什么,很难给你有意义的反馈。除了按照@jknotek 的建议提供 Add4.cmp 文件之外,您还应该定义它试图完成的任务。

但是,确实跳出的一件事是您的测试设置正在初始化内存地址 0-3,并且您正在访问地址 1-5 并存储到地址 0。

此外,为了清楚起见,通常最好通过@Rn 预定义符号来引用内存位置 0-15。

您错误地使用 @1@2 等来引用存储在 RAM 中的值。这些实际上是文字数字 12 等,因此您的程序将始终添加相同的数字,从而导致比较失败。

相反,如果您指的是寄存器,则必须在数字前加上 R 前缀,如下所示:

@R0
D=M
@R1
D=D+M
@R2
D=D+M
@R3
D=D+M
@R0
M=D