diff --git a/Assignments/4_Machine_Language/Fill.asm b/Assignments/4_Machine_Language/Fill.asm new file mode 100644 index 0000000..e8932a7 --- /dev/null +++ b/Assignments/4_Machine_Language/Fill.asm @@ -0,0 +1,66 @@ +// 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. When no key is pressed, the +// program clears the screen, i.e. writes "white" in every pixel. + +// Put your code here. +(LOOP) +@KBD +D=M +@BLACK +D;JGT +@R0 +M=0 +@CONTINUE +0;JMP +(BLACK) +@R0 +M=0 +M=!M +(CONTINUE) +@31 +D=A +@R1 +M=D +@256 +D=A +@R2 +M=D +@SCREEN +D=A +@R3 +M=D +(FILL) +@R0 +D=M +@R3 +A=M +M=D +D=A+1 +@R3 +M=D +@R1 +DM=M-1 +@ENDOFLINE +D;JEQ +@FILL +0;JMP +(ENDOFLINE) +@32 +D=A +@R1 +M=D +@R2 +DM=M-1 +@ENDOFSCREEN +D;JEQ +@FILL +0;JMP +(ENDOFSCREEN) +@LOOP +0;JMP \ No newline at end of file diff --git a/Assignments/4_Machine_Language/Mult.asm b/Assignments/4_Machine_Language/Mult.asm new file mode 100644 index 0000000..af095e9 --- /dev/null +++ b/Assignments/4_Machine_Language/Mult.asm @@ -0,0 +1,27 @@ +// 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/4/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.) +// The algorithm is based on repetitive addition. + +@R2 +M=0 +@R1 +D=M +@END +D;JEQ +(STEP) +@R2 +D=M +@R0 +D=D+M +@R2 +M=D +@R1 +DM=M-1 +@STEP +D;JGT +@END \ No newline at end of file