-1

所以,我正在阅读《计算系统的元素》这本书(并在做这门课程)。我正在尝试编写一个 hack 汇编程序来使屏幕变黑。这就是我所拥有的。

@16384
D=A
@current
M=D

@24576
D=A
@end
M=D

@current
D=M

(BEGIN)
@end
D=M-D

@END
D;JEQ
@current
D=M 
A=M
M=1
A=A+1
D=A
@current
M=D

@BEGIN
0;JMP

(END)
@END
0;JMP

出现了一些像素,但是 a) 非常缓慢 b) 看起来不像是整个屏幕都被填满了。有没有办法改进代码?

4

1 回答 1

4

只给你答案并不合适,但这里有一些提示可能会对你有所帮助。

  • 尽管 HACK 符号区分大小写,但将 @end 和 @END 用于两种不同的事物是不好的风格,因为它可能会造成混淆。

  • 有一个预定义的符号 SCREEN 可能被证明是有用的。

  • 您必须设置屏幕内存区域中每个 16 位字中的所有位。M=1 只设置一位。

  • 您可能会发现保留剩余循环数的计数器比使用结束指针值更方便。

  • 请记住,您可以将操作的结果存储在多个目标中,如 MD=M-1。这很方便。

  • 查看第 4 课的笔记以获取循环示例。http://www.nand2tetris.org/lectures/PDF/lecture%2004%20machine%20language.pdf

祝你好运!

于 2017-05-18T20:06:09.737 回答