破解汇编程序使屏幕变黑
hack assembly program to blacken the screen
所以,我正在阅读计算系统的元素这本书(并正在学习这门课程)。我正在尝试编写一个黑客汇编程序来黑屏。这是我得到的。
@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) 看起来不像是整个屏幕都被填满了。有没有办法改进代码?
只给你答案不太合适,但这里有一些提示可能会对你有所帮助。
虽然HACK符号区分大小写,但是使用@end和@END表示两个
不同的东西是不好的风格,因为它有混淆的风险。
有一个可能有用的预定义符号 SCREEN。
您必须设置屏幕存储区中每个16位字中的所有位。 M=1 只设置一位。
您可能会发现,与结束指针值相比,保留剩余循环数的计数器更方便。
请记住,您可以将一个操作的结果存储在多个目的地,如 MD=M-1。这很方便。
查看第 4 课的笔记以获取循环示例。 http://www.nand2tetris.org/lectures/PDF/lecture%2004%20machine%20language.pdf
祝你好运!
所以,我正在阅读计算系统的元素这本书(并正在学习这门课程)。我正在尝试编写一个黑客汇编程序来黑屏。这是我得到的。
@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) 看起来不像是整个屏幕都被填满了。有没有办法改进代码?
只给你答案不太合适,但这里有一些提示可能会对你有所帮助。
虽然HACK符号区分大小写,但是使用@end和@END表示两个 不同的东西是不好的风格,因为它有混淆的风险。
有一个可能有用的预定义符号 SCREEN。
您必须设置屏幕存储区中每个16位字中的所有位。 M=1 只设置一位。
您可能会发现,与结束指针值相比,保留剩余循环数的计数器更方便。
请记住,您可以将一个操作的结果存储在多个目的地,如 MD=M-1。这很方便。
查看第 4 课的笔记以获取循环示例。 http://www.nand2tetris.org/lectures/PDF/lecture%2004%20machine%20language.pdf
祝你好运!