all repos — nand2tetris @ cd6d60e361f05422bdada321e09e6b1d48e11d16

my nand2tetris progress

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