.
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
||||
// 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/08/FunctionCalls/StaticsTest/Class1.vm
|
||||
|
||||
// Stores two supplied arguments in static[0] and static[1].
|
||||
function Class1.set 0
|
||||
push argument 0
|
||||
pop static 0
|
||||
push argument 1
|
||||
pop static 1
|
||||
push constant 0
|
||||
return
|
||||
|
||||
// Returns static[0] - static[1].
|
||||
function Class1.get 0
|
||||
push static 0
|
||||
push static 1
|
||||
sub
|
||||
return
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// 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/08/FunctionCalls/StaticsTest/Class2.vm
|
||||
|
||||
// Stores two supplied arguments in static[0] and static[1].
|
||||
function Class2.set 0
|
||||
push argument 0
|
||||
pop static 0
|
||||
push argument 1
|
||||
pop static 1
|
||||
push constant 0
|
||||
return
|
||||
|
||||
// Returns static[0] - static[1].
|
||||
function Class2.get 0
|
||||
push static 0
|
||||
push static 1
|
||||
sub
|
||||
return
|
||||
+649
@@ -0,0 +1,649 @@
|
||||
@256
|
||||
D=A
|
||||
@SP
|
||||
M=D
|
||||
@MainLoopXYZRA
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@LCL
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@ARG
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THIS
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THAT
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@SP
|
||||
D=M
|
||||
@0
|
||||
D=D-A
|
||||
@5
|
||||
D=D-A
|
||||
@ARG
|
||||
M=D
|
||||
@SP
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@Sys.init
|
||||
0;JMP
|
||||
(MainLoopXYZRARA)
|
||||
//CALLFUNC
|
||||
(Sys.init)
|
||||
@6
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push CONSTANT
|
||||
@8
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push CONSTANT
|
||||
@Class1.set5RA
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@LCL
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@ARG
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THIS
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THAT
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@SP
|
||||
D=M
|
||||
@2
|
||||
D=D-A
|
||||
@5
|
||||
D=D-A
|
||||
@ARG
|
||||
M=D
|
||||
@SP
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@Class1.set
|
||||
0;JMP
|
||||
(Class1.set5RA)
|
||||
//CALLFUNC
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@5
|
||||
M=D
|
||||
//pop TMP
|
||||
@23
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push CONSTANT
|
||||
@15
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push CONSTANT
|
||||
@Class2.set6RA
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@LCL
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@ARG
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THIS
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THAT
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@SP
|
||||
D=M
|
||||
@2
|
||||
D=D-A
|
||||
@5
|
||||
D=D-A
|
||||
@ARG
|
||||
M=D
|
||||
@SP
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@Class2.set
|
||||
0;JMP
|
||||
(Class2.set6RA)
|
||||
//CALLFUNC
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@5
|
||||
M=D
|
||||
//pop TMP
|
||||
@Class1.get7RA
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@LCL
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@ARG
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THIS
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THAT
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@SP
|
||||
D=M
|
||||
@0
|
||||
D=D-A
|
||||
@5
|
||||
D=D-A
|
||||
@ARG
|
||||
M=D
|
||||
@SP
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@Class1.get
|
||||
0;JMP
|
||||
(Class1.get7RA)
|
||||
//CALLFUNC
|
||||
@Class2.get8RA
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@LCL
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@ARG
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THIS
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@THAT
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
@SP
|
||||
D=M
|
||||
@0
|
||||
D=D-A
|
||||
@5
|
||||
D=D-A
|
||||
@ARG
|
||||
M=D
|
||||
@SP
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@Class2.get
|
||||
0;JMP
|
||||
(Class2.get8RA)
|
||||
//CALLFUNC
|
||||
(Sys.init$WHILE)
|
||||
//LABEL
|
||||
@Sys.init$WHILE
|
||||
0;JMP
|
||||
//GOTO
|
||||
(Class1.set)
|
||||
@0
|
||||
D=A
|
||||
@ARG
|
||||
A=M+D
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push ARGUMENT
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@Class1.0
|
||||
M=D
|
||||
//pop STATIC
|
||||
@1
|
||||
D=A
|
||||
@ARG
|
||||
A=M+D
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push ARGUMENT
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@Class1.1
|
||||
M=D
|
||||
//pop STATIC
|
||||
@0
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push CONSTANT
|
||||
@LCL
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@5
|
||||
D=A
|
||||
@R13
|
||||
D=M-D
|
||||
A=D
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@SP
|
||||
A=M-1
|
||||
D=M
|
||||
@ARG
|
||||
A=M
|
||||
M=D
|
||||
@ARG
|
||||
D=M+1
|
||||
@SP
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THAT
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THIS
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@ARG
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@R14
|
||||
A=M
|
||||
0;JMP
|
||||
//RETURN
|
||||
(Class1.get)
|
||||
@Class1.0
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push STATIC
|
||||
@Class1.1
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push STATIC
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
A=A-1
|
||||
M=M-D
|
||||
//SUB
|
||||
@LCL
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@5
|
||||
D=A
|
||||
@R13
|
||||
D=M-D
|
||||
A=D
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@SP
|
||||
A=M-1
|
||||
D=M
|
||||
@ARG
|
||||
A=M
|
||||
M=D
|
||||
@ARG
|
||||
D=M+1
|
||||
@SP
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THAT
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THIS
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@ARG
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@R14
|
||||
A=M
|
||||
0;JMP
|
||||
//RETURN
|
||||
(Class2.set)
|
||||
@0
|
||||
D=A
|
||||
@ARG
|
||||
A=M+D
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push ARGUMENT
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@Class2.0
|
||||
M=D
|
||||
//pop STATIC
|
||||
@1
|
||||
D=A
|
||||
@ARG
|
||||
A=M+D
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push ARGUMENT
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@Class2.1
|
||||
M=D
|
||||
//pop STATIC
|
||||
@0
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push CONSTANT
|
||||
@LCL
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@5
|
||||
D=A
|
||||
@R13
|
||||
D=M-D
|
||||
A=D
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@SP
|
||||
A=M-1
|
||||
D=M
|
||||
@ARG
|
||||
A=M
|
||||
M=D
|
||||
@ARG
|
||||
D=M+1
|
||||
@SP
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THAT
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THIS
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@ARG
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@R14
|
||||
A=M
|
||||
0;JMP
|
||||
//RETURN
|
||||
(Class2.get)
|
||||
@Class2.0
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push STATIC
|
||||
@Class2.1
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
//push STATIC
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
A=A-1
|
||||
M=M-D
|
||||
//SUB
|
||||
@LCL
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@5
|
||||
D=A
|
||||
@R13
|
||||
D=M-D
|
||||
A=D
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@SP
|
||||
A=M-1
|
||||
D=M
|
||||
@ARG
|
||||
A=M
|
||||
M=D
|
||||
@ARG
|
||||
D=M+1
|
||||
@SP
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THAT
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@THIS
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@ARG
|
||||
M=D
|
||||
@R13
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@LCL
|
||||
M=D
|
||||
@R14
|
||||
A=M
|
||||
0;JMP
|
||||
//RETURN
|
||||
@@ -0,0 +1,2 @@
|
||||
| RAM[0] |RAM[261]|RAM[262]|
|
||||
| 263 | -2 | 8 |
|
||||
@@ -0,0 +1,2 @@
|
||||
| RAM[0] |RAM[261]|RAM[262]|
|
||||
| 263 | -2 | 8 |
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// 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/08/FunctionCalls/StaticsTest/StaticsTest.tst
|
||||
|
||||
load StaticsTest.asm,
|
||||
output-file StaticsTest.out,
|
||||
compare-to StaticsTest.cmp,
|
||||
output-list RAM[0]%D1.6.1 RAM[261]%D1.6.1 RAM[262]%D1.6.1;
|
||||
|
||||
set RAM[0] 256,
|
||||
|
||||
repeat 2500 {
|
||||
ticktock;
|
||||
}
|
||||
|
||||
output;
|
||||
@@ -0,0 +1,17 @@
|
||||
// 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/08/FunctionCalls/StaticsTest/StaticsTestVME.tst
|
||||
|
||||
load, // loads all the VM files from the current directory.
|
||||
output-file StaticsTest.out,
|
||||
compare-to StaticsTest.cmp,
|
||||
output-list RAM[0]%D1.6.1 RAM[261]%D1.6.1 RAM[262]%D1.6.1;
|
||||
|
||||
set sp 261,
|
||||
|
||||
repeat 36 {
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output;
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
// 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/08/FunctionCalls/StaticsTest/Sys.vm
|
||||
|
||||
// Tests that different functions, stored in two different
|
||||
// class files, manipulate the static segment correctly.
|
||||
function Sys.init 0
|
||||
push constant 6
|
||||
push constant 8
|
||||
call Class1.set 2
|
||||
pop temp 0 // Dumps the return value
|
||||
push constant 23
|
||||
push constant 15
|
||||
call Class2.set 2
|
||||
pop temp 0 // Dumps the return value
|
||||
call Class1.get 0
|
||||
call Class2.get 0
|
||||
label WHILE
|
||||
goto WHILE
|
||||
Reference in New Issue
Block a user