From ede7e378baf1b135112f68de48e59fcf5593f179 Mon Sep 17 00:00:00 2001 From: Sven Riwoldt Date: Sun, 2 Apr 2023 20:53:40 +0200 Subject: [PATCH] Project 04, leider war Fill nicht meins --- projects/04/abgabe/Fill.asm | 78 +++++++++++++++++ projects/04/abgabe/Mult.asm | 41 +++++++++ projects/04/abgabe/project4.zip | Bin 0 -> 2337 bytes projects/04/fill/Archiv.zip | Bin 0 -> 6216 bytes projects/04/fill/Fill.asm | 146 +++++++++++++++++--------------- 5 files changed, 197 insertions(+), 68 deletions(-) create mode 100644 projects/04/abgabe/Fill.asm create mode 100644 projects/04/abgabe/Mult.asm create mode 100644 projects/04/abgabe/project4.zip create mode 100644 projects/04/fill/Archiv.zip 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 0000000000000000000000000000000000000000..f54291c6cac1bd6cfecfa8f55d5c5b7a669ddd8d GIT binary patch literal 2337 zcmbVOXH-+!8ciUfMh8NX5*{!}36K~Bkupl}#n2)G3et(x08$J{d}IcYCPj);2O%^m z0}O~1;VCskM})TsRg@-70FAVl%)FUF7=OI?o%OAC?_KMh^PPS6-rq%=FoSpjZ1nNS z@E!*6-&g_z=wHMD`d;4N$eV#aHrA&Ato(4e>$cDD863(90D`uG004b908p7afSW{d zz4{OtCt_~I<88{5@-Tq;l&_ARI`7EM?;k~h%N6(~dY(MLLMb{op6-26lyzemr?ncn zyXJSbgX)xq19Rqz4}Q!xI^_&}M1DoScG(X*nj&|#`^kKmCift`!#c)*l<{Rs?<#Bpa?NsnUlYV!!EzjwZ^L zgt|4sSnmN@YcB4AzlH0Yh9K7Bm^{qO(bF`xe&VG-Q=g#`@O1 zrz7n1(=+10>hNXCroB1u7HnyO+SxfXs*q)lQ-^d47~444tcVY!ziqVk_KmF=wtdKl zN%N$V%9EDX@O$GcE1aBTn^hIlx9f*AB#nH(uN*_< z5>buM95y`zec$$?nC+s?rpl_cQK?^N#3#3sp92Jb2!LE-BYp4%hRm<~TOyoLt6icx znRudX>&3Xve{x^@*Zx#9cbJNFdiA77)0T+uh0yJvt|skljV+EwG!ul4LweFbXE($9 zc1mtE!#cwvfy%>`LVCbAYwBlbJ)x5?Rsi* zR^Q*xoA128!X11s*oKE5ez!O4_GaiVGunieP3yq6Fog*KV6Ykew>*!c6PSn2 zb4N!rEuAY?w&#$JCn$eNr#vH%QQpOg&&9*Z*=fVf6tnRSCI%hFlq|q3%_XdWLVX5$ ziRIN02r@GQP$=joAqa&72=aLvXBN!uK_GKIw5IS_Fj%!TT)dP|@@ZHP4W1SDo@;+j zQ#*>F#Ze$7UDH@pr*c73vgWLfs+a&aNi8|X)d^)l>N7(afy#{PdUt|1jZBTnu>;D; z(tcy)F9SwO<-Mg!Ju-5=eKMpnr7|TT7Ktz#sjpU6QdT&x^m835E4@66>3ky&TMUai zSO_g&zSXsa<)pY5@2*qLRYNK>_u$hrk9|9%MaHm6a`MeCNWrIvBGRJiH+ljlBNiL3 zstWtLiB9g3yKu!Kx6*_6--P{yH*pw2PE=G@xQ$XdD4)@-&z^713)8`7Wm}J2nS#;b zWkCEF_!Ef8KTU?j{JY7R1$zhmX)>3CZ z;|%I3z!FDhbhTyYW>>xEBzAIwL!^3>Ho$lmKbpeMIQ�^g-eE4{QD8exkU%iPuep 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 literal 0 HcmV?d00001 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