diff --git a/projects/04/mult/Mult.asm b/projects/04/mult/Mult.asm new file mode 100644 index 0000000..484254e --- /dev/null +++ b/projects/04/mult/Mult.asm @@ -0,0 +1,57 @@ +// 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. + +// Put your code here. + +// variable names are selfexplanatory +// itr temporary register at RAM[16] +// sum temporary register at RAM[17] +@itr +M=0 +@sum +M=0 + +// loop declaration +// D = R1 - itr +// if 0 jump to @STOP +// else continue + (LOOP) +@itr +D=M +@R1 +D=D-M +@STOP +D;JEQ + +// sum = R0 + sum +// itr = itr + 1 +@R0 +D=M +@sum +M=D+M +@itr +M=M+1 + +// back to loop declaration +@LOOP +0;JMP + +// R2 = sum + (STOP) +@sum +D=M +@R2 +M=D + +// loopy loop + (END) +@END +0;JMP