Add solutions for part 1
This commit is contained in:
190
projects/08/FunctionCalls/SimpleFunction/SimpleFunction.asm
Normal file
190
projects/08/FunctionCalls/SimpleFunction/SimpleFunction.asm
Normal file
@@ -0,0 +1,190 @@
|
||||
// function SimpleFunction.test 2
|
||||
(SimpleFunction.test)
|
||||
@0
|
||||
D = A
|
||||
@SP
|
||||
A = M
|
||||
M = D
|
||||
@SP
|
||||
M = M + 1
|
||||
// ^ push 0
|
||||
@SP
|
||||
A = M
|
||||
M = D
|
||||
@SP
|
||||
M = M + 1
|
||||
// ^ push 0
|
||||
// ^ push 0 * 2
|
||||
|
||||
// push local 0
|
||||
@0
|
||||
D = A
|
||||
@LCL
|
||||
A = M
|
||||
A = D + A
|
||||
D = M
|
||||
// ^ D = *(LCL + index)
|
||||
@SP
|
||||
A = M
|
||||
M = D
|
||||
@SP
|
||||
M = M + 1
|
||||
// ^ push D
|
||||
|
||||
// push local 1
|
||||
@1
|
||||
D = A
|
||||
@LCL
|
||||
A = M
|
||||
A = D + A
|
||||
D = M
|
||||
// ^ D = *(LCL + index)
|
||||
@SP
|
||||
A = M
|
||||
M = D
|
||||
@SP
|
||||
M = M + 1
|
||||
// ^ push D
|
||||
|
||||
// add
|
||||
@SP
|
||||
A = M
|
||||
A = A - 1
|
||||
A = A - 1
|
||||
D = M
|
||||
A = A + 1
|
||||
D = D + M
|
||||
A = A - 1
|
||||
M = D
|
||||
@SP
|
||||
M = M - 1
|
||||
|
||||
// not
|
||||
@SP
|
||||
A = M
|
||||
A = A - 1
|
||||
M = !M
|
||||
|
||||
// push argument 0
|
||||
@0
|
||||
D = A
|
||||
@ARG
|
||||
A = M
|
||||
A = D + A
|
||||
D = M
|
||||
// ^ D = *(LCL + index)
|
||||
@SP
|
||||
A = M
|
||||
M = D
|
||||
@SP
|
||||
M = M + 1
|
||||
// ^ push D
|
||||
|
||||
// add
|
||||
@SP
|
||||
A = M
|
||||
A = A - 1
|
||||
A = A - 1
|
||||
D = M
|
||||
A = A + 1
|
||||
D = D + M
|
||||
A = A - 1
|
||||
M = D
|
||||
@SP
|
||||
M = M - 1
|
||||
|
||||
// push argument 1
|
||||
@1
|
||||
D = A
|
||||
@ARG
|
||||
A = M
|
||||
A = D + A
|
||||
D = M
|
||||
// ^ D = *(LCL + index)
|
||||
@SP
|
||||
A = M
|
||||
M = D
|
||||
@SP
|
||||
M = M + 1
|
||||
// ^ push D
|
||||
|
||||
// sub
|
||||
@SP
|
||||
A = M
|
||||
A = A - 1
|
||||
A = A - 1
|
||||
D = M
|
||||
A = A + 1
|
||||
D = D - M
|
||||
A = A - 1
|
||||
M = D
|
||||
@SP
|
||||
M = M - 1
|
||||
|
||||
// return
|
||||
@LCL
|
||||
D = M
|
||||
@R13
|
||||
M = D
|
||||
// ^ R13 = FRAME = LCL
|
||||
@5
|
||||
D = A
|
||||
@R13
|
||||
D = M - D
|
||||
@R14
|
||||
M = D
|
||||
// ^ R14 = RET = *(FRAME - 5)
|
||||
@SP
|
||||
A = M
|
||||
A = A - 1
|
||||
D = M
|
||||
@SP
|
||||
M = M - 1
|
||||
@ARG
|
||||
A = M
|
||||
M = D
|
||||
// ^ POP into *ARG
|
||||
@ARG
|
||||
D = M + 1
|
||||
@SP
|
||||
M = D
|
||||
// ^ SP = ARG + 1
|
||||
@1
|
||||
D = A
|
||||
@R13
|
||||
A = M - D
|
||||
D = M
|
||||
@THAT
|
||||
M = D
|
||||
// ^ THAT = *(FRAME - 1)
|
||||
@2
|
||||
D = A
|
||||
@R13
|
||||
A = M - D
|
||||
D = M
|
||||
@THIS
|
||||
M = D
|
||||
// ^ THIS = *(FRAME - 2)
|
||||
@3
|
||||
D = A
|
||||
@R13
|
||||
A = M - D
|
||||
D = M
|
||||
@ARG
|
||||
M = D
|
||||
// ^ ARG = *(FRAME - 3)
|
||||
@4
|
||||
D = A
|
||||
@R13
|
||||
A = M - D
|
||||
D = M
|
||||
@LCL
|
||||
M = D
|
||||
// ^ LCL = *(FRAME - 4)
|
||||
@R14
|
||||
A = M
|
||||
A = M
|
||||
0;JMP
|
||||
// ^ goto RET
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
| RAM[0] | RAM[1] | RAM[2] | RAM[3] | RAM[4] |RAM[310]|
|
||||
| 311 | 305 | 300 | 3010 | 4010 | 1196 |
|
||||
29
projects/08/FunctionCalls/SimpleFunction/SimpleFunction.tst
Normal file
29
projects/08/FunctionCalls/SimpleFunction/SimpleFunction.tst
Normal file
@@ -0,0 +1,29 @@
|
||||
// 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/SimpleFunction/SimpleFunction.tst
|
||||
|
||||
load SimpleFunction.asm,
|
||||
output-file SimpleFunction.out,
|
||||
compare-to SimpleFunction.cmp,
|
||||
output-list RAM[0]%D1.6.1 RAM[1]%D1.6.1 RAM[2]%D1.6.1
|
||||
RAM[3]%D1.6.1 RAM[4]%D1.6.1 RAM[310]%D1.6.1;
|
||||
|
||||
set RAM[0] 317,
|
||||
set RAM[1] 317,
|
||||
set RAM[2] 310,
|
||||
set RAM[3] 3000,
|
||||
set RAM[4] 4000,
|
||||
set RAM[310] 1234,
|
||||
set RAM[311] 37,
|
||||
set RAM[312] 1000,
|
||||
set RAM[313] 305,
|
||||
set RAM[314] 300,
|
||||
set RAM[315] 3010,
|
||||
set RAM[316] 4010,
|
||||
|
||||
repeat 300 {
|
||||
ticktock;
|
||||
}
|
||||
|
||||
output;
|
||||
16
projects/08/FunctionCalls/SimpleFunction/SimpleFunction.vm
Normal file
16
projects/08/FunctionCalls/SimpleFunction/SimpleFunction.vm
Normal file
@@ -0,0 +1,16 @@
|
||||
// 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/SimpleFunction/SimpleFunction.vm
|
||||
|
||||
// Performs a simple calculation and returns the result.
|
||||
function SimpleFunction.test 2
|
||||
push local 0
|
||||
push local 1
|
||||
add
|
||||
not
|
||||
push argument 0
|
||||
add
|
||||
push argument 1
|
||||
sub
|
||||
return
|
||||
@@ -0,0 +1,29 @@
|
||||
// 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/SimpleFunction/SimpleFunctionVME.tst
|
||||
|
||||
load SimpleFunction.vm,
|
||||
output-file SimpleFunction.out,
|
||||
compare-to SimpleFunction.cmp,
|
||||
output-list RAM[0]%D1.6.1 RAM[1]%D1.6.1 RAM[2]%D1.6.1
|
||||
RAM[3]%D1.6.1 RAM[4]%D1.6.1 RAM[310]%D1.6.1;
|
||||
|
||||
set sp 317,
|
||||
set local 317,
|
||||
set argument 310,
|
||||
set this 3000,
|
||||
set that 4000,
|
||||
set argument[0] 1234,
|
||||
set argument[1] 37,
|
||||
set argument[2] 9,
|
||||
set argument[3] 305,
|
||||
set argument[4] 300,
|
||||
set argument[5] 3010,
|
||||
set argument[6] 4010,
|
||||
|
||||
repeat 10 {
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output;
|
||||
Reference in New Issue
Block a user