blob: f84ce79a1f1d45d2cc71c06626c685fc663280d3 (
plain)
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
|
// 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
|