Files
nand2tetris/projects/04/fill/Fill.asm

58 lines
1.6 KiB
NASM

// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/04/Fill.asm
// Runs an infinite loop that listens to the keyboard input.
// When a key is pressed (any key), the program blackens the screen,
// i.e. writes "black" in every pixel;
// the screen should remain fully black as long as the key is pressed.
// When no key is pressed, the program clears the screen, i.e. writes
// "white" in every pixel;
// the screen should remain fully clear as long as no key is pressed.
// Put your code here.
(LOOP) // Abfrage des KBD-Speichers
@KBD //Adresse Keyboardspeicher
D=M //Datenregister = Speicheradresse
@KPRESSED
D;JGT
@NOKPRESSED
0;JMP
(KPRESSED) // Taste wurde/wird gedrückt
@R0
M=-1 // 11111111111111111 --> black Pixel
@ONSCREEN
0;JMP
(NOKPRESSED) // keine Taste gedrückt
@R0
M=0 // wieder auf 0 gesetzt
@ONSCREEN
0;JMP
(ONSCREEN)
// erste Zeile von 16384 bis 16415 => 32
// 31 * 256
// letztes Byte --> 8192 --> 16384 + 8192 somit 8191
@8191 // Eingabe eines konstanten Wertes
D=A // A= 8191, Übergabe an D
@R1
M=D // R1 = 8191
//https://github.com/Olical/nand2tetris/blob/master/asm/fill/Fill.asm
(PRINT)
//Schleife, setze ein Register auf 0, dann addiere das zum @SCREEN. Setze die entstandene Adresse auf -1. Nun vergleiche den Zähler mit R1, wenn ungleich dann erhöhe um 1 und durchlaufe die Schleife abermals.
@R1
D=M
@PRINT
M=D
@LOOP
0;JMP