2021-12-06 18:37:57 +00:00
|
|
|
// 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]
|
2021-12-07 16:18:15 +00:00
|
|
|
@R2
|
2021-12-06 18:37:57 +00:00
|
|
|
M=0
|
2021-12-07 16:18:15 +00:00
|
|
|
@itr
|
2021-12-06 18:37:57 +00:00
|
|
|
M=0
|
|
|
|
|
|
|
|
// loop declaration
|
|
|
|
// D = R1 - itr
|
|
|
|
// if 0 jump to @STOP
|
|
|
|
// else continue
|
|
|
|
(LOOP)
|
|
|
|
@itr
|
|
|
|
D=M
|
|
|
|
@R1
|
|
|
|
D=D-M
|
2021-12-07 16:18:15 +00:00
|
|
|
@END
|
2021-12-06 18:37:57 +00:00
|
|
|
D;JEQ
|
|
|
|
|
2021-12-07 16:18:15 +00:00
|
|
|
// R2 = R0 + R2
|
2021-12-06 18:37:57 +00:00
|
|
|
// itr = itr + 1
|
|
|
|
@R0
|
|
|
|
D=M
|
2021-12-07 16:18:15 +00:00
|
|
|
@R2
|
2021-12-06 18:37:57 +00:00
|
|
|
M=D+M
|
|
|
|
@itr
|
|
|
|
M=M+1
|
|
|
|
|
|
|
|
// back to loop declaration
|
|
|
|
@LOOP
|
|
|
|
0;JMP
|
|
|
|
|
|
|
|
// loopy loop
|
|
|
|
(END)
|
|
|
|
@END
|
|
|
|
0;JMP
|