aboutsummaryrefslogtreecommitdiff
path: root/projects/08/FunctionCalls
diff options
context:
space:
mode:
authorYuchen Pei <me@ypei.me>2018-01-06 16:18:30 +0100
committerYuchen Pei <me@ypei.me>2018-01-06 16:18:30 +0100
commitf84dcda74e13120c5433591feeeed7e7d4c5f322 (patch)
tree50e25247c426e1ac3be9f0c24de65489ee32b4a6 /projects/08/FunctionCalls
parent19cf47dd1c6e9d7c265ed52270eebd9095b49a8c (diff)
checkpoint: passed FibonacciElement test
Diffstat (limited to 'projects/08/FunctionCalls')
-rw-r--r--projects/08/FunctionCalls/FibonacciElement/FibonacciElement.asm413
-rw-r--r--projects/08/FunctionCalls/FibonacciElement/FibonacciElement.out2
2 files changed, 415 insertions, 0 deletions
diff --git a/projects/08/FunctionCalls/FibonacciElement/FibonacciElement.asm b/projects/08/FunctionCalls/FibonacciElement/FibonacciElement.asm
new file mode 100644
index 0000000..9d98a3f
--- /dev/null
+++ b/projects/08/FunctionCalls/FibonacciElement/FibonacciElement.asm
@@ -0,0 +1,413 @@
+@256
+D=A
+@SP
+M=D
+@RET0
+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
+@LCL
+M=D
+@5
+D=D-A
+@0
+D=D-A
+@ARG
+M=D
+@Sys.init
+0;JMP
+(RET0)
+(Main.fibonacci)
+@ARG
+D=M
+@0
+D=A+D
+A=D
+D=M
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@2
+D=A
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@SP
+AM=M-1
+D=M
+@SP
+AM=M-1
+D=M-D
+@IFMain3
+D;JLT
+@SP
+A=M
+M=0
+@SP
+M=M+1
+@ENDIFMain3
+0;JMP
+(IFMain3)
+@SP
+A=M
+M=-1
+@SP
+M=M+1
+(ENDIFMain3)
+@SP
+AM=M-1
+D=M
+@Main.fibonacci$IF_TRUE
+D;JNE
+@Main.fibonacci$IF_FALSE
+0;JMP
+(Main.fibonacci$IF_TRUE)
+@ARG
+D=M
+@0
+D=A+D
+A=D
+D=M
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@LCL
+D=M
+@R13
+M=D
+@SP
+AM=M-1
+D=M
+@ARG
+A=M
+M=D
+@ARG
+D=M+1
+@SP
+M=D
+@R13
+AM=M-1
+D=M
+@THAT
+M=D
+@R13
+AM=M-1
+D=M
+@THIS
+M=D
+@R13
+AM=M-1
+D=M
+@ARG
+M=D
+@R13
+AM=M-1
+D=M
+@LCL
+M=D
+@R13
+A=M-1
+A=M
+0;JMP
+(Main.fibonacci$IF_FALSE)
+@ARG
+D=M
+@0
+D=A+D
+A=D
+D=M
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@2
+D=A
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@SP
+AM=M-1
+D=M
+@SP
+AM=M-1
+D=M-D
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@RET13
+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
+@LCL
+M=D
+@5
+D=D-A
+@1
+D=D-A
+@ARG
+M=D
+@Main.fibonacci
+0;JMP
+(RET13)
+@ARG
+D=M
+@0
+D=A+D
+A=D
+D=M
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@1
+D=A
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@SP
+AM=M-1
+D=M
+@SP
+AM=M-1
+D=M-D
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@RET17
+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
+@LCL
+M=D
+@5
+D=D-A
+@1
+D=D-A
+@ARG
+M=D
+@Main.fibonacci
+0;JMP
+(RET17)
+@SP
+AM=M-1
+D=M
+@SP
+AM=M-1
+D=M+D
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@LCL
+D=M
+@R13
+M=D
+@SP
+AM=M-1
+D=M
+@ARG
+A=M
+M=D
+@ARG
+D=M+1
+@SP
+M=D
+@R13
+AM=M-1
+D=M
+@THAT
+M=D
+@R13
+AM=M-1
+D=M
+@THIS
+M=D
+@R13
+AM=M-1
+D=M
+@ARG
+M=D
+@R13
+AM=M-1
+D=M
+@LCL
+M=D
+@R13
+A=M-1
+A=M
+0;JMP
+(Sys.init)
+@4
+D=A
+@SP
+A=M
+M=D
+@SP
+M=M+1
+@RET2
+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
+@LCL
+M=D
+@5
+D=D-A
+@1
+D=D-A
+@ARG
+M=D
+@Main.fibonacci
+0;JMP
+(RET2)
+(Sys.init$WHILE)
+@Sys.init$WHILE
+0;JMP
diff --git a/projects/08/FunctionCalls/FibonacciElement/FibonacciElement.out b/projects/08/FunctionCalls/FibonacciElement/FibonacciElement.out
new file mode 100644
index 0000000..fdf5e2d
--- /dev/null
+++ b/projects/08/FunctionCalls/FibonacciElement/FibonacciElement.out
@@ -0,0 +1,2 @@
+| RAM[0] |RAM[261]|
+| 262 | 3 |