This commit is contained in:
QkoSad
2025-07-16 13:00:37 +03:00
commit 7894b48931
806 changed files with 162532 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@0
D=A
@LCL
M=M+D
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D
@0
D=A
@LCL
M=M-D
//pop LOCAL
(Sys.init$LOOP_START)
//LABEL
@0
D=A
@ARG
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push ARGUMENT
@0
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@0
D=A
@LCL
M=M+D
@SP
M=M-1
A=M
D=M
@LCL
A=M
M=D
@0
D=A
@LCL
M=M-D
//pop LOCAL
@0
D=A
@ARG
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push ARGUMENT
@1
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
A=A-1
M=M-D
//SUB
@0
D=A
@ARG
M=M+D
@SP
M=M-1
A=M
D=M
@ARG
A=M
M=D
@0
D=A
@ARG
M=M-D
//pop ARG
@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
@Sys.init$LOOP_START
D;JNE
//IFGOTO
@0
D=A
@LCL
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push LOCAL
+2
View File
@@ -0,0 +1,2 @@
| RAM[0] |RAM[256]|
| 257 | 6 |
+127
View File
@@ -0,0 +1,127 @@
0000000000000000
1110110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
0000000000000000
1110110000010000
0000000000000001
1111000010001000
0000000000000000
1111110010001000
1111110000100000
1111110000010000
0000000000000001
1111110000100000
1110001100001000
0000000000000000
1110110000010000
0000000000000001
1111000111001000
0000000000000000
1110110000010000
0000000000000010
1111000010100000
1111110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
0000000000000000
1110110000010000
0000000000000001
1111000010100000
1111110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
0000000000000000
1111110010001000
1111110000100000
1111110000010000
1110110010100000
1111000010001000
0000000000000000
1110110000010000
0000000000000001
1111000010001000
0000000000000000
1111110010001000
1111110000100000
1111110000010000
0000000000000001
1111110000100000
1110001100001000
0000000000000000
1110110000010000
0000000000000001
1111000111001000
0000000000000000
1110110000010000
0000000000000010
1111000010100000
1111110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
0000000000000001
1110110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
0000000000000000
1111110010001000
1111110000100000
1111110000010000
1110110010100000
1111000111001000
0000000000000000
1110110000010000
0000000000000010
1111000010001000
0000000000000000
1111110010001000
1111110000100000
1111110000010000
0000000000000010
1111110000100000
1110001100001000
0000000000000000
1110110000010000
0000000000000010
1111000111001000
0000000000000000
1110110000010000
0000000000000010
1111000010100000
1111110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
0000000000000000
1111110010001000
1111110000100000
1111110000010000
0000000000010110
1110001100000101
0000000000000000
1110110000010000
0000000000000001
1111000010100000
1111110000010000
0000000000000000
1111110000100000
1110001100001000
0000000000000000
1111110111001000
+2
View File
@@ -0,0 +1,2 @@
| RAM[0] |RAM[256]|
| 256 | 1 |
+20
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/08/ProgramFlow/BasicLoop/BasicLoop.tst
load BasicLoop.asm,
output-file BasicLoop.out,
compare-to BasicLoop.cmp,
output-list RAM[0]%D1.6.1 RAM[256]%D1.6.1;
set RAM[0] 256,
set RAM[1] 300,
set RAM[2] 400,
set RAM[400] 3,
repeat 600 {
ticktock;
}
output;
+22
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/08/ProgramFlow/BasicLoop/BasicLoop.vm
// Computes the sum 1 + 2 + ... + argument[0] and pushes the
// result onto the stack. Argument[0] is initialized by the test
// script before this code starts running.
push constant 0
pop local 0 // initializes sum = 0
label LOOP_START
push argument 0
push local 0
add
pop local 0 // sum = sum + counter
push argument 0
push constant 1
sub
pop argument 0 // counter--
push argument 0
if-goto LOOP_START // If counter != 0, goto LOOP_START
push local 0
+20
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/08/ProgramFlow/BasicLoop/BasicLoopVME.tst
load BasicLoop.vm,
output-file BasicLoop.out,
compare-to BasicLoop.cmp,
output-list RAM[0]%D1.6.1 RAM[256]%D1.6.1;
set sp 256,
set local 300,
set argument 400,
set argument[0] 3,
repeat 33 {
vmstep;
}
output;
+255
View File
@@ -0,0 +1,255 @@
@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
@4
M=D
//pop POINTER
@0
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@0
D=A
@THAT
M=M+D
@SP
M=M-1
A=M
D=M
@THAT
A=M
M=D
@0
D=A
@THAT
M=M-D
//pop THAT
@1
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@1
D=A
@THAT
M=M+D
@SP
M=M-1
A=M
D=M
@THAT
A=M
M=D
@1
D=A
@THAT
M=M-D
//pop THAT
@0
D=A
@ARG
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push ARGUMENT
@2
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
A=A-1
M=M-D
//SUB
@0
D=A
@ARG
M=M+D
@SP
M=M-1
A=M
D=M
@ARG
A=M
M=D
@0
D=A
@ARG
M=M-D
//pop ARG
(Sys.init$MAIN_LOOP_START)
//LABEL
@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
@Sys.init$COMPUTE_ELEMENT
D;JNE
//IFGOTO
@Sys.init$END_PROGRAM
0;JMP
//GOTO
(Sys.init$COMPUTE_ELEMENT)
//LABEL
@0
D=A
@THAT
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push THAT
@1
D=A
@THAT
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push THAT
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@2
D=A
@THAT
M=M+D
@SP
M=M-1
A=M
D=M
@THAT
A=M
M=D
@2
D=A
@THAT
M=M-D
//pop THAT
@4
D=M
@SP
A=M
M=D
@SP
M=M+1
//push POINTER
@1
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
A=A-1
M=M+D
//ADD
@SP
M=M-1
A=M
D=M
@4
M=D
//pop POINTER
@0
D=A
@ARG
A=M+D
D=M
@SP
A=M
M=D
@SP
M=M+1
//push ARGUMENT
@1
D=A
@SP
A=M
M=D
@SP
M=M+1
//push CONSTANT
@SP
M=M-1
A=M
D=M
A=A-1
M=M-D
//SUB
@0
D=A
@ARG
M=M+D
@SP
M=M-1
A=M
D=M
@ARG
A=M
M=D
@0
D=A
@ARG
M=M-D
//pop ARG
@Sys.init$MAIN_LOOP_START
0;JMP
//GOTO
(Sys.init$END_PROGRAM)
//LABEL
@@ -0,0 +1,2 @@
|RAM[3000]|RAM[3001]|RAM[3002]|RAM[3003]|RAM[3004]|RAM[3005]|
| 0 | 1 | 1 | 2 | 3 | 5 |
@@ -0,0 +1,2 @@
|RAM[3000]|RAM[3001]|RAM[3002]|RAM[3003]|RAM[3004]|RAM[3005]|
| 0 | 1 | 1 | 2 | 3 | 5 |
@@ -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/08/ProgramFlow/FibonacciSeries/FibonacciSeries.tst
load FibonacciSeries.asm,
output-file FibonacciSeries.out,
compare-to FibonacciSeries.cmp,
output-list RAM[3000]%D1.6.2 RAM[3001]%D1.6.2 RAM[3002]%D1.6.2
RAM[3003]%D1.6.2 RAM[3004]%D1.6.2 RAM[3005]%D1.6.2;
set RAM[0] 256,
set RAM[1] 300,
set RAM[2] 400,
set RAM[400] 6,
set RAM[401] 3000,
repeat 1100 {
ticktock;
}
output;
+49
View File
@@ -0,0 +1,49 @@
// 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/ProgramFlow/FibonacciSeries/FibonacciSeries.vm
// Puts the first argument[0] elements of the Fibonacci series
// in the memory, starting in the address given in argument[1].
// Argument[0] and argument[1] are initialized by the test script
// before this code starts running.
push argument 1
pop pointer 1 // that = argument[1]
push constant 0
pop that 0 // first element in the series = 0
push constant 1
pop that 1 // second element in the series = 1
push argument 0
push constant 2
sub
pop argument 0 // num_of_elements -= 2 (first 2 elements are set)
label MAIN_LOOP_START
push argument 0
if-goto COMPUTE_ELEMENT // if num_of_elements > 0, goto COMPUTE_ELEMENT
goto END_PROGRAM // otherwise, goto END_PROGRAM
label COMPUTE_ELEMENT
push that 0
push that 1
add
pop that 2 // that[2] = that[0] + that[1]
push pointer 1
push constant 1
add
pop pointer 1 // that += 1
push argument 0
push constant 1
sub
pop argument 0 // num_of_elements--
goto MAIN_LOOP_START
label END_PROGRAM
@@ -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/08/ProgramFlow/FibonacciSeries/FibonacciSeriesVME.tst
load FibonacciSeries.vm,
output-file FibonacciSeries.out,
compare-to FibonacciSeries.cmp,
output-list RAM[3000]%D1.6.2 RAM[3001]%D1.6.2 RAM[3002]%D1.6.2
RAM[3003]%D1.6.2 RAM[3004]%D1.6.2 RAM[3005]%D1.6.2;
set sp 256,
set local 300,
set argument 400,
set argument[0] 6,
set argument[1] 3000,
repeat 73 {
vmstep;
}
output;