为什么我的代码会在第2行遇到比较失败,我该如何解决?

问题描述 投票:0回答:2

在CPU模拟器Add4.asm中的黑客汇编语言中,测试在第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  |
assembly programming-languages nand2tetris
2个回答
0
投票

您错误地使用@1@2等来引用存储在RAM中的值。这些实际上是字面数字12等,所以你的程序将总是添加相同的数字,从而给你比较失败。

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

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

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.