mirror of
https://github.com/usatiuk/nand2tetris.git
synced 2025-10-29 00:27:49 +01:00
init
This commit is contained in:
0
projects/07/MemoryAccess/BasicTest/BasicTest.asm
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.asm
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.cmp
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.cmp
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.tst
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.tst
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.vm
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTest.vm
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTestVME.tst
Normal file
0
projects/07/MemoryAccess/BasicTest/BasicTestVME.tst
Normal file
194
projects/07/MemoryAccess/PointerTest/PointerTest.asm
Normal file
194
projects/07/MemoryAccess/PointerTest/PointerTest.asm
Normal file
@@ -0,0 +1,194 @@
|
||||
// push constant 3030
|
||||
@3030
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// pop pointer 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@THIS
|
||||
M=D
|
||||
// push constant 3040
|
||||
@3040
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// pop pointer 1
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@THAT
|
||||
M=D
|
||||
// push constant 32
|
||||
@32
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// pop this 2
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@2
|
||||
D=A
|
||||
@THIS
|
||||
D=M+D
|
||||
@R15
|
||||
M=D
|
||||
@R14
|
||||
D=M
|
||||
@R15
|
||||
A=M
|
||||
M=D
|
||||
// push constant 46
|
||||
@46
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// pop that 6
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@6
|
||||
D=A
|
||||
@THAT
|
||||
D=M+D
|
||||
@R15
|
||||
M=D
|
||||
@R14
|
||||
D=M
|
||||
@R15
|
||||
A=M
|
||||
M=D
|
||||
// push pointer 0
|
||||
@THIS
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push pointer 1
|
||||
@THAT
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// add 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M+D
|
||||
(END0)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push this 2
|
||||
@2
|
||||
D=A
|
||||
@THIS
|
||||
A=M+D
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// sub 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
(END1)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push that 6
|
||||
@6
|
||||
D=A
|
||||
@THAT
|
||||
A=M+D
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// add 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M+D
|
||||
(END2)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// 0
|
||||
2
projects/07/MemoryAccess/PointerTest/PointerTest.cmp
Normal file
2
projects/07/MemoryAccess/PointerTest/PointerTest.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
|RAM[256]| RAM[3] | RAM[4] |RAM[3032|RAM[3046|
|
||||
| 6084 | 3030 | 3040 | 32 | 46 |
|
||||
20
projects/07/MemoryAccess/PointerTest/PointerTest.tst
Normal file
20
projects/07/MemoryAccess/PointerTest/PointerTest.tst
Normal 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;
|
||||
22
projects/07/MemoryAccess/PointerTest/PointerTest.vm
Normal file
22
projects/07/MemoryAccess/PointerTest/PointerTest.vm
Normal 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
|
||||
20
projects/07/MemoryAccess/PointerTest/PointerTestVME.tst
Normal file
20
projects/07/MemoryAccess/PointerTest/PointerTestVME.tst
Normal 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;
|
||||
122
projects/07/MemoryAccess/StaticTest/StaticTest.asm
Normal file
122
projects/07/MemoryAccess/StaticTest/StaticTest.asm
Normal 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 8
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@StaticTest.8
|
||||
M=D
|
||||
// pop static 3
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@StaticTest.3
|
||||
M=D
|
||||
// pop static 1
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@StaticTest.1
|
||||
M=D
|
||||
// push static 3
|
||||
@StaticTest.3
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push static 1
|
||||
@StaticTest.1
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// sub 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
(END0)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push static 8
|
||||
@StaticTest.8
|
||||
D=M
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// add 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M+D
|
||||
(END1)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// 0
|
||||
2
projects/07/MemoryAccess/StaticTest/StaticTest.cmp
Normal file
2
projects/07/MemoryAccess/StaticTest/StaticTest.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
|RAM[256]|
|
||||
| 1110 |
|
||||
17
projects/07/MemoryAccess/StaticTest/StaticTest.tst
Normal file
17
projects/07/MemoryAccess/StaticTest/StaticTest.tst
Normal 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
|
||||
17
projects/07/MemoryAccess/StaticTest/StaticTest.vm
Normal file
17
projects/07/MemoryAccess/StaticTest/StaticTest.vm
Normal 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
|
||||
17
projects/07/MemoryAccess/StaticTest/StaticTestVME.tst
Normal file
17
projects/07/MemoryAccess/StaticTest/StaticTestVME.tst
Normal 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
|
||||
40
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.asm
Normal file
40
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.asm
Normal file
@@ -0,0 +1,40 @@
|
||||
// push constant 7
|
||||
@7
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 8
|
||||
@8
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// add 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M+D
|
||||
(END0)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// 0
|
||||
2
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.cmp
Normal file
2
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
| RAM[0] | RAM[256] |
|
||||
| 257 | 15 |
|
||||
17
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.tst
Normal file
17
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.tst
Normal 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/StackArithmetic/SimpleAdd/SimpleAdd.tst
|
||||
|
||||
load SimpleAdd.asm,
|
||||
output-file SimpleAdd.out,
|
||||
compare-to SimpleAdd.cmp,
|
||||
output-list RAM[0]%D2.6.2 RAM[256]%D2.6.2;
|
||||
|
||||
set RAM[0] 256, // initializes the stack pointer
|
||||
|
||||
repeat 60 { // enough cycles to complete the execution
|
||||
ticktock;
|
||||
}
|
||||
|
||||
output; // the stack pointer and the stack base
|
||||
9
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.vm
Normal file
9
projects/07/StackArithmetic/SimpleAdd/SimpleAdd.vm
Normal file
@@ -0,0 +1,9 @@
|
||||
// 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/StackArithmetic/SimpleAdd/SimpleAdd.vm
|
||||
|
||||
// Pushes and adds two constants.
|
||||
push constant 7
|
||||
push constant 8
|
||||
add
|
||||
17
projects/07/StackArithmetic/SimpleAdd/SimpleAddVME.tst
Normal file
17
projects/07/StackArithmetic/SimpleAdd/SimpleAddVME.tst
Normal 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/StackArithmetic/SimpleAdd/SimpleAddVME.tst
|
||||
|
||||
load SimpleAdd.vm,
|
||||
output-file SimpleAdd.out,
|
||||
compare-to SimpleAdd.cmp,
|
||||
output-list RAM[0]%D2.6.2 RAM[256]%D2.6.2;
|
||||
|
||||
set RAM[0] 256, // initializes the stack pointer
|
||||
|
||||
repeat 3 { // SimpleAdd.vm has 3 instructions
|
||||
vmstep;
|
||||
}
|
||||
|
||||
output; // the stack pointer and the stack base
|
||||
560
projects/07/StackArithmetic/StackTest/StackTest.asm
Normal file
560
projects/07/StackArithmetic/StackTest/StackTest.asm
Normal file
@@ -0,0 +1,560 @@
|
||||
// push constant 17
|
||||
@17
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 17
|
||||
@17
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// eq 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T0
|
||||
D;JEQ
|
||||
@END0
|
||||
D=0;JMP
|
||||
(T0)
|
||||
D=-1
|
||||
(END0)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 17
|
||||
@17
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 16
|
||||
@16
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// eq 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T1
|
||||
D;JEQ
|
||||
@END1
|
||||
D=0;JMP
|
||||
(T1)
|
||||
D=-1
|
||||
(END1)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 16
|
||||
@16
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 17
|
||||
@17
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// eq 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T2
|
||||
D;JEQ
|
||||
@END2
|
||||
D=0;JMP
|
||||
(T2)
|
||||
D=-1
|
||||
(END2)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 892
|
||||
@892
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 891
|
||||
@891
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// lt 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T3
|
||||
D;JLT
|
||||
@END3
|
||||
D=0;JMP
|
||||
(T3)
|
||||
D=-1
|
||||
(END3)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 891
|
||||
@891
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 892
|
||||
@892
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// lt 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T4
|
||||
D;JLT
|
||||
@END4
|
||||
D=0;JMP
|
||||
(T4)
|
||||
D=-1
|
||||
(END4)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 891
|
||||
@891
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 891
|
||||
@891
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// lt 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T5
|
||||
D;JLT
|
||||
@END5
|
||||
D=0;JMP
|
||||
(T5)
|
||||
D=-1
|
||||
(END5)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 32767
|
||||
@32767
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 32766
|
||||
@32766
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// gt 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T6
|
||||
D;JGT
|
||||
@END6
|
||||
D=0;JMP
|
||||
(T6)
|
||||
D=-1
|
||||
(END6)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 32766
|
||||
@32766
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 32767
|
||||
@32767
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// gt 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T7
|
||||
D;JGT
|
||||
@END7
|
||||
D=0;JMP
|
||||
(T7)
|
||||
D=-1
|
||||
(END7)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 32766
|
||||
@32766
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 32766
|
||||
@32766
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// gt 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
@T8
|
||||
D;JGT
|
||||
@END8
|
||||
D=0;JMP
|
||||
(T8)
|
||||
D=-1
|
||||
(END8)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 57
|
||||
@57
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 31
|
||||
@31
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 53
|
||||
@53
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// add 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M+D
|
||||
(END9)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 112
|
||||
@112
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// sub 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M-D
|
||||
(END10)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// neg 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=-M
|
||||
(END11)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// and 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M&D
|
||||
(END12)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// push constant 82
|
||||
@82
|
||||
D=A
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// or 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R13
|
||||
M=D
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=M
|
||||
@R14
|
||||
M=D
|
||||
@R13
|
||||
D=M
|
||||
@R14
|
||||
D=M|D
|
||||
(END13)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// not 0
|
||||
@SP
|
||||
M=M-1
|
||||
A=M
|
||||
D=!M
|
||||
(END14)
|
||||
@SP
|
||||
A=M
|
||||
M=D
|
||||
@SP
|
||||
M=M+1
|
||||
// 0
|
||||
4
projects/07/StackArithmetic/StackTest/StackTest.cmp
Normal file
4
projects/07/StackArithmetic/StackTest/StackTest.cmp
Normal file
@@ -0,0 +1,4 @@
|
||||
| RAM[0] | RAM[256] | RAM[257] | RAM[258] | RAM[259] | RAM[260] |
|
||||
| 266 | -1 | 0 | 0 | 0 | -1 |
|
||||
| RAM[261] | RAM[262] | RAM[263] | RAM[264] | RAM[265] |
|
||||
| 0 | -1 | 0 | 0 | -91 |
|
||||
22
projects/07/StackArithmetic/StackTest/StackTest.tst
Normal file
22
projects/07/StackArithmetic/StackTest/StackTest.tst
Normal 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/StackArithmetic/StackTest/StackTest.tst
|
||||
|
||||
load StackTest.asm,
|
||||
output-file StackTest.out,
|
||||
compare-to StackTest.cmp,
|
||||
output-list RAM[0]%D2.6.2
|
||||
RAM[256]%D2.6.2 RAM[257]%D2.6.2 RAM[258]%D2.6.2 RAM[259]%D2.6.2 RAM[260]%D2.6.2;
|
||||
|
||||
set RAM[0] 256, // initializes the stack pointer
|
||||
|
||||
repeat 1000 { // enough cycles to complete the execution
|
||||
ticktock;
|
||||
}
|
||||
|
||||
// outputs the stack pointer (RAM[0]) and
|
||||
// the stack contents: RAM[256]-RAM[265]
|
||||
output;
|
||||
output-list RAM[261]%D2.6.2 RAM[262]%D2.6.2 RAM[263]%D2.6.2 RAM[264]%D2.6.2 RAM[265]%D2.6.2;
|
||||
output;
|
||||
45
projects/07/StackArithmetic/StackTest/StackTest.vm
Normal file
45
projects/07/StackArithmetic/StackTest/StackTest.vm
Normal file
@@ -0,0 +1,45 @@
|
||||
// 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/StackArithmetic/StackTest/StackTest.vm
|
||||
|
||||
// Executes a sequence of arithmetic and logical operations
|
||||
// on the stack.
|
||||
push constant 17
|
||||
push constant 17
|
||||
eq
|
||||
push constant 17
|
||||
push constant 16
|
||||
eq
|
||||
push constant 16
|
||||
push constant 17
|
||||
eq
|
||||
push constant 892
|
||||
push constant 891
|
||||
lt
|
||||
push constant 891
|
||||
push constant 892
|
||||
lt
|
||||
push constant 891
|
||||
push constant 891
|
||||
lt
|
||||
push constant 32767
|
||||
push constant 32766
|
||||
gt
|
||||
push constant 32766
|
||||
push constant 32767
|
||||
gt
|
||||
push constant 32766
|
||||
push constant 32766
|
||||
gt
|
||||
push constant 57
|
||||
push constant 31
|
||||
push constant 53
|
||||
add
|
||||
push constant 112
|
||||
sub
|
||||
neg
|
||||
and
|
||||
push constant 82
|
||||
or
|
||||
not
|
||||
22
projects/07/StackArithmetic/StackTest/StackTestVME.tst
Normal file
22
projects/07/StackArithmetic/StackTest/StackTestVME.tst
Normal 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/StackArithmetic/StackTest/StackTestVME.tst
|
||||
|
||||
load StackTest.vm,
|
||||
output-file StackTest.out,
|
||||
compare-to StackTest.cmp,
|
||||
output-list RAM[0]%D2.6.2
|
||||
RAM[256]%D2.6.2 RAM[257]%D2.6.2 RAM[258]%D2.6.2 RAM[259]%D2.6.2 RAM[260]%D2.6.2;
|
||||
|
||||
set RAM[0] 256, // initializes the stack pointer
|
||||
|
||||
repeat 38 { // StackTest.vm consists of 38 instructions
|
||||
vmstep;
|
||||
}
|
||||
|
||||
// outputs the stack pointer (RAM[0]) and
|
||||
// the stack contents: RAM[256]-RAM[265]
|
||||
output;
|
||||
output-list RAM[261]%D2.6.2 RAM[262]%D2.6.2 RAM[263]%D2.6.2 RAM[264]%D2.6.2 RAM[265]%D2.6.2;
|
||||
output;
|
||||
Reference in New Issue
Block a user