Add solutions for part 1
This commit is contained in:
194
projects/08/ProgramFlow/BasicLoop/BasicLoop.asm
Normal file
194
projects/08/ProgramFlow/BasicLoop/BasicLoop.asm
Normal file
@@ -0,0 +1,194 @@
|
||||
// push constant 0
|
||||
@0
|
||||
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
|
||||
|
||||
// label LOOP_START
|
||||
(LOOP_START)
|
||||
|
||||
// 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
|
||||
|
||||
// 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
|
||||
|
||||
// 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
|
||||
|
||||
// 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 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
|
||||
|
||||
// push constant 1
|
||||
@1
|
||||
D = A
|
||||
@SP
|
||||
A = M
|
||||
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
|
||||
|
||||
// pop argument 0
|
||||
@0
|
||||
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 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
|
||||
|
||||
// if-goto LOOP_START
|
||||
@SP
|
||||
A = M
|
||||
A = A - 1
|
||||
D = M
|
||||
@SP
|
||||
M = M - 1
|
||||
@LOOP_START
|
||||
D;JNE
|
||||
// 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
|
||||
|
||||
2
projects/08/ProgramFlow/BasicLoop/BasicLoop.cmp
Normal file
2
projects/08/ProgramFlow/BasicLoop/BasicLoop.cmp
Normal file
@@ -0,0 +1,2 @@
|
||||
| RAM[0] |RAM[256]|
|
||||
| 257 | 6 |
|
||||
20
projects/08/ProgramFlow/BasicLoop/BasicLoop.tst
Normal file
20
projects/08/ProgramFlow/BasicLoop/BasicLoop.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/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
projects/08/ProgramFlow/BasicLoop/BasicLoop.vm
Normal file
22
projects/08/ProgramFlow/BasicLoop/BasicLoop.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/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
projects/08/ProgramFlow/BasicLoop/BasicLoopVME.tst
Normal file
20
projects/08/ProgramFlow/BasicLoop/BasicLoopVME.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/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;
|
||||
Reference in New Issue
Block a user