Project 04, leider war Fill nicht meins
This commit is contained in:
78
projects/04/abgabe/Fill.asm
Normal file
78
projects/04/abgabe/Fill.asm
Normal file
@@ -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
|
||||||
41
projects/04/abgabe/Mult.asm
Normal file
41
projects/04/abgabe/Mult.asm
Normal file
@@ -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
|
||||||
BIN
projects/04/abgabe/project4.zip
Normal file
BIN
projects/04/abgabe/project4.zip
Normal file
Binary file not shown.
BIN
projects/04/fill/Archiv.zip
Normal file
BIN
projects/04/fill/Archiv.zip
Normal file
Binary file not shown.
@@ -1,68 +1,78 @@
|
|||||||
// This file is part of www.nand2tetris.org
|
// This file is part of www.nand2tetris.org
|
||||||
// and the book "The Elements of Computing Systems"
|
// and the book "The Elements of Computing Systems"
|
||||||
// by Nisan and Schocken, MIT Press.
|
// by Nisan and Schocken, MIT Press.
|
||||||
// File name: projects/04/Fill.asm
|
// File name: projects/04/Fill.asm
|
||||||
|
|
||||||
// Runs an infinite loop that listens to the keyboard input.
|
// Runs an infinite loop that listens to the keyboard input.
|
||||||
// When a key is pressed (any key), the program blackens the screen,
|
// When a key is pressed (any key), the program blackens the screen,
|
||||||
// i.e. writes "black" in every pixel;
|
// i.e. writes "black" in every pixel;
|
||||||
// the screen should remain fully black as long as the key is pressed.
|
// 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
|
// When no key is pressed, the program clears the screen, i.e. writes
|
||||||
// "white" in every pixel;
|
// "white" in every pixel;
|
||||||
// the screen should remain fully clear as long as no key is pressed.
|
// the screen should remain fully clear as long as no key is pressed.
|
||||||
|
|
||||||
// Put your code here.
|
// Put your code here.
|
||||||
|
|
||||||
(LOOP) // Abfrage des KBD-Speichers
|
@8192 // 32*256 --> 32 16er pro Zeile
|
||||||
@KBD //Adresse Keyboardspeicher
|
D=A
|
||||||
D=M //Datenregister = Speicheradresse
|
@ENDPOS // in @16
|
||||||
|
M=D
|
||||||
@KPRESSED
|
|
||||||
D;JGT
|
(LOOP)
|
||||||
|
@SCREEN //Screen-Einstiegsadresse
|
||||||
@NOKPRESSED
|
D=A
|
||||||
0;JMP
|
@ScreenStart // @SCREEN 16384 --> @17
|
||||||
|
M=D
|
||||||
(KPRESSED) // Taste wurde/wird gedrückt
|
|
||||||
@R0
|
@i // Zähler = 0 18
|
||||||
M=-1 // 11111111111111111 --> black Pixel
|
M=0
|
||||||
@ONSCREEN
|
|
||||||
0;JMP
|
@KBD //24576
|
||||||
|
D=M // Tastatureingabe ?
|
||||||
(NOKPRESSED) // keine Taste gedrückt
|
|
||||||
@R0
|
@WEISS
|
||||||
M=0 // wieder auf 0 gesetzt
|
D; JEQ // WEISS WENN D == 0
|
||||||
@ONSCREEN
|
@SCHWARZ // SPRINGE ZU SCHWARZ
|
||||||
0;JMP
|
D; JNE // WENN NICHT 0
|
||||||
|
|
||||||
(ONSCREEN)
|
(SCHWARZ)
|
||||||
// erste Zeile von 16384 bis 16415 => 32
|
@ENDPOS
|
||||||
// 31 * 256
|
D=M
|
||||||
// letztes Byte --> 8192 --> 16384 + 8192 somit 8191
|
@i
|
||||||
@8191 // Eingabe eines konstanten Wertes
|
D=D-M // ENDPOS -1 = 0 ? DANN ZU LOOP
|
||||||
D=A // A= 8191, Übergabe an D
|
@LOOP
|
||||||
@R1
|
D;JEQ
|
||||||
M=D // R1 = 8191
|
|
||||||
//https://github.com/Olical/nand2tetris/blob/master/asm/fill/Fill.asm
|
@ScreenStart
|
||||||
(PRINT)
|
A=M
|
||||||
|
M=-1 // SETZE -1 == SCHWARZ
|
||||||
@SCREEN
|
|
||||||
D=M
|
@i
|
||||||
@counter
|
M=M+1 // i++
|
||||||
D=M
|
|
||||||
|
@ScreenStart
|
||||||
M=D+1
|
M=M+1
|
||||||
|
|
||||||
|
@SCHWARZ
|
||||||
|
0;JMP
|
||||||
|
|
||||||
|
(WEISS)
|
||||||
|
@ENDPOS
|
||||||
//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.
|
D=M
|
||||||
|
@i
|
||||||
@ONSCREEN
|
D=D-M // ENDPOS -1 = 0 ? DANN ZU LOOP
|
||||||
|
@LOOP
|
||||||
|
D;JEQ
|
||||||
|
|
||||||
@LOOP
|
@ScreenStart
|
||||||
0;JMP
|
A=M
|
||||||
|
M=0 // SETZE 0 == WEISS
|
||||||
|
|
||||||
|
@i
|
||||||
|
M=M+1 // i++
|
||||||
|
|
||||||
|
@ScreenStart
|
||||||
|
M=M+1
|
||||||
|
|
||||||
|
@WEISS
|
||||||
|
0;JMP
|
||||||
Reference in New Issue
Block a user