82 lines
2.1 KiB
TypeScript
82 lines
2.1 KiB
TypeScript
export const vm = `// 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/8/ProgramFlow/BasicLoop/BasicLoop.vm
|
|
|
|
// Computes the sum 1 + 2 + ... + n and pushes the result onto
|
|
// the stack. The value n is given in argument[0], which must be
|
|
// initialized by the caller of this code.
|
|
|
|
push constant 0
|
|
pop local 0 // sum = 0
|
|
label LOOP
|
|
push argument 0
|
|
push local 0
|
|
add
|
|
pop local 0 // sum = sum + n
|
|
push argument 0
|
|
push constant 1
|
|
sub
|
|
pop argument 0 // n--
|
|
push argument 0
|
|
if-goto LOOP // if n > 0, goto LOOP
|
|
push local 0 // else, pushes sum to the stack's top
|
|
`;
|
|
|
|
export const vm_tst = `// 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/8/ProgramFlow/BasicLoop/BasicLoopVME.tst
|
|
|
|
// Tests and illustrates BasicLoop.vm on the VM emulator.
|
|
// Before executing the code, initializes the stack pointer
|
|
// and the base addresses of the local and argument segments,
|
|
// and sets argument[0].
|
|
|
|
load BasicLoop.vm,
|
|
compare-to BasicLoop.cmp,
|
|
|
|
set sp 256,
|
|
set local 300,
|
|
set argument 400,
|
|
set argument[0] 3,
|
|
|
|
repeat 33 {
|
|
vmstep;
|
|
}
|
|
|
|
// Outputs the stack pointer and the value at the stack's base
|
|
output-list RAM[0]%D1.6.1 RAM[256]%D1.6.1;
|
|
output;
|
|
`;
|
|
|
|
export const hdl_tst = `// 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/8/ProgramFlow/BasicLoop/BasicLoop.tst
|
|
|
|
// Tests BasicLoop.asm on the CPU emulator.
|
|
// Before executing the code, initializes the stack pointer
|
|
// and the base addresses of the local and argument segments,
|
|
// and sets argument[0].
|
|
|
|
compare-to BasicLoop.cmp,
|
|
|
|
set RAM[0] 256, // SP
|
|
set RAM[1] 300, // LCL
|
|
set RAM[2] 400, // ARG
|
|
set RAM[400] 3, // argument 0
|
|
|
|
repeat 600 {
|
|
ticktock;
|
|
}
|
|
|
|
// Outputs the stack pointer and the value at the stack's base
|
|
output-list RAM[0]%D1.6.1 RAM[256]%D1.6.1;
|
|
output;
|
|
`;
|
|
|
|
export const cmp = `| RAM[0] |RAM[256]|
|
|
| 257 | 6 |
|
|
`;
|