diff --git a/projects/04/abgabe/Fill.asm b/projects/04/abgabe/Fill.asm new file mode 100644 index 0000000..b12d173 --- /dev/null +++ b/projects/04/abgabe/Fill.asm @@ -0,0 +1,78 @@ +// 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. + +@8192 // 32*256 --> 32 16er pro Zeile +D=A +@ENDPOS // in @16 +M=D + +(LOOP) + @SCREEN //Screen-Einstiegsadresse + D=A + @ScreenStart //@SCREEN 16384 --> @17 + M=D + + @i //Zähler = 0 18 + M=0 + + @KBD //24576 + D=M //Tastatureingabe ? + + @WEISS + D; JEQ //WEISS WENN D == 0 + @SCHWARZ //SPRINGE ZU SCHWARZ + D; JNE //WENN NICHT 0 + +(SCHWARZ) + @ENDPOS + D=M + @i + D=D-M //ENDPOS -1 = 0 ? DANN ZU LOOP + @LOOP + D;JEQ + + @ScreenStart + A=M + M=-1 //SETZE -1 == SCHWARZ + + @i + M=M+1 //i++ + + @ScreenStart + M=M+1 + + @SCHWARZ + 0;JMP + +(WEISS) + @ENDPOS + D=M + @i + D=D-M //ENDPOS -1 = 0 ? DANN ZU LOOP + @LOOP + D;JEQ + + @ScreenStart + A=M + M=0 //SETZE 0 == WEISS + + @i + M=M+1 //i++ + + @ScreenStart + M=M+1 + + @WEISS + 0;JMP \ No newline at end of file diff --git a/projects/04/abgabe/Mult.asm b/projects/04/abgabe/Mult.asm new file mode 100644 index 0000000..9be9c05 --- /dev/null +++ b/projects/04/abgabe/Mult.asm @@ -0,0 +1,41 @@ +// 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/Mult.asm + +// Multiplies R0 and R1 and stores the result in R2. +// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[2], respectively.) +// +// This program only needs to handle arguments that satisfy +// R0 >= 0, R1 >= 0, and R0*R1 < 32768. + +@R2 //Ergebnisspeicher +M=0 //init + +@R1 //R1 dieser Wert dient als Schleifencounter +D=M //Inhalt nach M + +@i //Zähler +M=D //i bekommt R1-Wert + +@END +D;JEQ + +(LOOP) +@R0 //R0 ansprechen +D=M //Wert aus R0 in Datenspeicher + +@R2 //Ergebnisspeicher +M=D+M //Ergebnisspeicher = Datenspeicher + Ergebnisspeicher + +@i //Zähler +D=M //D=Zähler +D=D-1 //D-1 +M=D //Zurückschreiben in Zähler + +@LOOP //LOOP +D;JGT //D GRÖSSER + +(END) //END LOOP +@END +0;JMP \ No newline at end of file diff --git a/projects/04/abgabe/project4.zip b/projects/04/abgabe/project4.zip new file mode 100644 index 0000000..f54291c Binary files /dev/null and b/projects/04/abgabe/project4.zip differ diff --git a/projects/04/fill/Archiv.zip b/projects/04/fill/Archiv.zip new file mode 100644 index 0000000..6dae966 Binary files /dev/null and b/projects/04/fill/Archiv.zip differ diff --git a/projects/04/fill/Fill.asm b/projects/04/fill/Fill.asm index 0323ffa..30d3bf7 100644 --- a/projects/04/fill/Fill.asm +++ b/projects/04/fill/Fill.asm @@ -1,68 +1,78 @@ -// 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) - - @SCREEN - D=M - @counter - D=M - - M=D+1 - - - - - - - //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. - - @ONSCREEN - - - -@LOOP -0;JMP +// 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. + +@8192 // 32*256 --> 32 16er pro Zeile +D=A +@ENDPOS // in @16 +M=D + +(LOOP) + @SCREEN //Screen-Einstiegsadresse + D=A + @ScreenStart // @SCREEN 16384 --> @17 + M=D + + @i // Zähler = 0 18 + M=0 + + @KBD //24576 + D=M // Tastatureingabe ? + + @WEISS + D; JEQ // WEISS WENN D == 0 + @SCHWARZ // SPRINGE ZU SCHWARZ + D; JNE // WENN NICHT 0 + +(SCHWARZ) + @ENDPOS + D=M + @i + D=D-M // ENDPOS -1 = 0 ? DANN ZU LOOP + @LOOP + D;JEQ + + @ScreenStart + A=M + M=-1 // SETZE -1 == SCHWARZ + + @i + M=M+1 // i++ + + @ScreenStart + M=M+1 + + @SCHWARZ + 0;JMP + +(WEISS) + @ENDPOS + D=M + @i + D=D-M // ENDPOS -1 = 0 ? DANN ZU LOOP + @LOOP + D;JEQ + + @ScreenStart + A=M + M=0 // SETZE 0 == WEISS + + @i + M=M+1 // i++ + + @ScreenStart + M=M+1 + + @WEISS + 0;JMP \ No newline at end of file