所以,我正在阅读“计算系统的元素”(并完成课程)这本书。我正在尝试编写一个黑客程序集程序来使屏幕变黑。这就是我所拥有的。
@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)它并不像整个屏幕被填充一样出现。有没有办法改进代码?
答案 0 :(得分:2)
仅仅给你答案并不合适,但这里有一些技巧可以帮助你。
虽然HACK符号区分大小写,但使用@end和@END代表两个 不同的事情是不好的风格,因为它有混乱的风险。
预定义符号SCREEN可能有用。
您必须在屏幕存储区中设置每个16位字的所有位。 M = 1只设置一位。
您可能会发现保留一个计数器更方便,您可以保留剩余的循环数而不是结束指针值。
请记住,您可以将操作结果存储在多个目的地中,如MD = M-1。这很方便。
查看讲座4注释,了解循环示例。 http://www.nand2tetris.org/lectures/PDF/lecture%2004%20machine%20language.pdf