mirror of
https://github.com/avinal/The-VM-to-HACK-Translator.git
synced 2026-01-11 15:48:32 +05:30
example files
This commit is contained in:
63
Test-Files/NestedCall/Sys.vm
Normal file
63
Test-Files/NestedCall/Sys.vm
Normal file
@@ -0,0 +1,63 @@
|
||||
// Sys.vm for NestedCall test.
|
||||
|
||||
// Sys.init()
|
||||
//
|
||||
// Calls Sys.main() and stores return value in temp 1.
|
||||
// Does not return. (Enters infinite loop.)
|
||||
|
||||
function Sys.init 0
|
||||
push constant 4000 // test THIS and THAT context save
|
||||
pop pointer 0
|
||||
push constant 5000
|
||||
pop pointer 1
|
||||
call Sys.main 0
|
||||
pop temp 1
|
||||
label LOOP
|
||||
goto LOOP
|
||||
|
||||
// Sys.main()
|
||||
//
|
||||
// Sets locals 1, 2 and 3, leaving locals 0 and 4 unchanged to test
|
||||
// default local initialization to 0. (RAM set to -1 by test setup.)
|
||||
// Calls Sys.add12(123) and stores return value (135) in temp 0.
|
||||
// Returns local 0 + local 1 + local 2 + local 3 + local 4 (456) to confirm
|
||||
// that locals were not mangled by function call.
|
||||
|
||||
function Sys.main 5
|
||||
push constant 4001
|
||||
pop pointer 0
|
||||
push constant 5001
|
||||
pop pointer 1
|
||||
push constant 200
|
||||
pop local 1
|
||||
push constant 40
|
||||
pop local 2
|
||||
push constant 6
|
||||
pop local 3
|
||||
push constant 123
|
||||
call Sys.add12 1
|
||||
pop temp 0
|
||||
push local 0
|
||||
push local 1
|
||||
push local 2
|
||||
push local 3
|
||||
push local 4
|
||||
add
|
||||
add
|
||||
add
|
||||
add
|
||||
return
|
||||
|
||||
// Sys.add12(int n)
|
||||
//
|
||||
// Returns n+12.
|
||||
|
||||
function Sys.add12 0
|
||||
push constant 4002
|
||||
pop pointer 0
|
||||
push constant 5002
|
||||
pop pointer 1
|
||||
push argument 0
|
||||
push constant 12
|
||||
add
|
||||
return
|
||||
Reference in New Issue
Block a user