Add solutions for part 1

This commit is contained in:
2020-11-15 13:57:48 -05:00
parent e4f9fd2682
commit 742db6d102
479 changed files with 202980 additions and 13 deletions

View File

@@ -0,0 +1,364 @@
// push constant 10
@10
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop local 0
@0
D = A
@LCL
A = M
D = D + A
@R13
M = D
// ^ R13 = local + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// push constant 21
@21
D = A
@SP
A = M
M = D
@SP
M = M + 1
// push constant 22
@22
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop argument 2
@2
D = A
@ARG
A = M
D = D + A
@R13
M = D
// ^ R13 = argument + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// pop argument 1
@1
D = A
@ARG
A = M
D = D + A
@R13
M = D
// ^ R13 = argument + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// push constant 36
@36
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop this 6
@6
D = A
@THIS
A = M
D = D + A
@R13
M = D
// ^ R13 = this + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// push constant 42
@42
D = A
@SP
A = M
M = D
@SP
M = M + 1
// push constant 45
@45
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop that 5
@5
D = A
@THAT
A = M
D = D + A
@R13
M = D
// ^ R13 = that + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// pop that 2
@2
D = A
@THAT
A = M
D = D + A
@R13
M = D
// ^ R13 = that + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// push constant 510
@510
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop temp 6
@6
D = A
@5
A = D + A
D = A
@R13
M = D
// ^ R13 = temp + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// 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 that 5
@5
D = A
@THAT
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
// push this 6
@6
D = A
@THIS
A = M
A = D + A
D = M
// ^ D = *(LCL + index)
@SP
A = M
M = D
@SP
M = M + 1
// ^ push D
// push this 6
@6
D = A
@THIS
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
// 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
// push temp 6
@6
D = A
@5
A = D + A
D = M
// ^ D = *(temp + 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

View File

@@ -0,0 +1,2 @@
|RAM[256]|RAM[300]|RAM[401]|RAM[402]|RAM[3006|RAM[3012|RAM[3015|RAM[11] |
| 472 | 10 | 21 | 22 | 36 | 42 | 45 | 510 |

View File

@@ -0,0 +1,25 @@
// 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/07/MemoryAccess/BasicTest/BasicTest.tst
load BasicTest.asm,
output-file BasicTest.out,
compare-to BasicTest.cmp,
output-list RAM[256]%D1.6.1 RAM[300]%D1.6.1 RAM[401]%D1.6.1
RAM[402]%D1.6.1 RAM[3006]%D1.6.1 RAM[3012]%D1.6.1
RAM[3015]%D1.6.1 RAM[11]%D1.6.1;
set RAM[0] 256, // stack pointer
set RAM[1] 300, // base address of the local segment
set RAM[2] 400, // base address of the argument segment
set RAM[3] 3000, // base address of the this segment
set RAM[4] 3010, // base address of the that segment
repeat 600 { // enough cycles to complete the execution
ticktock;
}
// Outputs the stack base and some values
// from the tested memory segments
output;

View File

@@ -0,0 +1,31 @@
// 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/07/MemoryAccess/BasicTest/BasicTest.vm
// Executes pop and push commands using the virtual memory segments.
push constant 10
pop local 0
push constant 21
push constant 22
pop argument 2
pop argument 1
push constant 36
pop this 6
push constant 42
push constant 45
pop that 5
pop that 2
push constant 510
pop temp 6
push local 0
push that 5
add
push argument 1
sub
push this 6
push this 6
add
sub
push temp 6
add

View File

@@ -0,0 +1,25 @@
// 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/07/MemoryAccess/BasicTest/BasicTestVME.tst
load BasicTest.vm,
output-file BasicTest.out,
compare-to BasicTest.cmp,
output-list RAM[256]%D1.6.1 RAM[300]%D1.6.1 RAM[401]%D1.6.1
RAM[402]%D1.6.1 RAM[3006]%D1.6.1 RAM[3012]%D1.6.1
RAM[3015]%D1.6.1 RAM[11]%D1.6.1;
set sp 256, // stack pointer
set local 300, // base address of the local segment
set argument 400, // base address of the argument segment
set this 3000, // base address of the this segment
set that 3010, // base address of the that segment
repeat 25 { // BasicTest.vm has 25 instructions
vmstep;
}
// Outputs the stack base and some values
// from the tested memory segments
output;

View File

@@ -0,0 +1,189 @@
// push constant 3030
@3030
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop pointer THIS
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
@THIS
M = D
// ^ pop into THIS
// push constant 3040
@3040
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop pointer THAT
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
@THAT
M = D
// ^ pop into THAT
// push constant 32
@32
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop this 2
@2
D = A
@THIS
A = M
D = D + A
@R13
M = D
// ^ R13 = this + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// push constant 46
@46
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop that 6
@6
D = A
@THAT
A = M
D = D + A
@R13
M = D
// ^ R13 = that + index
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@R13
A = M
M = D
// ^ *R13 = D
// push pointer THIS
@THIS
D = M
@SP
A = M
M = D
@SP
M = M + 1
// ^ push THIS
// push pointer THAT
@THAT
D = M
@SP
A = M
M = D
@SP
M = M + 1
// ^ push THAT
// 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 this 2
@2
D = A
@THIS
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
// push that 6
@6
D = A
@THAT
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

View File

@@ -0,0 +1,2 @@
|RAM[256]| RAM[3] | RAM[4] |RAM[3032|RAM[3046|
| 6084 | 3030 | 3040 | 32 | 46 |

View File

@@ -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/07/MemoryAccess/PointerTest/PointerTest.tst
load PointerTest.asm,
output-file PointerTest.out,
compare-to PointerTest.cmp,
output-list RAM[256]%D1.6.1 RAM[3]%D1.6.1
RAM[4]%D1.6.1 RAM[3032]%D1.6.1 RAM[3046]%D1.6.1;
set RAM[0] 256, // initializes the stack pointer
repeat 450 { // enough cycles to complete the execution
ticktock;
}
// outputs the stack base, this, that, and
// some values from the the this and that segments
output;

View File

@@ -0,0 +1,22 @@
// 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/07/MemoryAccess/PointerTest/PointerTest.vm
// Executes pop and push commands using the
// pointer, this, and that segments.
push constant 3030
pop pointer 0
push constant 3040
pop pointer 1
push constant 32
pop this 2
push constant 46
pop that 6
push pointer 0
push pointer 1
add
push this 2
sub
push that 6
add

View File

@@ -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/07/MemoryAccess/PointerTest/PointerTestVME.tst
load PointerTest.vm,
output-file PointerTest.out,
compare-to PointerTest.cmp,
output-list RAM[256]%D1.6.1 RAM[3]%D1.6.1 RAM[4]%D1.6.1
RAM[3032]%D1.6.1 RAM[3046]%D1.6.1;
set RAM[0] 256, // initializes the stack pointer
repeat 15 { // PointerTest.vm has 15 instructions
vmstep;
}
// outputs the stack base, this, that, and
// some values from the the this and that segments
output;

View File

@@ -0,0 +1,122 @@
// push constant 111
@111
D = A
@SP
A = M
M = D
@SP
M = M + 1
// push constant 333
@333
D = A
@SP
A = M
M = D
@SP
M = M + 1
// push constant 888
@888
D = A
@SP
A = M
M = D
@SP
M = M + 1
// pop static StaticTest.8
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@StaticTest.8
M = D
// ^ StaticTest.8 = D
// pop static StaticTest.3
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@StaticTest.3
M = D
// ^ StaticTest.3 = D
// pop static StaticTest.1
@SP
A = M
A = A - 1
D = M
@SP
M = M - 1
// ^ pop into D
@StaticTest.1
M = D
// ^ StaticTest.1 = D
// push static StaticTest.3
@StaticTest.3
D = M
// ^ D = StaticTest.3
@SP
A = M
M = D
@SP
M = M + 1
// ^ push from D
// push static StaticTest.1
@StaticTest.1
D = M
// ^ D = StaticTest.1
@SP
A = M
M = D
@SP
M = M + 1
// ^ push from 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
// push static StaticTest.8
@StaticTest.8
D = M
// ^ D = StaticTest.8
@SP
A = M
M = D
@SP
M = M + 1
// ^ push from 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

View File

@@ -0,0 +1,2 @@
|RAM[256]|
| 1110 |

View File

@@ -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/07/MemoryAccess/StaticTest/StaticTest.tst
load StaticTest.asm,
output-file StaticTest.out,
compare-to StaticTest.cmp,
output-list RAM[256]%D1.6.1;
set RAM[0] 256, // initializes the stack pointer
repeat 200 { // enough cycles to complete the execution
ticktock;
}
output; // the stack base

View File

@@ -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/07/MemoryAccess/StaticTest/StaticTest.vm
// Executes pop and push commands using the static segment.
push constant 111
push constant 333
push constant 888
pop static 8
pop static 3
pop static 1
push static 3
push static 1
sub
push static 8
add

View File

@@ -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/07/MemoryAccess/StaticTest/StaticTestVME.tst
load StaticTest.vm,
output-file StaticTest.out,
compare-to StaticTest.cmp,
output-list RAM[256]%D1.6.1;
set sp 256, // initializes the stack pointer
repeat 11 { // StaticTest.vm has 11 instructions
vmstep;
}
output; // the stack base