projects/04/mult/Mult.asm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
// 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. // Repeated addition, use R3 as temp // R2 = 0 // for (R3 = R0; R3 > 0; --R3) // R2 += R1 // R2 = 0 @R2 M=0 // R3 = R0 @R0 D=M @R3 M=D (ADD_LOOP) // D=R3, if D == 0, goto END @R3 D=M @END D;JEQ // D = R1 @R1 D=M // R2 += D @R2 M=D+M // --R3 @R3 M=M-1 @ADD_LOOP 0;JMP (END) @END 0;JMP |