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
|