// 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. @acc M=0 // acc = 0 @R0 D=M @a M=D // a = RAM[0] @WRITE D;JEQ // if (a == 0) goto WRITE @R1 D=M @b M=D // b = RAM[1] @WRITE D;JEQ // if (b == 0) goto WRITE (LOOP) @b D=M @acc M=M+D // acc += b @a M=M-1 // a-- D=M @WRITE D;JEQ // if (a == 0) goto WRITE @LOOP 0;JMP // goto LOOP (WRITE) @acc D=M @R2 M=D // RAM[2] = acc @END 0;JMP // goto END (END) @END 0;JMP