.
This commit is contained in:
+142
@@ -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
@@ -0,0 +1,2 @@
|
||||
| RAM[0] |RAM[256]|
|
||||
| 257 | 6 |
|
||||
+127
@@ -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
@@ -0,0 +1,2 @@
|
||||
| RAM[0] |RAM[256]|
|
||||
| 256 | 1 |
|
||||
+20
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user